Pair Programming จับคู่ซิ่งเขียนโปรแกรม
เขียนโดย MacroArt เมื่อ December 7, 2007 – 21:50 น.มาโครอาร์ตฟิล์มนำเสนอภาพยนตร์ฮาทะลักต่อมอะดรีนาลีนแตก
ไม่ใช่สิ นี่ไม่ใช่บล็อกโปรโมทหนัง ถึงชื่อบทความนี้จะออกแนวคล้ายชื่อหนังไปหน่อย แต่จริงๆ แล้ว 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 เดิม และหาวิธีแก้ไข พอนั่งทำไปสักพักจะเริ่มรู้สึกเบลอสติหลุดอยู่เหมือนกัน (โปรแกรมยากจัด) แต่โดยรวมแล้วก็สนุกดีครับ และดีใจมากๆ เมื่อทำจนสำเร็จได้
โปรแกรมเมอร์คนไหนที่มีโอกาสก็อยากให้ลองจับคู่เขียนโปรแกรมดูครับ แต่อย่าจับคู่มองตาหวานซึ้งทำเป็นรักแห่งสยามล่ะ ขนลุก!
7 Responses to “Pair Programming จับคู่ซิ่งเขียนโปรแกรม”
เจ๋งดีครับ ไม่เคยรู้เลยว่ามีการทำงานลักษณะนี้ด้วย
อยากลองทำแบบนี้ดูบ้างจัง ผมว่ายังไงสองหัวก็ดีกว่าหัวเดียว ถึงแม้ว่าอาจจะมีตีกันบ้าง แต่รูปแบบในการคิดที่แตกต่างกันก็ช่วยให้วิธีการแก้ปัญหามันมีรูปแบบที่หลากหลายมากขึ้นด้วย
By dogdoy on Dec 10, 2007
ไม่รู้จะไป pair กะคราย T-T…
By WindForce on Dec 10, 2007
หุบเข้าเร้นลับ อิ อิ
By Mr. PeeTai on Dec 11, 2007
เออ แปลกดี
เพิ่งเคยได้ยินนี่แหละ
น่าจะลองเอาไปประยุกต์ใช้ดู
By ptksoft on Dec 11, 2007
Xtreme Programming นี่น่าสนใจดีครับ
By khajochi on Dec 12, 2007
ผมก็เคยทำกับเพื่อนที่ๆทำงานเก่าครับ หัวหน้าเป็นฝรั่ง เห็นผมกะเพื่อนนั่ง pair กันอยู่ มันเล่นเดินเข้ามาพูดว่า “How many programmers does it take to change a light bulb?”
ถึงจะ joke แต่ตอนนั้นอารมณ์ฉุน + เซ็งเรย 55 เพราะมันฟังแล้วไม่ขำ
By Sukit A. on Dec 18, 2007
ดีมากครับ ผมว่า รู้ไวใช่ว่าใส่บ่าแบกหาม ดีครับ
By yo on Jan 19, 2008