結對程式設計簡介
- 所謂結對程式設計,也就是兩個人寫一個程式,其中,一個人叫Driver,另一個人叫Observer,Driver在程式設計程式碼,而Observer在旁邊實時檢視Driver的程式碼,並幫助Driver程式設計。
- 並且,Driver和Observer在一起時可以相互討論,有效地避免了閉門造車,並可以減少後期的code review時間,以及程式碼的學習成本。
- 有實驗證明,平均下來,結對程式設計時間花銷比單人程式設計增加10%的時間,但也會比單人程式設計減少15%的程式碼BUG。
- 如果再算上後期程式碼的維護和學習成本,結對程式設計比單人程式設計更有效率,還更為節省成本。
所以無論是對開發團隊還是對於Business,結對程式設計都會是非常不錯的Programming Practice。
- 實施結對程式設計技術將給軟體專案的開發工作帶來好處,只是這些好處必須經過縝密的思考和計劃才能真正體現出來。
- 而另一方面,兩個有經驗的人可能會發現配對程式設計裡沒有什麼技能的轉移,但是讓他們在不同的抽象層次解決同一個問題會讓他們更快地找到解決方案,而且錯誤更少。
- 兩個程式設計師具有相同的缺點和盲點的可能性很小,所以我們當我們採用結對程式設計的時候會獲得一個強大的解決方案。而這個解決方案恰恰是其它軟體工程方法學中所沒有的。
結對程式設計的優點
- 程式設計師互相幫助,互相教對方,可以得到能力上的互補。
- 可以讓程式設計環境有效地貫徹Design。
- 增強程式碼和產品質量,並有效的減少BUG。
- 降低學習成本。一邊程式設計,一邊共享知識和經驗,有效地在實踐中進行學習。
- 在程式設計中,相互討論,可能更快更有效地解決問題。
結隊程式設計缺點
- 對於有不同習慣的程式設計人員,可以在起工作會產生麻煩,甚至矛盾。
- 有時候,程式設計師們會對一個問題各執己見(程式碼風格可能會是引發技術人員口水戰的地方),爭吵不休,反而產生重大內耗。
- 兩個人在一起工作可能會出現工作精力不能集中的情況。程式設計師可能會交談一些與工作無關的事情,反而分散注意力,導致效率比單人更為低下。
- 結對程式設計可能讓程式設計師們相互學習得更快。有些時候,學習對方的長外,可能會和程式設計師們在起滋生不良氣氛一樣快。比如,合夥應付工作,敷衍專案。
- 面對新手,有經驗的老手可能會覺得非常的煩躁。不合適的溝通會導到團隊的不和諧。
- 新手在面對有經驗的老手時會顯得非常的緊張和不安,甚至出現害怕焦慮的的精神狀態,從而總是出現低階錯誤,而老手站在他們後面不停地指責他們導致他們更加緊張,出現惡性迴圈。最終導致專案進展效率低下,並且團隊貌合神離。
- 有經驗的人更喜歡單兵作戰,找個人來站在他背後看著他可能會讓他感到非常的不爽,最終導致程式設計時受到情緒影響,反而出現反作用。
結對程式設計的七種激勵效應
- 互相督促,互相協商,互相鼓勵,互相糾錯,互相學習,互相信任。
技巧與竅門
- 駕駛員應該留點時間去發現和糾正他自己的錯誤。
- 可以休息,但不能偷懶。
- 開始程式設計之前最好能夠自己的工作習慣和對方說清楚。
- 採用邊準編碼。
- 做積極主動的聽眾,先聽懂,再複述,再總結。
- 多說多交談。
- 不明白就問。
- 尊重你的搭檔,也讓他尊重你。
搭檔的組合方式
- 高手-高手:以最快的速度衝刺,完成最複雜最困難的任務。
- 專家-中等程式設計師:完成中等難度的任務,並提高其中一位程式設計師的水平。
- 專家-新手:完成最簡單的任務,同時對程式設計師進行培訓。
- 新手-新手:把專案中相對不那麼複雜部分的產品程式碼寫出來,並讓兩位程式設計師積累經驗。
- 外向-外向:兩人經過長時間深思熟慮的富有創造形的討論,一個優秀的創造形解決方案誕生了。
- 外向-內向:利用搭檔倆各自的長處去完成工作,在這一過程中幫助兩人發現和客服自身弱點。
- 內向-內向:沉默是一種壓力,它往往會導致出色的解決方案。
優秀結對程式遠的7個好習慣
- 注意休息,適當放鬆,至少一個小時休息一次。
- 謙虛謹慎,戒驕戒躁。
- 既要自信,又要謙虛。
- 交流。
- 傾聽。
- 積極思考,積極參與。
- 不卑不亢,以禮服人。
小結
是否使用結對程式設計,需要具體問題具體分析,不可盲目。任何事手都有他的好與壞,結對程式設計也不例外,只有知道了好與壞,你才能更好的利用它。
最後,需要我們記住的是,人是一種非常複雜的動物,他們的缺點和內心的陰暗面可能會比你想像得還要糟糕,而這些東西是可以讓一切事物失敗的。所以,正如《人件》所說,人才是軟體開發中最核心,也是最需要花時間去關注的事情。