配對程式設計——耗時加倍

agile_boy發表於2009-03-26

配對程式設計是極限程式設計裡爭議最大的做法之一——支持者和反對者對此的反應都相當強烈。那麼什麼是配對程式設計?為什麼人們對此的反應這麼大?

Laurie Williams將配對程式設計(pair programming)描述為“一種程式設計風格,它由兩個程式設計師並排在一臺計算機上工作,連續協作完成同一個設計、演算法、程式碼或者測試”。從上面的描述我們可以清楚地看出,配對程式設計的含義不僅僅是程式設計本身的鍵入,我個人認為“配對開發(pair development)”應該是對這種活動的更好描述。

配對程式設計不是一個人簡單地看著另一個在做什麼——在卓有成效的配對工作裡,這兩個合作伙伴常常工作在不同抽象層次,一個人關注的是為實現眼前目標而編寫的程式碼的細節,而另一個人考慮的是更大的前景和下一步要做的事情,這兩個人的角色頻繁進行更換。這是一項高強度的、嚴密的,且常常令人疲勞的活動,但是能夠創造出經過深思熟慮的高質量程式碼。

反對配對程式設計的大多數強烈反應都源於配對程式設計對社會上業已形成的軟體開發習慣的挑戰。

對程式設計的傳統看法是在隔離上花一大段時間,在此期間程式設計師進入一個“流程”,只與計算機和他們自己的思考模式進行互動。這樣做的結果就是,程式設計往往更受性格內向的人的歡迎,因為這樣的人喜歡將社交活動減到最少,而對那些外向的人卻吸引力不大,因為他們更希望時時刻刻進行合作。

當然這些都是一般的想法,但是總有不願意與其他人肩並肩工作程式設計師,對他們工作的滿意度肯定會受到像配對程式設計這樣的事的影響,瞭解這種情況是非常重要的。

對配對程式設計也有反應不太強烈的反對,一般都是與讓兩個人在一臺機器上工作所花費的時間肯定要比他們各自獨立工作然後合併工作成果所需要的時間多一倍的思想有關。

如果將軟體開發的因素限定為程式設計的時候我們能夠輸入有多快,這肯定是對的,但是根據Kent Beck的觀察,如果情況真的如此的話,我們給每個程式設計師一份Mavis Beacon(盲打教學軟體)就行了。

我自己不會盲打,我也從來都沒有在面試別人的時候問過他們的打字速度,所以打字速度是我們的主要關注因素的想法是值得懷疑的。然而,軟體開發是一項智力活動,它能夠從清楚的表達和思想的合作發展中受益,而配對程式設計在這兩個方面都有所幫助。

另外一個誤解是,配對程式設計成功與否,應該最終由產出的軟體的質量來確定。當兩個人合作的時候,至少有三種結果:

  • 軟體
  • 對應用程式的共同理解(業務域、設計和實現)
  • 技能的轉移

這些變化的比例取決於配對的平衡和動態,但是上述所有三者都會在某種程度上表現出來。當一個經驗豐富的程式設計師與一個新手配對的時候,配對產生的軟體可能不會被那個有經驗的程式設計師單獨工作產生的軟體更多,但是這個新手肯定會學到很多關於這個應用程式的知識以及關於程式設計的基本知識。

將這一情形與兩人單獨工作相比較——我們可能得到更多的軟體(儘管我們可能希望更加註意新手編寫的軟體的質量),但是我們卻沒有實現知識或者技能的轉移。如果我們讓這兩個人在同一個小組裡,配對程式設計就是兩個人度過共同時光的理想方法。

而另一方面,兩個有經驗的人可能會發現配對程式設計裡沒有什麼技能的轉移,但是讓他們在不同的抽象層次解決同一個問題會讓他們更快地找到解決方案,而且錯誤更少。

配對程式設計的另一個目標是儘可能廣泛地傳播應用程式設計和實現的知識。

這是通過配對輪換實現的,這樣小組配對的每個人都可以通過一段時間和其他所有人進行配對,而且應用程式的特定部分都會由儘可能多的人來解決。在這種環境裡,糟糕的程式碼不會存在太久,因為它被暴露在很多雙眼睛下(這就與開發人員程式碼開發背後的一個原理相似),而且當設計週期到來的時候,小組就會從所有人的貢獻裡受益,而不需要僅僅依賴某個熟悉應用程式特定部分的個人。

配對程式設計還有其他多種好處:

  • 直接的、連續的程式碼回顧
  • 與別人工作會增加責任和紀律性。在有人盯著的時候去偷懶要困難得多!
  • 兩個程式設計師具有相同的缺點和盲點的可能性很小,所以我們會獲得一個強大的解決方案。
  • 如果走進死衚衕,配對浪費的時間要少得多,因為其中一個人不可避免地會厭煩,從而希望尋求幫助。

在定期配對輪換的情況下,上面列表裡的最後兩項尤其現實。當然,做得看起來像配對程式設計的方式有很多,但是卻無法實現,或者破壞了這些優勢。

如果不進行配對輪換,那麼你所獲得只會是程式設計的小圈子,知識和技術的轉移也只會是最小。有些公司將配對程式設計用作是消滅個人空間(每兩個程式設計師只需要一張桌子和一臺計算機,不是嗎?)的理由,這隻會忽視程式設計師的人類需求。

希望讓程式設計師一天八個小時都配對工作是不現實的——配對的持續互動帶來了精確和清晰的結果,但是這一過程也是耗費精力的,而且(一個人)總是會有開發以外的任務要完成。

實踐經驗告訴我們,配對程式設計是提高軟體質量和減少開發時間的有效方法,但是它並不適用於所有的程式設計師,它需要一種經過仔細思考的方式實現才能有效。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14639675/viewspace-578465/,如需轉載,請註明出處,否則將追究法律責任。

相關文章