NetReptile推薦 [2005-7-17]
出處:ZDNet
作者:Steve Hayes
配對編程是極限編程里爭議最大的做法之一——支持者和反對者對此的反應都相當強烈。那么什么是配對編程?為什么人們對此的反應這么大?
Laurie Williams將配對編程(pair programming)描述為“一種編程風格,它由兩個程序員并排在一臺計算機上工作,連續協作完成同一個設計、算法、代碼或者測試”。從上面的描述我們可以清楚地看出,配對編程的含義不僅僅是編程本身的鍵入,我個人認為“配對開發(pair development)”應該是對這種活動的更好描述。
配對編程不是一個人簡單地看著另一個在做什么——在卓有成效的配對工作里,這兩個合作伙伴常常工作在不同抽象層次,一個人關注的是為實現眼前目標而編寫的代碼的細節,而另一個人考慮的是更大的前景和下一步要做的事情,這兩個人的角色頻繁進行更換。這是一項高強度的、嚴密的,且常常令人疲勞的活動,但是能夠創造出經過深思熟慮的高質量代碼。
反對配對編程的大多數強烈反應都源于配對編程對社會上業已形成的軟件開發習慣的挑戰。
對編程的傳統看法是在隔離上花一大段時間,在此期間程序員進入一個“流程”,只與計算機和他們自己的思考模式進行交互。這樣做的結果就是,編程往往更受性格內向的人的歡迎,因為這樣的人喜歡將社交活動減到最少,而對那些外向的人卻吸引力不大,因為他們更希望時時刻刻進行合作。
當然這些都是一般的想法,但是總有不愿意與其他人肩并肩工作程序員,對他們工作的滿意度肯定會受到像配對編程這樣的事的影響,了解這種情況是非常重要的。
對配對編程也有反應不太強烈的反對,一般都是與讓兩個人在一臺機器上工作所花費的時間肯定要比他們各自獨立工作然后合并工作成果所需要的時間多一倍的思想有關。
如果將軟件開發的因素限定為編程的時候我們能夠輸入有多快,這肯定是對的,但是根據Kent Beck的觀察,如果情況真的如此的話,我們給每個程序員一份Mavis Beacon(盲打教學軟件)就行了。
我自己不會盲打,我也從來都沒有在面試別人的時候問過他們的打字速度,所以打字速度是我們的主要關注因素的想法是值得懷疑的。然而,軟件開發是一項智力活動,它能夠從清楚的表達和思想的合作發展中受益,而配對編程在這兩個方面都有所幫助。
另外一個誤解是,配對編程成功與否,應該最終由產出的軟件的質量來確定。當兩個人合作的時候,至少有三種結果:
- 軟件
- 對應用程序的共同理解(業務域、設計和實現)
- 技能的轉移
這些變化的比例取決于配對的平衡和動態,但是上述所有三者都會在某種程度上表現出來。當一個經驗豐富的程序員與一個新手配對的時候,配對產生的軟件可能不會被那個有經驗的程序員單獨工作產生的軟件更多,但是這個新手肯定會學到很多關于這個應用程序的知識以及關于編程的基本知識。
將這一情形與兩人單獨工作相比較——我們可能得到更多的軟件(盡管我們可能希望更加注意新手編寫的軟件的質量),但是我們卻沒有實現知識或者技能的轉移。如果我們讓這兩個人在同一個小組里,配對編程就是兩個人度過共同時光的理想方法。
而另一方面,兩個有經驗的人可能會發現配對編程里沒有什么技能的轉移,但是讓他們在不同的抽象層次解決同一個問題會讓他們更快地找到解決方案,而且錯誤更少。
配對編程的另一個目標是盡可能廣泛地傳播應用程序設計和實現的知識。
這是通過配對輪換實現的,這樣小組配對的每個人都可以通過一段時間和其他所有人進行配對,而且應用程序的特定部分都會由盡可能多的人來解決。在這種環境里,糟糕的代碼不會存在太久,因為它被暴露在很多雙眼睛下(這就與開發人員代碼開發背后的一個原理相似),而且當設計周期到來的時候,小組就會從所有人的貢獻里受益,而不需要僅僅依賴某個熟悉應用程序特定部分的個人。
配對編程還有其他多種好處:
- 直接的、連續的代碼回顧
- 與別人工作會增加責任和紀律性。在有人盯著的時候去偷懶要困難得多!
- 兩個程序員具有相同的缺點和盲點的可能性很小,所以我們會獲得一個強大的解決方案。
- 如果走進死胡同,配對浪費的時間要少得多,因為其中一個人不可避免地會厭煩,從而希望尋求幫助。
在定期配對輪換的情況下,上面列表里的最后兩項尤其現實。當然,做得看起來像配對編程的方式有很多,但是卻無法實現,或者破壞了這些優勢。
如果不進行配對輪換,那么你所獲得只會是編程的小圈子,知識和技術的轉移也只會是最小。有些公司將配對編程用作是消滅個人空間(每兩個程序員只需要一張桌子和一臺計算機,不是嗎?)的理由,這只會忽視程序員的人類需求。
希望讓程序員一天八個小時都配對工作是不現實的——配對的持續交互帶來了精確和清晰的結果,但是這一過程也是耗費精力的,而且(一個人)總是會有開發以外的任務要完成。
實踐經驗告訴我們,配對編程是提高軟件質量和減少開發時間的有效方法,但是它并不適用于所有的程序員,它需要一種經過仔細思考的方式實現才能有效。
Steve Hayes是Internet Business Systems(IBS)公司的軟件開發經理。IBS公司為金融服務行業提供敏捷開發方法咨詢和開發服務,以及瀏覽器托管解決方案。