結對程式設計成功的背後

2015-09-11    分類:程式設計師人生、首頁精華1人評論發表於2015-09-11

本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃

讓我們一起探索分析結對程式設計成功的特徵原因。

結對程式設計正在逐漸成為主流的程式設計方式。有著兩年結對程式設計經驗的我注意到,結對程式設計真的很棒,甚至可謂是神奇。但有時候,卻又阻礙了我們的開發程式。我想探究這背後的原因,並搞清楚如何才能讓結對程式設計一直髮揮正能量的模式和方法。

我的結對經驗

我認為先說明我自己的結對程式設計經驗,有助於各位更好地評估以下的相關內容。我已經結對程式設計將近兩年時間,就職過2家不同的公司。一家是諮詢公司,我們開發了客戶端應用程式。另一家是創業企業,開發了一個大型的SaaS產品。在這段時間,超過20個有著不同背景、性格、技能、經驗和文化的開發人員和我結對程式設計。

邊注:結對程式設計還有一個好處就是能讓我與很多厲害的人共事,成為朋友。

有效結對的特徵

回想我以往的結對經驗,很多好的壞的體驗似乎一下子歷歷在目,恍如昨天。我將此總結成為2*2的矩陣。

結對程式設計矩陣

定義

效率代溝

從我的觀察角度來看,兩個個體結對時相關性最強最具區別化的因素就是兩者之間的效率。這些因素包括——他們以往各自的經驗、領域知識、語言知識,等等。效率的另一種表達方式就是他們各自的輸出潛力,包括速度和質量。為了討論的方便,在這篇文章中會把高效和低效的程式設計師分別形容為“高階開發人員”和“低階開發人員”。

利好

兩個人結對程式設計比各自獨立工作的期望優勢。

效率差距小的結對程式設計

根據我的經驗,效率差距小的結對程式設計普遍比差距大的要更好。原因或許是因為開發人員擁有的共性更多,互動時也更自在。在矩陣中列出的要點已經非常清楚。從本質上講,差距小就意味著他們更能理解和相互尊重,願意經常溝通,共同學習進步。這將是一場愉快又雙贏的互動。

弱弱結對

我的觀察結果告訴我,弱弱結對比強強結對的利好更多。為什麼呢?大概是因為低階開發人員意見性不強,沒有那麼自負,更注重學習,而不是堅持自己是“正確”的。

你知道“新同學交友”效應嗎。假設你還是一個孩子,在某個學年中途隨你的家人搬遷到一個陌生的小鎮上。這時候如果班上另外一個孩子大約也是在相同時間轉學過來的,那麼你們更容易成為朋友,因為你們的處境相同。結對程式設計也是如此。如果你們對某個新的應用/技術/語言/等等都不熟悉,那麼之後的研究探索,由於處在平等的位置,你們不但更談得來,而且合作解決問題的時候更契合。

兩個低階開發人員結對的首要目標應該是學習。

強強結對

如果是兩個高階開發人員結對程式設計,搭檔起來會很難。因為每個程式設計師都是不同的,想法和意見也不盡相同。經驗越豐富,越傾向於堅持自己的觀點,並且還會越自大。而當其中一個人過於自大時,另一個人就只能當“應聲蟲”了。

更糟糕的是,如果兩個人都很自大。此時他們會不斷地爭執爭辯以在駁倒對方,於是兩人之間的關係會緊張,充滿敵意。我見過更糟糕的是,兩個人甚至從頭到尾一句話都不說,這顯然是負面效應了。

良好的強強結對應該是相互尊重的。相互交流,辯論,討論,還有規劃,一起創造專業化的水平。強強聯合導致的是雄厚的生產能力。

所以,兩個高階開發人員結對的首要目標應該是產量。

強弱結對

這種結對安排往往發生在有新的開發人員加入公司,或切換到新的開發環境的時候。為新來的人員搭檔一個高階開發人員,能讓前者快速融入到團隊中。但是如果選擇的這個高階開發人員不合適,那麼就有可能損害低階開發人員的信心和士氣。

期望

首先領導人員必須明白人員安排的目的是儘可能快地推動開發程式。任何有著利害關係的人員也應該明白這個道理,這些人員包括其他開發人員、設計人員、QA等,尤其是高階開發人員。並且我們不應該給這個老帶新的組合很多壓力。

輸出速度會變慢,因為生產的同時發生了指導。

指導

高階開發人員應該明白他們的角色是指導低階開發人員,而不是迅猛生產。

好的導師,願意聆聽和回答問題,觀察並提出引導性的問題。

但是人的本性讓我們很難做到如此。下面是一些要點:

不要告訴他們要打什麼,要做什麼,也不要直接就演示給他們看。不可否認這樣會省事很多。但是你應該讓他們看到自己所犯錯誤的後果,讓他們自己去思考為什麼這樣不對,讓他們自己糾正錯誤。允許他們問問題,然後用引導性的問題回答他們,讓他們自己去探索。如果他們陷入了死衚衕,就伸手拉一把。

我記得有一次我和一個完完全全的新手同事結對完成任務。因為那時壓力真的很大,我選擇了毫不留情地拖著他往前衝。雖然也經常道歉,但明顯他的心情一直很糟糕。

好的導師應該具備充足的耐心和自信,積極促進低階開發人員的成長,而不是讓他們成為人云亦云的應聲蟲。但是在這個領域,這樣的導師實在是太少了。每個人都忙著完成自己的事情,又或者根本就沒有教導他人的技能。下面這些問題或許有助於我們確定某人是否是一個好導師:

是否願意與低階開發人員分享知識,幫助他們?是否嫉妒低階開發人員的技能,或是反感他們提出意見和見解?是否願意犧牲自己的舒適力爭團隊的利好?

高階和低階開發人員結對的首要目標應該是指導和學習。

結論

正如我上面分析的那樣,每種結對情況都是不一樣的,關鍵是要承認他們的不同,瞭解如何使其能夠更大地利好於團隊。

祝程式設計快樂!

譯文連結:http://www.codeceo.com/article/pair-programming-successful.html
英文原文:Breaking down successful pair programming
翻譯作者:碼農網 – 小峰
轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]

相關文章