Pair Programming จับคู่ซิ่งเขียนโปรแกรม

มาโครอาร์ตฟิล์มนำเสนอภาพยนตร์ฮาทะลักต่อมอะดรีนาลีนแตก

ไม่ใช่สิ นี่ไม่ใช่บล็อกโปรโมทหนัง ถึงชื่อบทความนี้จะออกแนวคล้ายชื่อหนังไปหน่อย แต่จริงๆ แล้ว Pair Programming คือเทคนิคหนึ่งในการเขียนซอฟท์แวร์ที่โปรแกรมเมอร์สองคนทำงานร่วมกันโดยมีคีย์บอร์ดให้ใช้เพียงอันเดียว (อนาถายิ่งนัก)

ไม่ได้ยากไร้ขนาดนั้นหรอกครับ แต่มันมีเหตุผลเบื้องหลังที่ให้โปรแกรมเมอร์สองคนทำงานโดยใช้หนึ่งคีย์บอร์ดหนึ่งคอมพิวเตอร์อยู่

ผมเคยทำ Pair Programming อยู่ครั้งนึงครับ ใช้เวลาประมาณสองชั่วโมง ถ้าใครมี source code ของโปรแกรม MySQL อยู่ ลองเปิดไฟล์ชื่อ ctype-tis620.c ขึ้นมาดูครับ (ไฟล์อยู่ใน directory ไหนก็ไปควานหาเองละกัน) จะพบส่วนคอมเมนต์บริเวณหัวไฟล์ที่มีชื่อของผู้ร่วมพัฒนาไฟล์นี้อยู่

รายชื่อผู้มีส่วนร่วมพัฒนา MySQL ctype-tis620.c

จะพบชื่อของผมกับชื่อของคุณ Korakot Chaovavanich ซึ่งเป็นคนที่ทำ Pair Programming ร่วมกับผมในตอนนั้น (ปัจจุบันบวชเป็นครูบาอยู่ที่ชลบุรีได้เกือบสองปีแล้ว)

โปรแกรมเมอร์สองคนที่ทำ Pair Programming ร่วมกัน คนหนึ่งทำหน้าที่จับคีย์บอร์ดเพื่อเขียนโปรแกรม ซึ่งเรียกคนนี้ว่าคนขับ ส่วนอีกคนทำหน้าที่คอยดูว่ามีช่องโหว่อะไรเกิดขึ้นในโปรแกรมหรือไม่ หรือมีไอเดียอะไรที่ดีกว่าวิธีที่คนขับกำลังเขียนอยู่หรือเปล่า คนนี้เรียกว่าเนวิเกเตอร์ สองคนนี้อาจจะสลับตำแหน่งกันไปมาได้ คนขับขับไปสักพักเริ่มเหนื่อยก็เปลี่ยนให้เนมาขับแทน แล้วตัวเองไปนอน เอ้ย ไปนั่งดูเหมือนที่เนทำ

การทำ Pair Programming เหมาะกับงานชิ้นเล็กๆ ใช้เวลาประมาณ 1 – 2 ชั่วโมง เพราะถ้ามากกว่านี้จะเครียดและเบลอกันทั้งคู่ ระหว่างที่ทำงานร่วมกัน ก็ต้องถ้อยทีถ้อยอาศัยต่อกัน อย่างเช่นถ้าเนเห็นว่าคนขับเขียนอะไรผิดพลาดขึ้นมา ก็ควรจะปล่อยให้เขียนเสร็จก่อน แล้วถึงจะชี้ข้อผิดพลาดให้เห็น หรือถ้าเนเห็นว่าอาจจะเกิดบั๊กอะไรบางอย่างขึ้นได้ หรือมีไอเดียที่อยู่นอกเหนือจากสิ่งที่คนขับกำลังโฟกัสอยู่ เนก็ควรจะจดลงกระดาษแล้วค่อยคุยประเด็นนี้หลังจากที่คนขับทำส่วนที่โฟกัสอยู่เสร็จแล้ว

การจับคู่มีอยู่สามแบบ คือมือใหม่หัดขับกับมือใหม่หัดขับ มือใหม่หัดขับกับมือเก๋าขับคล่อง และมือเก๋าขับคล่องกับมือเก๋าขับคล่อง ถ้าเป็นโปรแกรมเมอร์ที่มีความสามารถในระดับเดียวกันมักจะไม่เกิดปัญหาอะไร แต่ถ้าฝีมือต่างกันอยู่ ก็ควรจะให้มือใหม่หัดขับเป็นผู้จับคีย์บอร์ดเป็นหลัก เพราะถ้าให้มือใหม่นั่งเป็นเนก็อาจจะสติหลุดลอยขณะที่มือเก๋ากำลังขับอยู่ และมือเก๋าเองก็ต้องใจเย็นมากๆ ที่ต้องนั่งดูมือใหม่ทำอะไรงี่เง่าบ้าง ให้ค่อยๆ บอก ค่อยๆ สอนกันไป

Pair Programming มีข้อดีหลายอย่าง เช่น

  • โปรแกรมที่เขียนออกมาจะค่อนข้างดูดี เพราะโค้ดต้องดูรู้เรื่องจากทั้งสองคน
  • มีบั๊กน้อยเนื่องจากบั๊กถูกจับได้ตั้งแต่เนิ่นๆ
  • มีการถ่ายทอดความรู้ถึงกันได้อย่างรวดเร็ว
  • ช่วยลดความเสี่ยงของการที่มีคนรู้เรื่องโปรแกรมอยู่คนเดียว ซึ่งถ้าคนนี้ออกจากทีมไปก็จะไม่มีใครอยากมานั่งแก้โปรแกรมของคนอื่น
  • ช่วยให้โปรแกรมเมอร์มีวินัยมากขึ้น เพราะถ้านั่งทำงานคนเดียวก็อาจจะมัวแต่นั่งแชท
  • ช่วยให้โปรแกรมเมอร์ถูกคนอื่นเข้ามาแทรกน้อยลง ถ้านั่งทำงานคนเดียว บางทีคนอื่นจะเข้ามาคุยด้วยได้ง่าย แต่ถ้าทำงานกันสองคน คนอื่นเห็นก็ไม่กล้าเข้ามารบกวน
  • ช่วยให้โปรแกรมเมอร์มีความมั่นใจมากขึ้น บางทีถ้าเป็นโปรแกรมยากๆ อาจจะรู้สึกว่าทำคนเดียวไม่ไหว แต่พออยู่ด้วยกันสองคนก็จะช่วยกันทำสิ่งที่เป็นไปไม่ได้ให้ง่ายขึ้น และพอทำสำเร็จก็จะรู้สึกดีใจโคตรๆ กันทั้งคู่

แต่ก็มีข้อเสียอยู่บ้างเหมือนกัน เช่น ถ้าไปเจอคู่หูที่อีโก้แรง ปากคอเราะร้าย แบบนี้ก็ลำบากหน่อย หรือโปรแกรมเมอร์บางคนอาจจะชอบทำงานคนเดียวมากกว่า เวลาทำสองคนแล้วจะรู้สึกเกร็ง ไม่เป็นตัวของตัวเอง คิดอะไรไม่ออก

มีการศึกษาวิจัยเรื่อง Pair Programming อย่างจริงจังโดย University of Utah ได้ผลว่าการจับคู่เขียนโปรแกรมส่งผลให้งานเสร็จช้ากว่าการแยกกันทำสองคน 15% แต่ก็ทำให้จำนวนบั๊กลดลง 15% ด้วย ซึ่งจำนวนบั๊กที่ลดลงนี้เป็นผลดีมาก เพราะบ่อยครั้งที่ต้นทุนของการแก้บั๊กสูงกว่าต้นทุนของการเขียนโปรแกรม (ข้อมูลจาก Wikipedia)

นอกจากนี้ยังมีการวิจัยที่ได้ผลว่า Pair Programming ช่วยลดความผิดพลาดในระบบที่มีความซับซ้อนสูงได้ถึง 48% ภายในระยะเวลาทำงานเท่ากัน ส่วนในระบบที่เรียบง่าย Pair Programming ช่วยลดเวลาทำงานลงได้ 20% โดยที่มีบั๊กจำนวนเท่ากัน

กลับมาที่ปี 2001 ที่ผมทำ Pair Programming ตอนนั้นโจทย์ของเราคือการแก้ปัญหาการค้นหาและการเรียงลำดับข้อมูลภาษาไทยใน MySQL ซึ่งผมพบปัญหานี้ในเว็บพันทิป แต่ผมก็รู้สึกว่ามันคงเป็นเรื่องใหญ่และใช้เวลาเยอะในการแก้ไขปัญหานี้ด้วยตัวคนเดียว ก็เลยเล่าปัญหานี้ให้เพื่อนฟัง และกลายเป็นที่มาของ Pair Programming ที่นั่งทำกันตอนสองทุ่มที่ออฟฟิศพันทิป เป้าหมายของเราคือแก้ source code ของ MySQL และส่ง source code ที่แก้ไขแล้วกลับไปรวมที่ MySQL เพื่อเผยแพร่ในเวอร์ชั่นต่อไป

เวลาสองชั่วโมงที่นั่งทำ Pair Programming กัน ส่วนใหญ่จะใช้ไปกับการแกะ source code เดิม และหาวิธีแก้ไข พอนั่งทำไปสักพักจะเริ่มรู้สึกเบลอสติหลุดอยู่เหมือนกัน (โปรแกรมยากจัด) แต่โดยรวมแล้วก็สนุกดีครับ และดีใจมากๆ เมื่อทำจนสำเร็จได้

โปรแกรมเมอร์คนไหนที่มีโอกาสก็อยากให้ลองจับคู่เขียนโปรแกรมดูครับ แต่อย่าจับคู่มองตาหวานซึ้งทำเป็นรักแห่งสยามล่ะ ขนลุก!

ถ้าอ่านแล้วชอบ ฝากแชร์ด้วยนะครับ
  •  
  •  
  •  
  •  
  •  
  •  
  •  

,