結對編程成功的背后
英文原文:Breaking down successful pair programming
讓我們一起探索分析結對編程成功的特征原因。
結對編程正在逐漸成為主流的編程方式。有著兩年結對編程經驗的我注意到,結對編程真的很棒,甚至可謂是神奇。但有時候,卻又阻礙了我們的開發進程。我想探究這背后的原因,并搞清楚如何才能讓結對編程一直發揮正能量的模式和方法。
我的結對經驗
我認為先說明我自己的結對編程經驗,有助于各位更好地評估以下的相關內容。我已經結對編程將近兩年時間,就職過 2 家不同的公司。一家是咨詢公司,我們開發了客戶端應用程序。另一家是創業企業,開發了一個大型的 SaaS 產品。在這段時間,超過 20 個有著不同背景、性格、技能、經驗和文化的開發人員和我結對編程。
邊注:結對編程還有一個好處就是能讓我與很多厲害的人共事,成為朋友。
有效結對的特征
回想我以往的結對經驗,很多好的壞的體驗似乎一下子歷歷在目,恍如昨天。我將此總結成為2*2 的矩陣。
結對編程矩陣
定義
效率代溝
從我的觀察角度來看,兩個個體結對時相關性最強最具區別化的因素就是兩者之間的效率。這些因素包括——他們以往各自的經驗、領域知識、語言知 識,等等。效率的另一種表達方式就是他們各自的輸出潛力,包括速度和質量。為了討論的方便,在這篇文章中會把高效和低效的程序員分別形容為“高級開發人 員”和“低級開發人員”。
利好
兩個人結對編程比各自獨立工作的期望優勢。
效率差距小的結對編程
根據我的經驗,效率差距小的結對編程普遍比差距大的要更好。原因或許是因為開發人員擁有的共性更多,交互時也更自在。在矩陣中列出的要點已經非常清楚。從本質上講,差距小就意味著他們更能理解和相互尊重,愿意經常溝通,共同學習進步。這將是一場愉快又雙贏的互動。
弱弱結對
我的觀察結果告訴我,弱弱結對比強強結對的利好更多。為什么呢?大概是因為低級開發人員意見性不強,沒有那么自負,更注重學習,而不是堅持自己是“正確”的。
你知道“新同學交友”效應嗎。假設你還是一個孩子,在某個學年中途隨你的家人搬遷到一個陌生的小鎮上。這時候如果班上另外一個孩子大約也是在相 同時間轉學過來的,那么你們更容易成為朋友,因為你們的處境相同。結對編程也是如此。如果你們對某個新的應用/技術/語言/等等都不熟悉,那么之后的研究 探索,由于處在平等的位置,你們不但更談得來,而且合作解決問題的時候更契合。
兩個低級開發人員結對的首要目標應該是學習。
強強結對
如果是兩個高級開發人員結對編程,搭檔起來會很難。因為每個程序員都是不同的,想法和意見也不盡相同。經驗越豐富,越傾向于堅持自己的觀點,并且還會越自大。而當其中一個人過于自大時,另一個人就只能當“應聲蟲”了。
更糟糕的是,如果兩個人都很自大。此時他們會不斷地爭執爭辯以在駁倒對方,于是兩人之間的關系會緊張,充滿敵意。我見過更糟糕的是,兩個人甚至從頭到尾一句話都不說,這顯然是負面效應了。
良好的強強結對應該是相互尊重的。相互交流,辯論,討論,還有規劃,一起創造專業化的水平。強強聯合導致的是雄厚的生產能力。
所以,兩個高級開發人員結對的首要目標應該是產量。
強弱結對
這種結對安排往往發生在有新的開發人員加入公司,或切換到新的開發環境的時候。為新來的人員搭檔一個高級開發人員,能讓前者快速融入到團隊中。但是如果選擇的這個高級開發人員不合適,那么就有可能損害低級開發人員的信心和士氣。
期望
首先領導人員必須明白人員安排的目的是盡可能快地推動開發進程。任何有著利害關系的人員也應該明白這個道理,這些人員包括其他開發人員、設計人員、QA 等,尤其是高級開發人員。并且我們不應該給這個老帶新的組合很多壓力。
輸出速度會變慢,因為生產的同時發生了指導。
指導
高級開發人員應該明白他們的角色是指導低級開發人員,而不是迅猛生產。
好的導師,愿意聆聽和回答問題,觀察并提出引導性的問題。
但是人的本性讓我們很難做到如此。下面是一些要點:
不要告訴他們要打什么,要做什么,也不要直接就演示給他們看。不可否認這樣會省事很多。但是你應該讓他們看到自己所犯錯誤的后果,讓他們自己去 思考為什么這樣不對,讓他們自己糾正錯誤。允許他們問問題,然后用引導性的問題回答他們,讓他們自己去探索。如果他們陷入了死胡同,就伸手拉一把。
我記得有一次我和一個完完全全的新手同事結對完成任務。因為那時壓力真的很大,我選擇了毫不留情地拖著他往前沖。雖然也經常道歉,但明顯他的心情一直很糟糕。
好的導師應該具備充足的耐心和自信,積極促進低級開發人員的成長,而不是讓他們成為人云亦云的應聲蟲。但是在這個領域,這樣的導師實在是太少了。每個人都忙著完成自己的事情,又或者根本就沒有教導他人的技能。下面這些問題或許有助于我們確定某人是否是一個好導師:
是否愿意與低級開發人員分享知識,幫助他們?是否嫉妒低級開發人員的技能,或是反感他們提出意見和見解?是否愿意犧牲自己的舒適力爭團隊的利好?
高級和低級開發人員結對的首要目標應該是指導和學習。
結論
正如我上面分析的那樣,每種結對情況都是不一樣的,關鍵是要承認他們的不同,了解如何使其能夠更大地利好于團隊。
祝編程快樂!
-
譯文鏈接:http://www.codeceo.com/article/pair-programming-successful.html
翻譯作者:碼農網 – 小峰