配對程式設計——耗時加倍
配對程式設計是極限程式設計裡爭議最大的做法之一——支持者和反對者對此的反應都相當強烈。那麼什麼是配對程式設計?為什麼人們對此的反應這麼大?
Laurie Williams將配對程式設計(pair programming)描述為“一種程式設計風格,它由兩個程式設計師並排在一臺計算機上工作,連續協作完成同一個設計、演算法、程式碼或者測試”。從上面的描述我們可以清楚地看出,配對程式設計的含義不僅僅是程式設計本身的鍵入,我個人認為“配對開發(pair development)”應該是對這種活動的更好描述。
配對程式設計不是一個人簡單地看著另一個在做什麼——在卓有成效的配對工作裡,這兩個合作伙伴常常工作在不同抽象層次,一個人關注的是為實現眼前目標而編寫的程式碼的細節,而另一個人考慮的是更大的前景和下一步要做的事情,這兩個人的角色頻繁進行更換。這是一項高強度的、嚴密的,且常常令人疲勞的活動,但是能夠創造出經過深思熟慮的高質量程式碼。
反對配對程式設計的大多數強烈反應都源於配對程式設計對社會上業已形成的軟體開發習慣的挑戰。
對程式設計的傳統看法是在隔離上花一大段時間,在此期間程式設計師進入一個“流程”,只與計算機和他們自己的思考模式進行互動。這樣做的結果就是,程式設計往往更受性格內向的人的歡迎,因為這樣的人喜歡將社交活動減到最少,而對那些外向的人卻吸引力不大,因為他們更希望時時刻刻進行合作。
當然這些都是一般的想法,但是總有不願意與其他人肩並肩工作程式設計師,對他們工作的滿意度肯定會受到像配對程式設計這樣的事的影響,瞭解這種情況是非常重要的。
對配對程式設計也有反應不太強烈的反對,一般都是與讓兩個人在一臺機器上工作所花費的時間肯定要比他們各自獨立工作然後合併工作成果所需要的時間多一倍的思想有關。
如果將軟體開發的因素限定為程式設計的時候我們能夠輸入有多快,這肯定是對的,但是根據Kent Beck的觀察,如果情況真的如此的話,我們給每個程式設計師一份Mavis Beacon(盲打教學軟體)就行了。
我自己不會盲打,我也從來都沒有在面試別人的時候問過他們的打字速度,所以打字速度是我們的主要關注因素的想法是值得懷疑的。然而,軟體開發是一項智力活動,它能夠從清楚的表達和思想的合作發展中受益,而配對程式設計在這兩個方面都有所幫助。
另外一個誤解是,配對程式設計成功與否,應該最終由產出的軟體的質量來確定。當兩個人合作的時候,至少有三種結果:
- 軟體
- 對應用程式的共同理解(業務域、設計和實現)
- 技能的轉移
這些變化的比例取決於配對的平衡和動態,但是上述所有三者都會在某種程度上表現出來。當一個經驗豐富的程式設計師與一個新手配對的時候,配對產生的軟體可能不會被那個有經驗的程式設計師單獨工作產生的軟體更多,但是這個新手肯定會學到很多關於這個應用程式的知識以及關於程式設計的基本知識。
將這一情形與兩人單獨工作相比較——我們可能得到更多的軟體(儘管我們可能希望更加註意新手編寫的軟體的質量),但是我們卻沒有實現知識或者技能的轉移。如果我們讓這兩個人在同一個小組裡,配對程式設計就是兩個人度過共同時光的理想方法。
而另一方面,兩個有經驗的人可能會發現配對程式設計裡沒有什麼技能的轉移,但是讓他們在不同的抽象層次解決同一個問題會讓他們更快地找到解決方案,而且錯誤更少。
配對程式設計的另一個目標是儘可能廣泛地傳播應用程式設計和實現的知識。
這是通過配對輪換實現的,這樣小組配對的每個人都可以通過一段時間和其他所有人進行配對,而且應用程式的特定部分都會由儘可能多的人來解決。在這種環境裡,糟糕的程式碼不會存在太久,因為它被暴露在很多雙眼睛下(這就與開發人員程式碼開發背後的一個原理相似),而且當設計週期到來的時候,小組就會從所有人的貢獻裡受益,而不需要僅僅依賴某個熟悉應用程式特定部分的個人。
配對程式設計還有其他多種好處:
- 直接的、連續的程式碼回顧
- 與別人工作會增加責任和紀律性。在有人盯著的時候去偷懶要困難得多!
- 兩個程式設計師具有相同的缺點和盲點的可能性很小,所以我們會獲得一個強大的解決方案。
- 如果走進死衚衕,配對浪費的時間要少得多,因為其中一個人不可避免地會厭煩,從而希望尋求幫助。
在定期配對輪換的情況下,上面列表裡的最後兩項尤其現實。當然,做得看起來像配對程式設計的方式有很多,但是卻無法實現,或者破壞了這些優勢。
如果不進行配對輪換,那麼你所獲得只會是程式設計的小圈子,知識和技術的轉移也只會是最小。有些公司將配對程式設計用作是消滅個人空間(每兩個程式設計師只需要一張桌子和一臺計算機,不是嗎?)的理由,這隻會忽視程式設計師的人類需求。
希望讓程式設計師一天八個小時都配對工作是不現實的——配對的持續互動帶來了精確和清晰的結果,但是這一過程也是耗費精力的,而且(一個人)總是會有開發以外的任務要完成。
實踐經驗告訴我們,配對程式設計是提高軟體質量和減少開發時間的有效方法,但是它並不適用於所有的程式設計師,它需要一種經過仔細思考的方式實現才能有效。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14639675/viewspace-578465/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- systrace 統計方法耗時
- 統計lcp各部分耗時
- 理解結對程式設計程式設計
- C++統計資源消耗和耗時C++
- Java程式設計__Chap3 面對物件__程式設計題Java程式設計物件
- 結對程式設計大法好程式設計
- 程式設計師程式設計時的簡單方法與技巧程式設計師
- Python:對程式做效能分析及計時統計Python
- 結對程式設計(c語言)程式設計C語言
- 2024天對程式設計天梯賽程式設計
- 可程式設計作息時間控制器設計程式設計
- 你知道年薪百萬的程式設計師是如何對時間管理嗎?程式設計師
- 設計模式-適配者模式設計模式
- CPC配光系統設計
- 如何在新時代下的結對程式設計中將程式碼玩出花來程式設計
- 不為人知的網路程式設計(十一):從底層入手,深度分析TCP連線耗時的祕密程式設計TCP
- 談談對程式設計師的管理程式設計師
- 結對程式設計-四則運算程式設計
- 結對程式設計的利與弊程式設計
- java面對物件程式設計的概念Java物件程式設計
- iOS音訊程式設計之實時語音通訊(對講機功能)iOS音訊程式設計
- Android 快速定位耗時方法Android
- 3年程式設計師寫的程式碼被應屆生懟:我能三行搞定!也配叫程式設計師?程式設計師
- 何時停止設計並啟動實施程式設計? - Alter程式設計
- 域名解析耗時是什麼?域名解析耗時影響因素有哪些?
- 英語,對程式設計師有多重要?程式設計師
- 隨筆程式設計雜談錄–《隆中對》程式設計
- 如何持續對程式設計保持熱情程式設計
- JAVA程式設計習慣之equals對比Java程式設計
- 耗時一天,逆天數字華容道程式碼
- iOS 定時器耗電探究iOS定時器
- 程式設計師跳槽到對手公司,被前老闆設計陷害程式設計師
- JS陣列方法總覽及遍歷方法耗時統計JS陣列
- 很多程式設計師程式設計時都戴耳機?他們在聽什麼程式設計師
- python中小學生程式設計學習-政策定了,中小學生學習程式設計不得少於36小時,全民程式設計時代來了...Python程式設計
- linux系統時間程式設計(9) 計算程式片段執行時間clock函式Linux程式設計函式
- 深圳Javaweb學習:程式設計師對程式設計名詞的通俗理解:假設你是個妹子JavaWeb程式設計師
- 我對函數語言程式設計的理解函數程式設計
- 結對程式設計 小學四則運算程式設計