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

จะพบชื่อของผมกับชื่อของคุณ 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 เดิม และหาวิธีแก้ไข พอนั่งทำไปสักพักจะเริ่มรู้สึกเบลอสติหลุดอยู่เหมือนกัน (โปรแกรมยากจัด) แต่โดยรวมแล้วก็สนุกดีครับ และดีใจมากๆ เมื่อทำจนสำเร็จได้
โปรแกรมเมอร์คนไหนที่มีโอกาสก็อยากให้ลองจับคู่เขียนโปรแกรมดูครับ แต่อย่าจับคู่มองตาหวานซึ้งทำเป็นรักแห่งสยามล่ะ ขนลุก!
บทความที่เกี่ยวข้องกัน










December 10th, 2007 at 3:02 น.
เจ๋งดีครับ ไม่เคยรู้เลยว่ามีการทำงานลักษณะนี้ด้วย
อยากลองทำแบบนี้ดูบ้างจัง ผมว่ายังไงสองหัวก็ดีกว่าหัวเดียว ถึงแม้ว่าอาจจะมีตีกันบ้าง แต่รูปแบบในการคิดที่แตกต่างกันก็ช่วยให้วิธีการแก้ปัญหามันมีรูปแบบที่หลากหลายมากขึ้นด้วย
December 10th, 2007 at 21:16 น.
ไม่รู้จะไป pair กะคราย T-T…
December 11th, 2007 at 14:24 น.
หุบเข้าเร้นลับ อิ อิ
December 11th, 2007 at 14:48 น.
เออ แปลกดี
เพิ่งเคยได้ยินนี่แหละ
น่าจะลองเอาไปประยุกต์ใช้ดู
December 12th, 2007 at 13:29 น.
Xtreme Programming นี่น่าสนใจดีครับ
December 18th, 2007 at 20:18 น.
ผมก็เคยทำกับเพื่อนที่ๆทำงานเก่าครับ หัวหน้าเป็นฝรั่ง เห็นผมกะเพื่อนนั่ง pair กันอยู่ มันเล่นเดินเข้ามาพูดว่า “How many programmers does it take to change a light bulb?”
ถึงจะ joke แต่ตอนนั้นอารมณ์ฉุน + เซ็งเรย 55 เพราะมันฟังแล้วไม่ขำ
January 19th, 2008 at 13:16 น.
ดีมากครับ ผมว่า รู้ไวใช่ว่าใส่บ่าแบกหาม ดีครับ