轉(zhuǎn)帖|行業(yè)資訊|編輯:龔雪|2016-06-24 10:16:55.000|閱讀 192 次
概述:過去十多年中,筆者曾經(jīng)與上百個(gè)開發(fā)團(tuán)隊(duì)共同合作,這些團(tuán)隊(duì)具有一個(gè)共同的特點(diǎn)就是:他們通常不會(huì)采用結(jié)對(duì)編程作為軟件交付的技術(shù)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
過去十多年中,筆者曾經(jīng)與上百個(gè)開發(fā)團(tuán)隊(duì)共同合作,這些團(tuán)隊(duì)具有一個(gè)共同的特點(diǎn)就是:他們通常不會(huì)采用結(jié)對(duì)編程作為軟件交付的技術(shù)。其中一些團(tuán)隊(duì)會(huì)討論結(jié)對(duì)編程并且認(rèn)同這種理念,不過由于某種(些)原因,他們目前仍未采用結(jié)對(duì)編程。那么接下來的問題就是,是什么原因?qū)е滤麄儾徊捎媒Y(jié)對(duì)編程呢?在我個(gè)人的經(jīng)驗(yàn)當(dāng)中,采用結(jié)對(duì)編程和協(xié)作仍有許多障礙。許多團(tuán)隊(duì)合作(cooperate)的很好,但實(shí)際上并不是協(xié)作(collaborate)。因?yàn)閰f(xié)作基于信任,它是結(jié)對(duì)編程的關(guān)鍵環(huán)節(jié)之一。
結(jié)對(duì)編程是軟件開發(fā)過程中所使用的一種技術(shù),兩名程序開發(fā)人員共享同一臺(tái)工作站,其中一名開發(fā)人員被稱為駕駛員(Driver),另一位被稱為領(lǐng)航員(Navigator)或觀察員(Observer)。兩人輪流使用同同一個(gè)鍵盤編寫代碼和測試案例。兩個(gè)開發(fā)人員輪流使用鍵盤可以讓每個(gè)開發(fā)人員都有機(jī)會(huì)思考設(shè)計(jì)和相應(yīng)的實(shí)現(xiàn)。兩人還能夠從相互的思想交流中受益,通常能寫出更加高效的代碼。
結(jié)對(duì)編程的概念相當(dāng)簡單明了,而且在90年代后期,極限編程(XP)的早期就已經(jīng)開始有實(shí)際的應(yīng)用。不過在我個(gè)人的經(jīng)歷中,它仍是使用最少的極限編程技術(shù)之一。敏捷實(shí)踐和極限編程的流行讓這一問題得以回避。據(jù)我的了解,結(jié)對(duì)編程仍存在許多障礙。
我們首先從組織層級(jí)開始分析。許多經(jīng)理覺得開發(fā)者結(jié)對(duì)編程時(shí),他們付出了兩個(gè)開發(fā)人員的代價(jià)卻只得到了一個(gè)開發(fā)人員的生產(chǎn)力。在團(tuán)隊(duì)剛剛開始結(jié)對(duì)編程時(shí)的確如此,不過只需經(jīng)過很短的時(shí)間,結(jié)對(duì)就會(huì)以更快的速度交付更多的功能,而且經(jīng)常只需要更少的代碼,而且質(zhì)量也會(huì)有一定的提升。結(jié)對(duì)編程能夠幫助在進(jìn)行測試之前就解決掉代碼中的問題,遺留到生產(chǎn)環(huán)境中的會(huì)更少。
組織級(jí)的挑戰(zhàn)并未到此為止。還有一些關(guān)于實(shí)際環(huán)境方面的考慮。如今,開發(fā)人員通常會(huì)占據(jù)一個(gè)受限的工位空間。結(jié)對(duì)則需要至少6英尺大的開放式座位空間,以便兩人可以并肩坐在一起。有些組織還缺乏適用于結(jié)對(duì)編程的硬件,例如無線鍵盤,無線鼠標(biāo),以及至少21寸的顯示器。對(duì)于顯示器來說,則是越大越好。
除了硬件設(shè)備之外,組織級(jí)的挑戰(zhàn)還存在于對(duì)開發(fā)人員的認(rèn)可、加薪和晉升的機(jī)制。組織對(duì)員工進(jìn)行排名會(huì)嚴(yán)重限制開發(fā)人員有效地學(xué)習(xí)結(jié)對(duì)編程的可能性。許多情況下,開發(fā)人員希望被視為超級(jí)英雄,以借此提升其在同事之中的級(jí)別。另外一個(gè)阻礙是績效評(píng)估。很少有公司會(huì)將團(tuán)隊(duì)合作視為一項(xiàng)有價(jià)值的技能,更多的是尋找能夠拯救公司于危難之中的“超級(jí)英雄”。此外,一直處于在戰(zhàn)術(shù)層面滅火模式的組織難以體會(huì)在結(jié)對(duì)編程過程中開發(fā)人員進(jìn)行的技術(shù)和專業(yè)領(lǐng)域知識(shí)分享所帶來的價(jià)值。
如果你的團(tuán)隊(duì)在嘗試結(jié)對(duì)編程上仍保持謹(jǐn)慎,好消息是將結(jié)對(duì)編程融入到金喜正規(guī)買球當(dāng)中已經(jīng)有一些公開的案例。其中一個(gè)例子是Menlo Innovations公司,他們要求所有的開發(fā)人員每天都要進(jìn)行結(jié)對(duì)編程。結(jié)對(duì)編程是其招募員工的條件之一。雖然這并不一定對(duì)所有人都是最優(yōu)的方案,至少能起到一定的作用。
讓開發(fā)人員能夠結(jié)對(duì)編程的一個(gè)關(guān)鍵因素是較高的安全系數(shù)。總的來說,絕大多數(shù)開發(fā)人員會(huì)擔(dān)心被發(fā)現(xiàn)他們其實(shí)比他們所表現(xiàn)的要缺乏競爭力。有人將其看做是負(fù)擔(dān)癥候群的實(shí)例。負(fù)擔(dān)癥候群通常會(huì)出現(xiàn)如下癥狀:自己對(duì)自己的能力產(chǎn)生懷疑,而又極力說服其他人自己的確擁有這種能力。
一部分人會(huì)認(rèn)為代碼審查已經(jīng)足夠并且已經(jīng)實(shí)際運(yùn)轉(zhuǎn)多年。代碼審查的問題在于其發(fā)生在代碼已經(jīng)完成,而且常常是已經(jīng)經(jīng)過測試并準(zhǔn)備發(fā)布時(shí)。如果發(fā)現(xiàn)問題,就會(huì)浪費(fèi)許多編碼時(shí)間,而且還不得不重新返工并測試這個(gè)問題,之后再次經(jīng)過審查。不幸的是,這在代碼審查中時(shí)常發(fā)生。更有甚者,開發(fā)人員會(huì)陷入哪一種技術(shù)最佳的爭辯之中。這種情形下,要么最資深的人強(qiáng)制開發(fā)人員做出修改要么房間中最大的聲音獲勝。這兩種情形都會(huì)破壞團(tuán)隊(duì)之中的信任感。
當(dāng)要求開發(fā)人員嘗試結(jié)對(duì)編程時(shí),他們可能會(huì)有頗有微詞。譬如:‘如果我自己做速度會(huì)更快’或者‘與同事結(jié)對(duì)編程沒有任何意義,因?yàn)槲也粫?huì)從他們身上學(xué)到什么東西’或者僅僅是‘我已經(jīng)嘗試過了,但并沒發(fā)現(xiàn)有什么作用’。盡管這些爭辯可能是對(duì)的,但也可能只是他們感覺在有另一個(gè)人在場的情況下編程不安全。
最根本的挑戰(zhàn)在于如何創(chuàng)建一個(gè)能夠讓開發(fā)人員覺得可以安全地學(xué)習(xí)、犯錯(cuò)、快速失敗、持續(xù)提升技能的環(huán)境。由于失敗會(huì)遭受懲罰,一些開發(fā)人員會(huì)害怕失敗。會(huì)對(duì)失敗員工做出懲罰的組織不太可能鼓勵(lì)員工嘗試和成長。
通常,一個(gè)團(tuán)隊(duì)中的成員會(huì)被聚集在一起,而不會(huì)作為個(gè)體互相了解。如果你的團(tuán)隊(duì)還不會(huì)在一起分享社交時(shí)間,那么這可能是一個(gè)最佳起始點(diǎn)。帶領(lǐng)團(tuán)隊(duì)郊游、午餐、共享歡樂時(shí)光或者他們希望一起體驗(yàn)的其他活動(dòng)。鼓勵(lì)他們一起在辦公室或外出午餐。宴請(qǐng)員工午餐或者郊游可以打消他們對(duì)開銷的顧慮。向公司申請(qǐng)對(duì)此類活動(dòng)的資助可能需要一點(diǎn)勇氣,必要的話,團(tuán)隊(duì)領(lǐng)導(dǎo)要做好自己為此買單的準(zhǔn)備。
為團(tuán)隊(duì)成員學(xué)習(xí)創(chuàng)造一個(gè)安全的環(huán)境可能會(huì)成為許多組織的挑戰(zhàn)。一旦創(chuàng)造了一個(gè)適合于結(jié)對(duì)編程的辦公環(huán)境,六英尺或更長的桌子和兩張舒適的椅子,那么接下來就需要合適的顯示器、鍵盤和鼠標(biāo)。如果是第一次設(shè)置結(jié)對(duì)編程工作站,可以考慮使用一個(gè)只有白板的小的會(huì)議室空間。在實(shí)際編寫代碼之前,開發(fā)者喜歡在白板上草擬程序的設(shè)計(jì)和邏輯。現(xiàn)在你已經(jīng)擁有了一個(gè)適用于結(jié)對(duì)編程的實(shí)際空間。
下一個(gè)挑戰(zhàn)則是為開發(fā)人員提供一個(gè)便于結(jié)對(duì)編程的機(jī)會(huì)。例如,請(qǐng)一名資深開發(fā)人員與一名初級(jí)開發(fā)人員或團(tuán)隊(duì)中的新員工結(jié)對(duì)完成一個(gè)故事。在試驗(yàn)當(dāng)中,每個(gè)個(gè)體都應(yīng)該有機(jī)會(huì)嘗試結(jié)對(duì)編程練習(xí)的機(jī)會(huì)。強(qiáng)制開發(fā)人員結(jié)對(duì)編程通常不會(huì)帶來預(yù)期的收益。
我曾經(jīng)用過并且有良好效果的另外一個(gè)技巧是雇傭一個(gè)有良好聲譽(yù)的顧問作為強(qiáng)力開發(fā)人員。合約期限可以很短,兩周時(shí)間就能夠產(chǎn)生顯著的影響。讓開發(fā)人員知曉該顧問可以與他們進(jìn)行1對(duì)1的代碼會(huì)話,并建議他們參加一個(gè)小時(shí)的時(shí)間。可以建議他們用當(dāng)前所分配的任務(wù)進(jìn)行嘗試或者讓顧問分享一些練習(xí)案例。讓團(tuán)隊(duì)與備受尊敬的顧問一起工作的另外一個(gè)好處是該顧問可能還會(huì)鼓勵(lì)使用其他優(yōu)良的技術(shù)實(shí)踐,如TDD。
當(dāng)團(tuán)隊(duì)就某項(xiàng)新的技術(shù)做出嘗試時(shí),務(wù)必從團(tuán)隊(duì)成員處獲取匿名反饋,以了解包括結(jié)對(duì)編程在內(nèi)的這類嘗試效果如何。試著讓團(tuán)隊(duì)成員自行發(fā)現(xiàn)如何才能在與不同的伙伴合作、結(jié)對(duì)時(shí)更加自信。對(duì)于新的技術(shù)實(shí)踐,總是需要經(jīng)過多次嘗試之后,團(tuán)隊(duì)成員才能夠得心應(yīng)手。
有多種方式可以在工作之余鼓勵(lì)結(jié)對(duì)編程,這時(shí)團(tuán)隊(duì)成員不會(huì)對(duì)他們?cè)趫F(tuán)隊(duì)中的地位有太多顧慮。代碼訓(xùn)練營和代碼道場可以提供一個(gè)寬松的環(huán)境,在這里絕大多數(shù)人都是學(xué)習(xí)者,同時(shí)也能夠分享他們的經(jīng)驗(yàn)。敏銳的觀察者可以識(shí)別出團(tuán)隊(duì)中最有可能嘗試新技術(shù)的成員。與該成員一對(duì)一對(duì)話,鼓勵(lì)他們建立自己的專業(yè)技能并為他們提供這樣的機(jī)會(huì)。
其目的是讓一個(gè)或多個(gè)開發(fā)人員發(fā)現(xiàn)結(jié)對(duì)編程其中的價(jià)值。無論結(jié)對(duì)編程的嘗試結(jié)果如何,團(tuán)隊(duì)領(lǐng)導(dǎo)人/經(jīng)理都應(yīng)該對(duì)團(tuán)隊(duì)持支持態(tài)度,繼續(xù)鼓勵(lì)每個(gè)團(tuán)隊(duì)成員的個(gè)人發(fā)展。
對(duì)于安全感比較低的團(tuán)隊(duì)領(lǐng)導(dǎo)者,更加明智的選擇可能是為團(tuán)隊(duì)成員播放一段結(jié)對(duì)編程的視頻,或者鼓勵(lì)他們閱讀結(jié)對(duì)編程有關(guān)的書籍。Laurie Williams與Robert Kessler合著了《Pair Programming Illuminated》一書。書中分享了幾種不同類型的結(jié)對(duì)編程的案例,包括哪些案例可行哪些不可行。另外一個(gè)選擇是利用互聯(lián)網(wǎng)。在互聯(lián)網(wǎng)上快速檢索可以找到大批量的結(jié)對(duì)編程有關(guān)的教程、視頻和文章。
如果在鼓勵(lì)結(jié)對(duì)編程這方面的嘗試不太成功或者正在為團(tuán)隊(duì)尋找其他的協(xié)作機(jī)會(huì),可以考慮在團(tuán)隊(duì)中開展Mobbing會(huì)議。Mob編程正在獲得越來越多的組織的青睞。Mobbing的其中一個(gè)附加好處就是通過輪流在唯一的共享鍵盤上輸入,每個(gè)人都能夠參與到設(shè)計(jì)和編碼當(dāng)中。Mob編程可以幫助在團(tuán)隊(duì)中建立更好的共享責(zé)任觀念并且?guī)椭鲞M(jìn)團(tuán)隊(duì)成員之間的關(guān)系和信任。對(duì)于任何一項(xiàng)新的技術(shù),團(tuán)隊(duì)都需要經(jīng)過實(shí)踐才能夠逐漸適應(yīng)。最后,隨著團(tuán)隊(duì)成員之間彼此開始逐漸互相信任,他們就會(huì)更愿意嘗試其他的新技術(shù),這也就能夠?yàn)樗麄冮_創(chuàng)一種更好的合作方式。
一旦團(tuán)隊(duì)開始接受結(jié)對(duì)編程,要不斷鼓勵(lì)他們嘗試其他的技術(shù)實(shí)踐。不論成功和失敗,都要不吝贊美,因?yàn)檫@都是寶貴的學(xué)習(xí)機(jī)會(huì)。
本文來源:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn