Pair programming 4 แบบ

Chokchai Phatharamalai
odds.team
Published in
2 min readSep 20, 2020

เวลาผมสอนเรื่อง pair programming ปรกติผมจะเล่าคร่าว ๆ ว่า pair programming มี 2 แบบที่ผมใช้บ่อย ๆ คือ ping pong ที่ใช้เวลาคู่ pair ชำนาญพอ ๆ กัน กับ driver-navigator ที่ใช้เวลาความชำนาญต่างกัน

ช่วงนี้มีโอกาสได้ pair กับสมาชิกในทีมบ่อย ๆ และบ่อยครั้งก่อนเริ่ม pair ผมจะตกลงกับคู่ pair ว่าเราจะใช้ท่าไหนดี? ทำมาหลาย ๆ ครั้งผมถึงจับ pattern ได้ว่า จริง ๆ แล้วรูปแบบที่ผมเห็นบ่อย ๆ มีตั้ง 5 แบบ!

Ping Pong แบบ timebox

Photo by Geran de Klerk on Unsplash

คือ ping pong แบบจับเวลา พอครบ 5 นาทีก็สลับเป็นต้น ถ้าเข้าคู่กับการทำ pomodoro technique ด้วย สลับ 5 ทีก็พักทีนึงพอดีเลย

Ping Pong แบบ Red/Green

สมมติว่าคู่ pair ทำ TDD ด้วย ก็ให้คนนึงเขียน failing test แล้วก็ส่งคีย์บอร์ดให้อีกคนแก้ แล้วก็ refactor ด้วยกัน แล้วค่อยสลับ

IDE Controller (โกเลม)-Navigator

Photo by Geran de Klerk on Unsplash

เป็นรูปแบบหนึ่งของ driver-navigator โดยรูปแบบนี้ driver ห้ามคิด รอฟังคำสั่งจาก navigator อย่างเดียว เพราะแบบนี้ บางทีผมถึงเรียก driver ว่าโกเลม ด้วยรูปแบบนี้ ownership ของงานจะยังอยู่ที่ navigator ส่วน driver มีหน้าที่ control IDE เฉย ๆ มองอีกมุมคือให้ navigator ทำงานด้วยเสียงนั่นแหละ รูปแบบนี้เหมาะกับ driver ที่ใหม่กับเรื่องนั้นมาก ๆ ยังทำอะไรไม่เป็นเลย ขาดทั้งความรู้ ทักษะ และความมั่นใจที่จะทำงานนั้นให้สำเร็จตามลำพัง

Driver-ศาลพระภูมิ

อีกรูปแบบของ driver-navigator ที่ ownership ของงานย้ายมาอยู่ที่ driver รูปแบบนี้ driver จะเป็นคนคิดและทำหมดเลย โดย navigator จะนั่งดูเฉย ๆ ปล่อยให้ driver ล้มลุกคลุกคลานเองและหยุด driver แค่ตอนที่ driver กำลังจะสร้างความเสียหายระดับที่เอากลับมาไม่ได้แล้วเท่านั้น

หน้าที่ที่ 2 ของ navigator ในรูปแบบนี้คือ ตอบคำถามของ driver เมื่อ driver ถาม ทำให้ driver สามารถทำงานต่อได้โดยไม่ติด

รูปแบบนี้เหมาะ เวลา driver มีทักษะที่จะทำงานนั้นให้สำเร็จด้วยตัวเองแล้ว แต่ยังขาดความรู้บางส่วนและความมั่นใจอยู่ ใช้รูปแบบนี้ซักพัก พอ navigator ไม่ต้องทำอะไรเลยจริง ๆ ซักครั้ง หลังจากนั้นก็ไม่ต้องเฝ้าแล้ว สามารถขยับไป ping pong ได้เลย

สิง

Photo by Toa Heftiba on Unsplash

อันนี้ดูผ่าน ๆ เหมือน driver-navigator แต่เราให้คนชำนาญกว่า (ซึ่งควรเป็น navigator) มาเป็น driver แล้วให้น้องใหม่นั่งดู ซึ่งเป็นรูปแบบที่ ผิด ไม่ควรทำ เพราะเสียเวลาเปล่า การให้น้องใหม่ที่วิ่งได้แค่เกียร์หนึ่งมาดูพี่วิ่งด้วยเกียร์สี่นั้น เป็นกิจกรรมเหมาะกับการ “อวด” ให้น้องดูว่าพี่วิ่งเร็วแค่ไหน บางทีก็สร้างแรงบันดาลใจให้น้องได้ดี แต่ถ้าหวังการเรียนรู้ของน้อง จะพบว่าการให้น้องสิงพี่นี้เสียเวลาและเปล่าประโยชน์มาก แต่มันน่าแปลกใจมากที่ผมเห็นรูปแบบนี้ถูกใช้แพร่หลายในไทย ไม่รู้ไปเรียนมาจากไหน รูปแบบนี้สังเกตง่ายมาก เพราะซักพักจะเห็นน้องใหม่หลับ ไม่ก็เล่นมือถือ เพราะพลังสมองเค้าหมดแล้ว

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

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

นี่แหละ รูปแบบ pair programming ที่ผมใช้บ่อย 4 แบบ และ anti-pattern ที่ผมเจอบ่อย ๆ อีก 1 แบบ ใครมีรูปแบบอื่น ๆ เอามาแบ่งปันกันบ้างนะครับ

บทความที่เกี่ยวข้อง

เยอะไปหน่อย แต่ผมชอบมัน เลยตัดไม่ลง :P

--

--