結對程式設計技術是乙個非常簡單和直觀的概念:兩位程式設計師肩並肩地坐在同一臺電腦前合作完成同乙個設計。同乙個演算法、同一段**或同一組測試、與兩位程式設計師各自獨立工作相比.結對程式設計往往只需花費大約一半的時間就能編寫出質量更高的**, 但是,人與人之間的合作不是一件簡單的事情——尤其當人們都早已習慣了獨自工作的時候、實施結對程式設計技術將給軟體專案的開發工作帶來好處.只是這些好處必須經過縝密的思考和計畫才能真正體現出來。而另一方面,兩個有經驗的人可能會發現配對程式設計裡沒有什麼技能的轉移,但是讓他們在不同的抽象層次解決同乙個問題會讓他們更快地找到解決方案,而且錯誤更少。
結對程式設計還有其他多種好處:
直接的、連續的**回顧。 與別人工作會增加責任和紀律性。 同時理解乙個問題。 在有人盯著的時候去偷懶要困難得多!
兩個程式設計師具有相同的缺點和盲點的可能性很小,所以我們當我們採用結對程式設計的時候會獲得乙個強大的解決方案。而這個解決方案恰恰是其它軟體工程方法學中所沒有的。
在我們平時的程式設計當中,如果遇到乙個非常難解決的問題(困難到對該專案產生厭煩的態度),那麼你勢必會希望錄求幫助,無論是從資訊量龐大的internet網路裡,還是從身邊的技術大師裡,你都會拼了老命去解決(前提是你有對計算機知識的勢愛)。這個時候不妨採用結對程式設計試一下,其它的不說,可能感覺就不同。
其實結對程式設計坐起來很簡單也很有趣,找個水平差的不太遠的程式設計師和自己配成一對。只用一台計算機,大家選乙個人坐在鍵盤前面負責輸入,另乙個人坐在後面口述。兩個人要不斷的交流,頻率不應低於一分鐘一次。整個的設計思想由後面只動口不動手的人主導,而由操鍵盤的人做實現。由於人的思維速度是快於輸入**的速度的。那麼**的人可以有空閒的時間做額外的思考,觀察**寫的有沒有問題,結構有沒有問題。
如果程式設計師的經驗積累足夠,是很容易看出存在潛在問題的**的,即表面上實現了功能,但實際上是一種糟糕的做法。這在xp中被稱為**壞味道,在 martin fowler的《重構》一書中有詳細的介紹。兩個有經驗的程式設計師同時在一起工作,看起來好像浪費了乙個人的時間:但實際上的效果確實完成了更高質量的**。程式編的不那麼容易出bug,而且**頁寫得更為優雅和緊湊。
關於結對程式設計,發現了一些新的受益之處。首先,它可以促進參與專案的程式設計師自身的提高,一對程式設計師工作的時候,水平較低的一方會潛移默化地受水平略高的程式設計師影響,學到一些新的東西。而水平高的一方同樣因為不斷地把自己的想法說出來而整理了自己的思路。
其次,一定時間週期地打亂配對,讓參與專案的人員相互轉換位置,使得維護繁雜的文件變得不那麼重要。大家分組打亂後,口頭的交流很容易讓所有人都熟悉每個模組,這樣對於公司也很有好處,專案中萬一有人離開,也不至於影響到整個專案。最後,開發過程變得更為有趣,任何人的交流變得很多,大家關係更為融洽。
另外想補充一點的是,講解xp的書籍上都沒有提到,但是實際上卻存在的一點:結對程式設計使得程式設計師被迫提高了工作效率。如果單獨工作,在遇到困難的時候,並不是所有人都立刻積極地去解決問題,這時或許會上網和網友聊聊天,看看無關的**等等。有可能因為工作的打斷,大半天的時間都浪費了。看起來,程式設計師每天都在加班,實際有效工作時間往往還打不到6個小時。而結對程式設計有一種相互督促的作用,在一邊工作疲憊狀態不好使,另一邊會起乙個鼓勵和激發鬥志的作用。
而且兩個人共用一台電腦,略帶私人性質的聊天活動都會很自覺地不去進行了。結果一天下來,新實驗結對程式設計的程式設計師都會喊累,神經緊繃8個小時的工作不累才怪。
從這個角度看,嚴格限制結對程式設計的程式設計師不准加班是合理的,實際上,開始每天甚至不必限制8小時工作,每天這樣工作6小時隊專案同樣是非常高效的。
當兩個人不斷的互換角色,以至於最後誰也記不清哪行**是誰敲的;團隊內迴圈的分組以至於分不清到底那個模組該誰負責;反而大家的感覺會不錯。整個專案的**是團隊共有,而不再是個人作品了。
關於結對程式設計的一些感悟
這次專案通過和同學的結對程式設計,對於結對程式設計有了一些自己的感悟。首先,作為駕駛員在 方面,自己原先編寫時會出現的很多格式不規範,不便於讀的地方都能得到糾正,而且對於一些方法的編寫,自己的思路可能不夠簡便,也能得到領航員的修改意見。其次,作為領航員時,能夠很好的鍛鍊自己的閱讀 的能力,同時理解駕...
關於結對程式設計的一些感想
這是我第一次接觸結對程式設計,此前通過聽老師的授課和看網上的博文,對於結對程式設計已經有了乙個大概的認識,了解了應該如何進行結對程式設計和結對程式設計有什麼好處,而在真正和隊友完成了一次結對程式設計之後,我對此有了更深刻的認識,我總結為以下幾點。1 在我進行程式設計的過程中,難免會有思維不夠清晰的時...
關於專注,關於最近的一些事情
這是自己第一次寫非技術的部落格,但是不寫不行了。最近心情很沉重,因為自己又又又又又一次把事情搞砸了,47個人裡排倒數第二,當看到成績的時候心情真的很壓抑。不止一次開始認認真真的做一件事,然後到一半的時候注意力不夠集中,然後造成一系列的後果。學車的時候,各種公升學考試的時候,軟體設計師考試的時候,求職...