11.5 結對程式設計

什麼是結對程式設計?

結對程式設計(pair programming),或稱結對編程,是一種敏捷開發的方式。以拆解字面上的意思來說,就是將程式開發者兩兩「結對」,使用同一台電腦工作,從設計構想一路到執行編碼的過程中都是共同合作。其中一人擔任駕駛員(driver),負責輸入程式碼,另外一人則是觀察員(observer)或領航員(navigator),負責審查駕駛員所輸入的每一行程式碼。如此兩兩交互討論、切磋並共事,在相互交換角色的工作模式,就稱之為結對程式設計。

優點多多的結對程式設計

知識傳播

結對程式設計是一個很直接的技術和經驗傳授管道。它的效果就如同一對一家教,個別對於程式實作上的進行意見反饋。因此,某些公司機構也會採取這樣的模式,例如建立自己的知識庫、培訓部門,或是聘請專家來培育新生代。透過這樣的方式,是經驗共享和知識共享的效果最大化。

個人提升

透過最直接的結對關係,兩人在擔任不同角色時,能夠透過不同的思考層面與角度去衡量程式的不同設計面向。至於結對的人選就是最重要的一環了。普遍來說,經驗和能力上較缺乏的初級程式設計師搭配一個資深前輩,經過一定的合作過後,能夠培養其獨當一面的能力。不僅僅是技術層面的提升,更是經驗的累績以及切入不同問題的思考角度與架構的提升。

團隊提升

將兩個能力經驗互補的程式設計師結對,共同完成工作項目,是一個快速拉近彼此關係促進向心力的方式。兩個人必須在最短的時間內磨合彼此的相處與合作模式。不論是討論、溝通、思想激盪,還是相互切磋,都能增進團隊凝聚力。同時透過溝通協商來提升團隊合作的工作效率。

產出質量

開發者最常會遇到的debug程序通常是在整個成品完工後,才會進行檢驗。然而,結對的好處就在於,一個人寫程式的同時有另一個人監督著。一旦出現錯漏有多一個人能在第一時間及時修正bug,並在發現的當下就改正。如此便能在成果初次呈現之時就提升其質量並且省去最後debug步驟的精力和時間。

關於這點,有需多可以討論的議題.....

兩個人同時只負責一個項目,真的比較有效率嗎?
花兩個人的薪資卻只有一個產出,反而成本高。
資深專家有義務要負初學者的教學責任嗎?
這組程式的難易度,有必要兩個人討論嗎?

以上是許多線上工程師或是曾試過結對程式設計公司所提出的質疑。確實,結對程式設計並不適用於所有情形。結對的可能性有強與強的結合、弱與弱的配對或是強弱的互補型。

首先,倘若出現強強結合,雙方都是有經驗有技術的前提之下,都各自固有寫程式習慣與思維,討論可能顯得多餘。對他們來說大部分屬於輕鬆的程度,也沒有什麼討論的必要,一樣能夠達成最終的目標效果。如此便形成人才閒置,卻仍須負擔閒置人等的薪資成本。若是強強組合拆開來工作,能獨自完成兩個項目反而提升了產出效率。

第二種可能,若是弱弱搭配,確實能夠達到討論互助及增進團體凝聚力的效果,但比較難要求短時間的生產效率。

最後一種,同時也是最多人採取的強弱互補型組合,並不存在上述兩點的缺陷。然而,相較於初學者能以學習為重心,資深開發者卻只是付出遠大於收穫。如此固然能夠培育新人,但資深者是有義務對初學者的學習負責的嗎?職場上普遍需要的是技能點滿後再自行累積經驗拉拔自己起來的人。前輩們在心態上未必認同這樣的做法。

小結

結對程式設計一直以來都有著極端的評價和看法。有許多人質疑他的效果,但不可否認的是也有許多上市公司也正使用這個方法運作,也獲得不錯的回響。究竟適不適用,須考量到的層面包含每個人的個性、習慣與工作模式,甚至是環境和產出內容的難易程度和所預設的目標都會影響到運作效果。至於是否真的採用就在於個人抉擇嘍!

Last updated