l

2012年1月10日 星期二

Pair Programming 沒人性?

January 10 10:32~11:23


在上禮拜六 Scrum 講座中 Teddy 提到持續實施 pair programming 可以解決一部分派工(認領 tasks)的問題,此時有位鄉民問了 Teddy一個問題:


鄉民:可是 pair programming 不符合人性啊!


Teddy:此話怎講?(Teddy 內心讀白:難不成 pair programming 是禽獸...XD)


鄉民:例如做 pair programming 的時候就不能跟女朋友 MSN。


Teddy:為什麼上班時間要跟女朋友 MSN?你是想要每天加班,然後只能跟女朋友透過 MSN 聊天,還是想要每天可以準時下班然後女朋友抱在一起。


鄉民:!@#$!@...


***


Teddy 的回答算是有點耍無賴,採用 pair programming 的確是一種很累人」的開發方式,因為在 pair programming 的模式下,開發人員需要時時保持專注力」,並且必須要和搭配開發的對象互動討論,也不能偷個懶休息一下上個 Facebook 或是和女朋友 MSN。所以,很多開發人員對於 pair programming 都抱持著能免則免,能閃則閃的心態。


Teddy 自己當然也不例外,有些工作 Teddy 覺的沒有 pair programming 會不安心,有些工作則是可以讓開發人員自行決定。討論 pair programming 的文章網路上應該可以找到一大堆,關於何時應該採用 pair programming 以下 Teddy 講幾點自己的經驗:

  • 重要新功能的 coding 工作:如果系統的架構與設計已經有了大致的想法,此時採用 pair programming 是一個不錯的時機。但如果連這件工作倒底要如何開始都沒有任何頭緒,此時可以考慮兩人先快速討論一下設計,或是先分頭思考一下各自的解決方案,或是 google 一下可能的解法,然後在「合體」繼續開發工作 。
  • Big Refactoring:如果要用 refactoring 改善系統架構或是重要設計,此時採用 pair programming 方式會比較保險,避免不必要的錯誤,或是不斷的 refactoring。由於做大範圍的 refactoring 一不小心很可能會發生鬼打牆事件,同樣的模組不斷地改來改去,有另外一個人一起幫忙看著可以可以避免這樣的情況發生。
  • 帶新人:有新人加入用  pair programming 是最容易讓新人快速上手的一種方法之一。
  • 知識傳遞:為了避免系統中每一個模組只有某位特定開發人員知道如何修改,以及為了達到 shared code 的目標,採用 pair programming 是一種快速傳遞知識的方法 。
  • Debug:假設某個模組有一個 bug,但是對於這個模組最熟的開發人員卻看不出問題出在哪裡。此時可以找團隊中的抓蟲高手(例如 Teddy...XD)或是其他閒閒沒事做的人一起來幫忙看。通常有人一起看會節省很多 debug 的時間。
  • 寫測試案例:自己一個人寫(自動化)測試案例很容易會忽略一些很重要,或是看起來不是那麼重要但卻是必要的測試案例(例如例外情況測試)。或者是有些自動化測試案例真的很不好寫,此時採用 pair programming 可以幫忙撰寫出這些測試案例。
理想上如果所有的工作都能採用 pair programming 的方式當然很好,但是這樣對於開發人員來講壓力有時會太大。所以實務上每個團隊自己還是需要想出一個折衷方案。例如,對於從來每有做過 pair programming 的團隊,一開始的時候可以約定每個 sprint 每個人至少要以 pair programming 的方式參與 1-2 個 tasks ;或是 10% 的新功能都要以 pair programming 的方式來實做,然後每個 sprint 逐步調高 pair programming 的比例到團隊都可以接受的水準(例如, 50%-60% 的重要功能都採用 pair programming)。

以 Teddy 自己的經驗,也從來沒有達到 100% 的 pair programming,所以請依據團隊與每個 sprint 工作的特性自行安排與調整。此外,實施 pair programming 的時候,一天最好不要超過五個小時一週不要連續超過三天,否則開發人員會因為太累反而降低 pair programming 的效果。還有, pair 到一定的階段(例如 1-1.5 小時或是完成某個小功能)要休息個 10-15 分鐘左右,可以利用這段時間放空讓腦袋休息一下,轉換一下心情,或是跟女朋友 MSN...XD 。


***

January 10 12:22~12:23
補充一點某位鄉民在 Facebook 上面給 Teddy 的留言:

鄉民:我之前的 team 是每天 pair 6 小時,一周 5 天,pair 久了你叫工程師自己開發個東西,過沒兩個星期他就回來拜託你幫他排 pair...

***

友藏內心獨白:要求員工每天加班導致員工被迫「把生活融入工作」並不是一種好的做事方法。

1 則留言:

  1. 用pair programming的方法帶新人,我試過,效果還算不錯。但傳遞知識...有些前提,領域不能差太多,以過去的經驗,學弟和尤老師的學生pair programming,弄了半天,學弟還是沒搞懂WiMAX physical layer encoding/decoding,光看程式而沒有基礎的knowledge,學習效果非常差。

    回覆刪除