代碼質(zhì)量:結(jié)對編程最不重要的理由
Braintree對于軟件開發(fā)有一套自己的方法。其中一個感覺特別有沖擊力的就是有關(guān)結(jié)對編程方面的內(nèi)容。
很多人在討論結(jié)對編程的時候,通常注重的是結(jié)對對代碼質(zhì)量和開發(fā)效率產(chǎn)生的效果。這種觀點認(rèn)為:結(jié)對的成本是單一開發(fā)人員的兩倍,但如果他們能在X%的時間內(nèi)交付代碼,并且bug數(shù)量和技術(shù)負(fù)債更少,分別只有單一開發(fā)人員的Y%和Z%,那么結(jié)合衡量X,Y和Z的值,結(jié)對才可能是有意義的。
雖然這種說法沒錯,但它忽略了我們之所以結(jié)對最重要的原因:結(jié)對有助于共建一種偉大的企業(yè)文化,是讓新手開發(fā)人員加快速度的***方式,并提供了一種在開發(fā)團(tuán)隊中分享知識的很好方式。無論是哪種情況,實行結(jié)對編程雖然短期內(nèi)會讓成本小幅走高,但是從長遠(yuǎn)來看,巨大的收益也會隨之而來。
結(jié)對意味著合作,這成就了企業(yè)文化的核心
結(jié)對是一種社會經(jīng)驗:每天8小時的工作時間會與另一個開發(fā)人員密切接觸。這意味著,如果你與你結(jié)對的人不能進(jìn)行有效的溝通,不能一起好好地研究工作中出現(xiàn)的問題,不能愉快地相處,那么你就悲劇了。這也是為什么Braintree在它的面試流程中將溝通能力和文化契合度列為與技術(shù)能力平起平坐的原因:我們不想要雇用那些不能結(jié)對的人!
招聘流程是企業(yè)文化的基石:沒有正確的優(yōu)秀人才就不可能創(chuàng)造一種充滿活力的合作環(huán)境。在招聘開發(fā)人員時通過著重強(qiáng)調(diào)文化契合度和溝通能力,可以早早地表達(dá)一種協(xié)作的姿態(tài)。此外,這還有一定程度的自我選擇范圍:如果開發(fā)人員不想結(jié)對工作,那么他們可能并不適合Braintree這樣的文化氛圍。
短期成本也與此有關(guān)。如果我們決定不雇那種雖然技術(shù)好但不能好好共事的人,那么基本上等于是為了保護(hù)長效的企業(yè)文化而放棄了短期生產(chǎn)力的提高。
結(jié)對讓新手開發(fā)人員加速
在與別人結(jié)對時,你不僅能觀察他們?nèi)绾尉帉懘a,還能看到你的結(jié)對伙伴是如何面對整個開發(fā)流程的:發(fā)現(xiàn)哪里需要改變,編寫測試,閱讀源代碼,查找文件,配置開發(fā)環(huán)境,等等。并且你還可以知道他們選用哪種工具,以及如何有效使用工具。
初級開發(fā)人員絕對能從中獲益匪淺。更重要的是,當(dāng)輪到他們操作的時候,他們還可以從他們的前輩那里得到連續(xù)的反饋。這是我的親身經(jīng)歷——那個時候我剛加入Braintree,只有大概一年的專業(yè)開發(fā)經(jīng)驗,在大學(xué)里也沒有學(xué)過多少計算機(jī)科學(xué)知識。但是在這工作三個月后,我的工作流程得到了徹底的改變。
從長遠(yuǎn)來看,高級開發(fā)人員同樣受益:這已經(jīng)是一個老生常談的話題,但在教學(xué)的同時的確可以加深自己的理解。也就是說,初級開發(fā)人員和高級開發(fā)人員結(jié)對也有相關(guān)的短期成本與長期效益。一對高級開發(fā)人員固然比初級和高級開發(fā)人員結(jié)對的進(jìn)展更快,特別是工作于高級開發(fā)人員熟悉的代碼庫的時候。然而,與新員工結(jié)對能使得新員工快速上手。
結(jié)對將知識轉(zhuǎn)移置于開發(fā)流程的中心
除了基本的編程能力,開發(fā)人員需要大量的信息以便于有效地運作。這些信息包括領(lǐng)域知識,基本代碼知識,公司約定認(rèn)識,檢查的***慣例,等等。任何值得認(rèn)真對待的開發(fā)方法都需要有一種能夠在團(tuán)隊中傳播知識的好方法。
結(jié)對使得分享成為理所當(dāng)然。問問題不再成為中斷的攔路石——不斷地與結(jié)對伙伴溝通是正常工作流程的一部分。
除此之外,還有數(shù)以百計的開發(fā)小技巧能從學(xué)自結(jié)對伙伴:命令行快捷鍵,vim技巧,結(jié)合vim和tmux的方法,等等等等,不計其數(shù)。
結(jié)對的持久戰(zhàn)
Braintree的開發(fā)風(fēng)格非常強(qiáng)調(diào)長遠(yuǎn)考慮。測試驅(qū)動開發(fā);比起機(jī)智,代碼的編寫更強(qiáng)調(diào)可維護(hù)性和可讀性;盡可能緩慢的徹底深入發(fā)展。結(jié)對是發(fā)展工作的一部分:它提供了一種能每天為開發(fā)團(tuán)隊提供小投資的方法。我們以這種方式工作,某種程度上是因為我們寫的支付處理軟件為我們的客戶提供了任務(wù)關(guān)鍵型服務(wù)。而且也是因為我們認(rèn)為,從長遠(yuǎn)來看,這些做法會有大大的回報。
如果你對上述觀點產(chǎn)生了共鳴,歡迎發(fā)表你的見解。