การโค้ดเป็นทีมต้องยอมรับและเชื่อใจกันและกัน
ประสบการณ์อย่างนึง ที่ผมได้จากทั้งฝึกงานและเขียน AI Robocup คือการโค้ดเป็นทีมครับ
ส่วนตัวผมเป็นคนที่ทำงานคนเดียวมาตลอด ตั้งแต่ไหนแต่ไร จะมีก็งานพวกส่งประกวดซึ่ง
ก็มักจะทำกับคนที่คุ้นเคย คนสองคนเท่านั้นครับ และก็จะแบ่งงานเป็นส่วนๆอย่างเห็นได้ชัด
ทำนองว่า ตกลง interface กันก็พอ ไม่เคยต้องใช้ class ร่วมกัน ไม่ต้อง build ร่วมกันอะไรทำนองนี้
version-control จึงเป็นเรื่องที่ผมไม่ค่อยคุ้นเคยเท่าไหร่ ได้มาใช้ก็ตอนทำ AI Robocup นี่แหละ
ครับเพราะต้อง build โปรเจ็คเดียวกัน ซึ่ง version-control ช่วยได้มาก
แต่ตรงนี้แหละครับ ที่ผมรู้สึกว่าการโค้ดเป็นทีมต้องยอมรับและเชื่อใจกัน
เราต้องยอมรับในฝีมือของกันและกัน เชื่อใจกัน ช่วงแรกผมรู้สึกเป็นอย่างมาก
เวลา update source ผมเห็นว่ามีคนในทีมแก้โค้ดใน class ที่สำคัญๆ ผมจะระแวงครับ
เหมือนไม่เชื่อมือ เค้าแก้อะไร แก้ถูกรึเปล่า จะต้องเข้าไปดู diff เสมอๆ
หรือบางครั้ง update แล้วมีคนแก้คลาสที่เราเขียนอยู่ เค้าทำอะไร?
หรือบางครั้ง เราต้องเรียกใช้เมธอทคนอื่น โดยไม่มีเวลาพอจะอ่านโค้ดเค้าได้ เราก้ต้องเชื่อว่า
เค้าเขียนถูกไว้ก่อน จนเกิดบั๊ก ต้องตามไปแก้ให้เค้า
เรื่องคุณภาพของโค้ดก็สำคัญเช่นกัน ช่วงแรกๆ ผมหงุดหงิดมาก กับการตั้งชื่อตัวแปร
ของคนในทีม การตั้งชื่อคลาสของคนในทีม คนในทีมบางคนตั้งชื่อคลาส สะกดภาษาอังกฤษ
ผิด แล้วก็ใช้ไปแบบนั้น โดยไม่สนใจ แล้ว commit ขึ้น server
ผมหงุดหงิดมากครับ หรือบางคน ออกแบบ method แปลก ตั้งชื่อแปลกๆ
บางคนก็ comment แหลกเลย เอะอะ comment เก็บไว้
ผมพอจะเข้าใจนะครับ ว่าเรื่องพวกนี้ มันเป็นเรื่องของ style การเขียนโปรแกรมของแต่ละคน
แต่ก็อดหงุดหงิดไม่ได้เวลาเจอ หลังๆเริ่มจะชิน
ซอฟท์แวร์ใหญ่ๆ ที่ผมเคยเห็น เค้าก็ใช้วิธีการว่า จำกัดคน
commit ไม่ใช่ทุกคนจะ commit ขึ้น server ได้ คนที่ส่ง patch ไป ก็ต้องให้
maintainer ตรวจสอบคุณภาพ และส่งกลับไปแก้จนแน่ใจ จึงจะ commit ได้
ซึ่งเท่าที่เห็นเค้าก็จะกำหนด style ให้เป็นที่ยอมรับกันด้วย เช่นต้องตั้งชื่อตัวแปรเป็น camel-case
ต้องใช้ tab ขนาด 4 ต้องตั้งชื่อคลาสตามรูปแบบนี้ วางปีกกาแบบนี้ คอมเมนท์แบบนี้
ดูเหมือนจู้จี้ และละเอียดเกินไปนะครับ แต่ก็ทำให้ทุกคนเขียนโค้ดออกมาในรูปแบบเดียวกัน
อ่านง่ายและสวยงาม
มีั convention อย่างนึงในทีม AI Robocup ทำมาหลายปีแล้วด้วย คือคลาสจำพวก play
การเล่น คนเขียนคลาสเหล่านั้นจะตั้งชื่อตัวเองนำหน้าชื่อคลาสเสมอ เช่น TeeDefenderGroup
, YingIndirectAttackGroup และ TongUForwardRole เป็นต้น
สาเหตุที่ทำแบบนี้ เพราะจะได้รู้ทันทีว่าใครเขียน class นี้ class นี้เล่นบอลอย่างไร
มีบั๊กตรงไหน จะได้ถามถูกคน ด่าถูกคน นอกจากนี้มันยังส่งผลถึงความเชื่อถือด้วยครับ
ถ้าเป็นคลาสของคนนี้ มั่นใจได้ระดับนึงว่าจะไม่บั๊ก ของคนนี้ ไม่ชัวร์ ต้องลอง
ผมเคยพยายามจะเปลี่ยน convention นี้ แต่ก็จนต่อเหตุผล เพราะวิธีนี้สะดวกกว่าจริงๆ
แม้จะดูไม่สวยเท่าไหร่ ในมุมมองของคนเขียนโปรแกรม
ผมไม่รู้ว่าในโลกนี้ โปรเจ็คใหญ่ๆ เค้าจัดการปัญหานี้อย่างไร หรือไม่สนใจว่าใครเขียน
ถ้ามีปัญหา ก็อ่านโค้ดแล้วแก้เองเลย หรืออาจจะเขียน comment ไว้ที่หัวไฟล์เอามั้ง
ถึงตรงนี้ ขอเติมต่อท้ายจากหัวข้อครั้งนี้เป็น
การโค้ดเป็นทีมต้องยอมรับและเชื่อใจกัน แต่คุณภาพของโค้ดก็ต้องสำคัญเช่นกันครับ
ใครสะกดผิดหว่า??? 555
แต่เราชอบการตั้งชื่อคลาสแบบนั้นนะ ด้วยเหตุผลที่แกอธิบายมานั่นแหละ จะได้ด่าถูกคน
ขอเดาว่าใช้ subversion…
ลอง bazaar ดูเป็นแบบ distributed ใช้แล้วสบายใจกว่า
ทำไม กอน ต้อง // ทองอู๋ ด้วย 55
รู้สึกอ่านบล๊อกนี้แล้วได้บรรยากาศการทำงาน ของ Programmer ดี งืมมมมม
สอนใช้ subversion หน่อยดิ – -”
เดียวนะไอ้ที่บอกว่ามีคุณภาพนี่Code มึงมีแต่ warning เลยไม่ใช่เหรอ
เราว่า ส่งสัยเขียนน้อยคนมั้ง subversion เดาเอาน่ะ
เราชอบก็อปทั้ง project อ่ะแล้วก็มาแก้ๆตามจาย ฮ่าๆ
แต่เราไม่เคยทำอาราย เกียวกับ โรบอทด้วยแหละ
เวลาจะทำไรของที่เขาทำไว้แล้วแล้วก็ใช้เจิงใช้มะก็ก็อปหมดนั้นเลย
เปลี่ยนชื่อแก้ตามใจชอบอ่ะ ดุเป็นเด็กๆอ่ะเปล่าน้าาา
แต่เรากัวว่าแก้ๆไปจะทำให้ของเขาแย่กว่าเดิมมากกว่าอ่ะ
ถ้าของใหม่แก้ได้เจิงๆแล้วค่อยก็อปเฉพาะ line นั้นๆลงไป