Pair programming 4 แบบ

เวลาผมสอนเรื่อง 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

Pomodoro

What is Pair Programming?

Pair Programming Guide

แพร์โปรแกรมมิ่ง

Introvert กับ Extravert

Read more

Community of Practice (CoP) คืออะไร?

Community of Practice (CoP) คืออะไร?

กาลครั้งหนึ่ง… ชมรม Community of Practice (CoP) เป็นคอนเซปต์ที่ถูกกล่าวถึงใน Large Scale Scrum เทียบง่าย ๆ ก็เหมือนชมรมตอนเราเรียน ม. ปลาย นั่นแหละ ใครสนใจเรื่องอะไร ก็ไปเข้าชมรมนั้น แล้วก็ไปทำกิจกรรมร่วมกันในเรื่องที่เราสนใจ เพื่อฝึกฝนและแลกเปลี่ยนความรู้ บางทีอาจจะมี

By Chokchai
Vocal archetypes

Vocal archetypes

ผมกำลังเรียนวิธีใช้เสียงในคอร์ส Stage Academy ของ Vinh Giang ในคอร์ส ผมได้เรียนเกี่ยวกับแม่แบบของเสียง 4 รูปแบบดังนี้ Motivator ผู้จูงใจ เป้าหมายของผู้จูงใจคือการจุดประกายแรงบันดาลใจ องค์ประกอบของการใช้เสียงรูปแบบนี้คือ * เพิ่มความเร็วในการพูด * เปล่งเสี

By Chokchai
เขียน runtests script ให้เป็น executable document กันเถอะ

เขียน runtests script ให้เป็น executable document กันเถอะ

ตอนนี้แล้วผมกล่าวถึงความสำคัญของเอกสารที่สามารถ execute เพื่อตรวจสอบดูว่ามันยังจริงอยู่ไหมได้ในรูปแบบของ unit tests ซึ่งเอาไว้เก็บบริบทของปัญหาที่เรากำลังแก้ หรือเรียกง่าย ๆ ว่า requirement ตอนนี้เราจะมาพูดถึงเอกสารที่ใช้ในการ build software เช่น build script หรือแม้

By Chokchai

Introvert กับ Extravert

หลายปีก่อน ผมมีโอกาสได้ pair programming กับเพื่อนร่วมงานสุดหล่อชื่อเจน ตอนนั้นเราพยายามทำ เขียนพวก AD authentication ด้วย Ruby ตอนแรก ๆ ก็ลื่นไหลดี ซักพักเราก็ติดกัน ไปต่อไม่ถูก ระหว่างนั้นเจนก็พูดอะไรออกมาก็ไม่รู้ ผมฟังไม่เข้าใจ ผมเลยกลั

By Chokchai