極限程式設計 - 成對程式設計
成對程式設計是一種程式設計風格,其中兩位程式設計師並排坐在一臺電腦前,共享一個螢幕、鍵盤和滑鼠,持續協作完成相同的設計、演算法、程式碼或測試。
一位程式設計師,稱為驅動者,控制鍵盤/滑鼠並主動實現程式碼或編寫測試。另一位程式設計師,稱為領航員,持續觀察驅動者的工作以識別缺陷,並從戰略角度思考工作的方向。
如有必要,兩位程式設計師可以一起頭腦風暴任何具有挑戰性的問題。兩位程式設計師定期輪換角色,平等合作開發軟體。
成對程式設計——優勢
成對程式設計的顯著優勢在於:
許多錯誤在鍵入時就被發現,而不是在質量保證測試或現場發現。
最終缺陷數量在統計上較低。
設計更好,程式碼更短。
團隊解決問題更快。
人們對系統和軟體開發的瞭解顯著增加。
專案最終有多個人理解系統的每個部分。
人們學會一起工作,更頻繁地溝通,從而改善資訊流和團隊動態。
人們更享受他們的工作。
成對程式設計實驗
成對程式設計實踐已被證明可以提高軟體產品的生產力和質量。
成對程式設計研究表明:
成對程式設計的人時不比單人程式設計多。
成對程式設計產生的缺陷更少。
成對程式設計編寫的程式碼行數更少。
成對程式設計的人更享受他們的工作。
猶他大學對成對程式設計進行了實驗。結果表明:
成對程式設計的團隊在程式上花費的時間比個人多 15%。
成對程式設計編寫的程式碼始終比個人編寫的程式碼透過更多的測試用例。
成對程式設計始終以更少的程式碼行實現了個人所完成的相同功能。
在一個能夠快速獲得切實結果的環境中學習程式設計很有趣,並且可以更快地學習。
適應成對程式設計
大多數程式設計師習慣於獨自工作,並且經常抵制向成對程式設計的轉變。但是,透過實踐,他們最終可以完成這一轉變。
根據勞裡·A·威廉姆斯和羅伯特·R·凱斯勒在其著作《我在幼兒園學到的關於成對程式設計的所有知識》中所述,它很好地解釋瞭如何培養我們在幼兒園學到的技能,以建立團隊凝聚力,尤其是在成對程式設計中。
作為成對程式設計師的轉變和持續成功通常需要每天練習禮貌。
以下部分摘自此出版物,可以幫助您成為有效的成對程式設計師。
幼兒園的教訓
在幼兒園,我們學習了以下內容:
分享一切
公平競爭
不要打人
把東西放回原處
清理你自己的爛攤子
不要拿不屬於你的東西
當你傷害別人的時候說對不起
飯前洗手
沖廁所
溫熱的餅乾和冷牛奶對你有好處
過平衡的生活——每天都要學習、思考、繪畫、唱歌、跳舞、玩耍和工作。
每天下午小睡一會兒
當你走向世界的時候,注意交通,牽著手,團結在一起
感受奇蹟
接下來,我們根據上述教誨,探討成對程式設計的原則。
分享一切
在成對程式設計中:
兩位程式設計師坐在一起,共同製作一個工件(設計、演算法、程式碼等)。
一人打字或寫作,另一人持續審查工作。兩人
都是流程中平等的參與者
對工件的各個方面負責
擁有所有權
公平競爭
在成對程式設計中:
一人擔任驅動者,即控制鍵盤或記錄設計思路,另一人持續審查工作。
他們定期輪換角色,即使其中一人比另一人經驗豐富得多,以確保平等參與。
當驅動者思考實現時,另一人持續審查程式碼,思考可能的更簡單的設計,當前開發如何融入當前的整體系統。
不要打你的搭檔
在成對程式設計中:
確保你的搭檔保持專注並按計劃進行。
你也要保持專注並按計劃進行。
確保你的搭檔遵循規定的編碼標準,從而維護對團隊其他成員的承諾。
在成對程式設計調查中,發現實現了巨大的生產力提升和質量改進。這是因為:
每個人都讓他們的搭檔保持專注並按計劃進行,沒有懈怠的可能性。
每個工件在製作過程中都會持續審查,以確保質量。
把東西放回原處
在成對程式設計中:
你需要相信你自己的技能和你搭檔的技能。這方面的任何負面想法都應該丟進垃圾桶。
你必須確保表達你的知識,並在需要時向你的搭檔學習。你可以透過觀察他或立即獲得他的反饋來向你的搭檔學習。
你需要有信心:
無論何時可能落後,你都可以立即從你的搭檔那裡獲得幫助。
作為一個團隊,你們可以解決單獨無法解決的問題。
你們可以幫助提高彼此的技能。
清理你自己的爛攤子
在成對程式設計中,使用“肩並肩觀察”技術:
你會發現,你的搭檔會注意到很多明顯的但未被注意到的缺陷,這令人驚奇。
你們可以消除這些缺陷,而不會產生在正式檢查會議中可能產生的自然敵意。
表徵缺陷預防和缺陷去除效率。
不要把事情看得太嚴重
有一個搭檔持續客觀地審查設計和程式碼,這是成對程式設計的一個非常有益的方面。在成對程式設計中,你需要確保你的工作沒有過度的自我或過少的自我。
這是必要的,因為:
過度的自我可以以兩種方式表現出來:
具有“我的方式或高速公路”的態度會阻止程式設計師考慮他人的想法。
防禦性會導致程式設計師不接受建設性批評或將這種批評視為不信任。
這兩種自我表現方式都會損害合作關係。
另一方面,總是同意搭檔以避免產生緊張感的人也會最小化協作工作的益處。為了有利的思想交流,在需要時應該有一些健康的意見分歧/辯論。
因此,需要在表現出過多的自我和過少的自我之間取得微妙的平衡。有效的成對程式設計師在最初的調整期間培養這種平衡,這可能需要幾小時或幾天,具體取決於個人、工作性質以及他們過去與成對程式設計的經驗。
當你移動傢俱時,如果傷害了別人,要說對不起
程式設計師必須能夠並排坐著程式設計,同時檢視電腦螢幕並共享鍵盤和滑鼠。極限程式設計師有一個“滑動鍵盤/不動椅子”的規則。
為了確保有效的溝通,在協作對內以及與其他協作對之間,無需付出太多努力,程式設計師需要互相看到,互相提問,並就整合問題等做出決定。程式設計師還可以從聽到其他對話中獲益,因為他們可以對這些對話做出重要的貢獻。
在開始之前摒棄懷疑
為了成對程式設計的成功,雙方必須理解程式設計中協作的價值、益處以及體驗的樂趣。這方面的任何懷疑都需要在一開始就消除。
經驗表明,有一位程式設計師非常積極和/或經驗豐富,參與成對程式設計,可以帶領該對成為一個團結協作的團隊,最終取得勝利。
這樣一個團隊的產出大於相同的人在不團結的情況下工作。
人們從工作中獲得的樂趣大於你根據工作的性質所期望的。
一旦團隊開始凝聚,成功的可能性就會大大提高。
沖廁所
成對程式設計師可以獨立完成一些工作。但是,當他們重新加入時,他們必須在合併之前審查獨立完成的工作,或者沖洗並重寫獨立完成的工作,並持續審查工作,這將識別出其他缺陷。
在未經搭檔審查的情況下,切勿合併任何獨立完成的工作。這是因為研究表明,與成對完成的工作相比,獨立完成的工作存在缺陷。
溫熱的餅乾和冷牛奶對你有好處
成對程式設計師會互相保持持續的專注和按計劃進行。這可能是非常緊張和精神上令人疲憊的。因此,定期休息以保持精力,以便進行下一輪富有成效的成對程式設計。
休息期間,最好與任務斷開連線,並在重新開始時以新的狀態來處理它。建議的活動包括檢視電子郵件、打電話、瀏覽網頁或吃零食。
過平衡的生活
定期與他人溝通是過平衡生活的關鍵。與你的搭檔和其他程式設計師進行非正式討論,可以有效地交流想法,並高效地傳遞資訊。
每天下午休息一下,不要一起工作
不需要每天下午都單獨工作,但接受10%-50%的時間單獨工作。這是因為:
許多程式設計師更喜歡單獨進行實驗性原型設計、難度大、需要高度集中注意力的問題和邏輯思考。
簡單、定義明確和例行的編碼工作,由單獨的程式設計師完成然後與搭檔一起審查效率更高。
注意交通狀況,互相配合,緊密合作。
在成對程式設計中:
兩人之間不應該存在競爭。兩人必須協同工作,彷彿產出物是由一個人的大腦完成的。
搭檔需要信任彼此的判斷力和對團隊的忠誠度。
搭檔不應該互相指責任何問題或缺陷。
意識到兩個大腦的力量。
當兩人一起工作時,每個人都擁有自己的一套知識和技能,包括:
一套共同的知識和技能,使他們能夠有效地溝通。
獨特的技能,使他們能夠共同完成任務。
合作時,兩人將:
提出比單獨工作時多出兩倍以上的解決方案。
更快地縮小到最佳解決方案。
更快地以更高的質量實施。
因此,結對程式設計是一種強大的技術,因為始終有兩個大腦集中在一個問題上。它迫使一個人完全集中精力解決眼前的問題。