成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何成功實(shí)施結(jié)對(duì)編程

開發(fā) 項(xiàng)目管理
這篇文章沒打算去告訴你是否應(yīng)該去做結(jié)對(duì)編程。跟大多數(shù)事物一樣,結(jié)對(duì)編程也是有利有弊,而且針對(duì)這個(gè)話題也有一些比較嚴(yán)謹(jǐn)?shù)姆治隽恕S懻摻Y(jié)對(duì)編程的利弊會(huì)讓本文偏離重點(diǎn),本文所要講述的是,如果你已經(jīng)信任結(jié)對(duì)編程了,那怎么把它帶到團(tuán)隊(duì)中來?

在我做咨詢工作的三年半時(shí)間里,我(跟客戶)談?wù)摻Y(jié)對(duì)編程的時(shí)間比其他任何話題都多。一般來講,客戶的開發(fā)人員都從來沒有結(jié)對(duì)過,也根本沒有這個(gè)念頭。而且更糟的是,那些搞商務(wù)的總覺得兩個(gè)人坐在一臺(tái)機(jī)器前面是浪費(fèi)。

不過即使有著這些成見,等我們離開的時(shí)候,業(yè)務(wù)人員跟開發(fā)人員也已經(jīng)坐到一起結(jié)對(duì)了。

成功實(shí)施結(jié)對(duì)是很困難的,不過一旦你用上我學(xué)到的經(jīng)驗(yàn),一切皆可能。

我假設(shè)本文的讀者曾經(jīng)有過一些結(jié)對(duì)的經(jīng)驗(yàn),也正在尋找?guī)椭M織實(shí)施結(jié)對(duì)的方法。身處不同角色的人都可以從本文中得到一些啟發(fā),不過它的主要目標(biāo)受眾還是那些致力于在團(tuán)隊(duì)中推廣結(jié)對(duì)編程的開發(fā)人員或是團(tuán)隊(duì)領(lǐng)導(dǎo)。

結(jié)對(duì)空間的配置

就我的經(jīng)驗(yàn)來看,把結(jié)對(duì)環(huán)境配置好可以向成功實(shí)施結(jié)對(duì)邁出很大的一步。下面描述了我最喜歡的配置,不過你還是得按照自己的具體情況進(jìn)行調(diào)整:

◆方桌可以讓大家挨著坐得很舒服。Nat Pryce也用過圓桌,結(jié)果也挺不錯(cuò)。不過你面前正好對(duì)著一條弧線,干活的時(shí)候就會(huì)難受;最好別這樣干。

◆買到性能最好的開發(fā)機(jī)器。如果結(jié)對(duì)用的機(jī)器比他們自己用的機(jī)器更好,他們就會(huì)更喜歡用前者。此外,你只需要給兩個(gè)人買一臺(tái)機(jī)器就行了,這樣購買能力還能高點(diǎn)。
 
◆帶雙DVI輸出的視頻卡。分離器也行,不過效果不好。最好是能夠有雙DVI輸出,可以把分辨率調(diào)到最高。

◆兩個(gè)24"或者30"的顯示器。兩個(gè)大顯示器(跟兩套鍵盤鼠標(biāo)配合起來),顯示同一個(gè)桌面,可以讓結(jié)對(duì)的人感覺到他們都是在用自己的機(jī)器。

◆兩套鍵盤鼠標(biāo)。每個(gè)人都可以用自己的那套,不過可能有的人就喜歡兩個(gè)人用一套鍵盤鼠標(biāo)。

我的想法是,一定要讓大家有一個(gè)盡量舒服的工作環(huán)境,至少要跟他們用自己的機(jī)器干活一樣舒服。

讓大家離開自己的桌子(和耳機(jī))是很難的,不過要是讓他們?cè)谝粋€(gè)條件更差的環(huán)境里工作可就太蠢了。你應(yīng)該把地方搞得舒舒服服的,讓大家可以心甘情愿的過來。

把環(huán)境弄好以后,你便向成功邁出了第一步,也是很大的一步;然后你還要保證把機(jī)器配置好。我一般都是給一臺(tái)機(jī)器做個(gè)鏡像,然后用它配置其他機(jī)器。每 周重鏡像一次也挺好的。開發(fā)人員常常會(huì)在需要的時(shí)候在結(jié)對(duì)機(jī)器上裝一個(gè)新工具,或者加一個(gè)別名(alias),但是其他結(jié)對(duì)機(jī)器上不一定也有這工具或是別 名。我發(fā)現(xiàn)定期重鏡像會(huì)強(qiáng)迫團(tuán)隊(duì)成員去更新鏡像,而不是每次只管自己的機(jī)器。

#T#鏡像里面放哪些東西也要看具體團(tuán)隊(duì)。從理論上講,要想讓整個(gè)團(tuán)隊(duì)在編輯器、桌面布局等方面達(dá)成一致,你非得弄個(gè)頭昏腦脹不可。不過實(shí)際來看,任 何一個(gè)配得上自己工資的程序員都希望能夠用最理想的工具工作。有的時(shí)候,每個(gè)人的心中都有一個(gè)自己看來最理想的工具,不過總會(huì)有一個(gè)工具勝出。如果沒有明 確的最佳選擇,那就先選一個(gè)標(biāo)準(zhǔn)工具,用起來再說。有一個(gè)裝滿了各種最佳工具的鏡像,就可以保證每個(gè)人在任何結(jié)對(duì)機(jī)器上都可以高效工作了,這個(gè)結(jié)果很令人滿意。

不過別想一開始就能把鏡像搞定。創(chuàng)建鏡像也是一個(gè)迭代式的過程,團(tuán)隊(duì)?wèi)?yīng)當(dāng)持續(xù)改進(jìn)。

我在布置同地結(jié)對(duì)環(huán)境上做 的很成功。幾乎每個(gè)人都有一個(gè)會(huì)議室,當(dāng)你許諾開放的辦公環(huán)境能提高20%的生產(chǎn)率的時(shí)候,人們自然愿意放棄些私人空間(同地結(jié)對(duì)的情況下,20%的提高 是很容易做到的)。在DRW(我當(dāng)前的雇主)里,我們拆掉了一個(gè)個(gè)小格子,坐在桌前望過去可以一馬平川。我們放棄了“個(gè)人”空間來換取結(jié)對(duì)環(huán)境。想干點(diǎn)自 己私事的時(shí)候,就可以拿個(gè)筆記本到會(huì)議室里去。

我堅(jiān)信,如果沒有很好的結(jié)對(duì)環(huán)境,即便是你采取了本文中的其他建議,那估計(jì)也會(huì)是失敗的結(jié)局;不過有些讀過這篇文章的人也不同意我的觀點(diǎn)。但我們都 對(duì)一點(diǎn)保持意見一致:一定要盡可能的消除過程實(shí)施中的障礙,這絕對(duì)忽視不得。以我的個(gè)人經(jīng)驗(yàn)看來,最大的障礙莫過于給大家提供舒適的工作環(huán)境,但就像讀者 所說的那樣,萬事萬物并無絕對(duì)。

一次只關(guān)注一個(gè)人

我從不相信強(qiáng)迫人們做結(jié)對(duì)能有效果。有些人喜歡結(jié)對(duì),有些人不喜歡。無論如何,要是強(qiáng)迫人們?nèi)プ鼋Y(jié)對(duì),他們就不會(huì)給你好臉色的。

我用的是慢慢生根發(fā)芽的方式。一般我先專門跟那些不太確定結(jié)對(duì)是否有效,但是能夠接受這想法的人結(jié)對(duì)。用不了多久他們就會(huì)喜歡結(jié)對(duì)勝于單獨(dú)工作了。這時(shí)候我就可以去跟下一個(gè)不太接受這想法的人結(jié)對(duì)。先摘下觸手可及的果實(shí),然后再去找最排斥結(jié)對(duì)的人。

通常我不會(huì)放棄那些拒絕結(jié)對(duì)的“頑固分子”。在我去努力“勸降”他們之前,你往往會(huì)發(fā)現(xiàn)以下兩種變化中的一種

◆他們注意到除了他們以外,整個(gè)團(tuán)隊(duì)的生產(chǎn)力都有顯著提高,所以他們來詢問他們是不是也能參加到結(jié)對(duì)中。

◆他們注意到除了他們以外,整個(gè)團(tuán)隊(duì)的生產(chǎn)力都有顯著提高,他們不得不最終離開。顯而易見,不能融入團(tuán)隊(duì)的人往往表現(xiàn)較差。通常,這些人也能看到這一切,而選擇新的方向。

根據(jù)我的經(jīng)驗(yàn),90%的情況下,那些你想保留住的員工,最終會(huì)喜歡上結(jié)對(duì)。當(dāng)然,你也得好好考慮一下,由于失去那些堅(jiān)決反對(duì)結(jié)對(duì)的員工,而給你 的項(xiàng)目和業(yè)務(wù)所帶來的影響。有的時(shí)候,你可以把他們換到別的一些讓他們不覺得抵觸或者有壓力的崗位,這也合情合理。另外的時(shí)候,讓他們離開可能更加合適。

澄清一點(diǎn),這世上還是有很多不錯(cuò)的開發(fā)人員不相信結(jié)對(duì)的。但是我認(rèn)為他們當(dāng)中的絕大多數(shù)很可能從來沒有正確地使用過結(jié)對(duì)。當(dāng)然即使正確地結(jié)對(duì)過,他 們中的大部分人仍然有可能還是更傾向一個(gè)人編程。我往往會(huì)認(rèn)為這些人都是不錯(cuò)的,只是并不合適那些主要有結(jié)對(duì)組成的團(tuán)隊(duì)。傾向于結(jié)對(duì),并不表示你就是天 才。同樣地,不喜歡結(jié)對(duì)也不表示你就不是天才了。

從長遠(yuǎn)的角度來看,我相信在一個(gè)團(tuán)隊(duì)內(nèi)部,如果對(duì)結(jié)對(duì)編程有著不同的理解是不利的。根據(jù)我的經(jīng)驗(yàn),不管是支持結(jié)對(duì)的,還是反對(duì)結(jié)對(duì)的,大家都認(rèn)為在 一個(gè)團(tuán)隊(duì)里面有兩種不同的觀點(diǎn)是極度低效的。通常的結(jié)果就是團(tuán)隊(duì)中人與人之間不斷地為了這個(gè)話題進(jìn)行斗爭(zhēng),把寶貴的時(shí)間都花在了爭(zhēng)吵和互相責(zé)怪、推委上面 去了。

交換結(jié)對(duì)

如果你跟某個(gè)人一起工作,他不排斥結(jié)對(duì),但是不確定結(jié)對(duì)是否可行,那就可以常常跟他結(jié)對(duì),甚至一直結(jié)對(duì)。最開始的幾次結(jié)對(duì)嘗試算是適應(yīng)階段,這個(gè)時(shí) 候應(yīng)該給他們提供最佳的結(jié)對(duì)工作環(huán)境。不過一旦有人度過了實(shí)驗(yàn)階段,開始享受結(jié)對(duì)的樂趣,那么最好就換個(gè)人來結(jié)對(duì)。按我的個(gè)人經(jīng)驗(yàn)來看,結(jié)對(duì)的時(shí)間最少一 天,最多兩天。當(dāng)然這也要看具體環(huán)境,但在我過去的編程生涯中,這個(gè)數(shù)據(jù)倒還是保持恒定的。

跟一個(gè)人結(jié)對(duì)多長時(shí)間效率最高?從不同的視角來看會(huì)得到不同的結(jié)論。我在上面那段話中提到過,我一般跟同一個(gè)人至少結(jié)對(duì)一天,最多不超過兩天。從其 他角度出發(fā),我可能會(huì)建議每個(gè)迭代交換一次結(jié)對(duì),隨意混亂結(jié)對(duì)。這兩樣我都覺得有點(diǎn)極端,但我也認(rèn)識(shí)到,在特定的環(huán)境下他們也可能是明智的選擇。藉由頻繁 交換結(jié)對(duì),我們會(huì)在兩處收獲頗豐:

人們?cè)诠ぞ撸ㄈ鏶rep、IDE)、領(lǐng)域、模式、測(cè)試等等方面各有專長。在實(shí)現(xiàn)你當(dāng)前的特征時(shí),跟這方面的專家一起結(jié)對(duì)就是個(gè)相當(dāng)不錯(cuò)的主意。

在團(tuán)隊(duì)中,你有時(shí)會(huì)從別人身上學(xué)習(xí),有時(shí)會(huì)去指導(dǎo)別人;跟不同的團(tuán)隊(duì)成員一起工作,會(huì)讓你更好地掌握扮演不同角色所花的時(shí)間。

交換結(jié)對(duì)能夠大幅度提升效率,從而帶來了更高的實(shí)施成功率。

誰來當(dāng)駕駛員

新接觸結(jié)對(duì)的人常問這種問題:你們難道不是同時(shí)編碼么?簡(jiǎn)單一句話:不。我們可以通過“乒乓結(jié)對(duì)編程”的方式來解決有人編碼太少或者太多的問題。

“乒乓結(jié)對(duì)編程”(又稱“乒乓結(jié)對(duì)”)指的是兩個(gè)人交換編寫測(cè)試和實(shí)現(xiàn)代碼。也許用“乒乓結(jié)對(duì)測(cè)試驅(qū)動(dòng)開發(fā)”這個(gè)冗長一些的名字會(huì)更為準(zhǔn)確,不過也就更麻煩了。結(jié)對(duì)的流程看起來可能是下面這個(gè)樣子:

1. 開發(fā)者1號(hào)寫一個(gè)失敗的測(cè)試。

2. 開發(fā)者2號(hào)編寫僅僅夠用的代碼,讓測(cè)試通過

3. 開發(fā)者2號(hào)寫一個(gè)失敗的測(cè)試

4. 開發(fā)者1號(hào)編寫僅僅夠用的代碼,讓測(cè)試通過

5. 回到第一步。周而復(fù)始。

在引入結(jié)對(duì)的時(shí)候,“乒乓結(jié)對(duì)”可以很見成效。

無論如何,過了開頭幾天以后,結(jié)對(duì)中每個(gè)人所扮演的角色往往就會(huì)決定了“誰應(yīng)該敲鍵盤”。

結(jié)對(duì)中的指導(dǎo)者

不管給了什么任務(wù),在一對(duì)人里面,幾乎都會(huì)有一個(gè)對(duì)問題了解的更加清楚一些。在這種情況下,讓了解問題更少的人來當(dāng)駕駛員則更有意義。指導(dǎo)者應(yīng)該把 思維模式調(diào)整一下,從“我怎么來交付這個(gè)功能”變成“我該怎么領(lǐng)導(dǎo)我這對(duì)人,從而針對(duì)這個(gè)問題給出正確的解決方案”。在扮演指導(dǎo)者這個(gè)角色的時(shí)候,他應(yīng)該 是傳道授業(yè)解惑,而不是鞠躬盡瘁實(shí)現(xiàn)代碼。你該聽說過這句話:授人以魚不若授人以漁。

注意:我發(fā)現(xiàn)無論是學(xué)習(xí)、實(shí)施,還是已經(jīng)進(jìn)入結(jié)對(duì)的穩(wěn)定階段以后,這角色都很有價(jià)值。在學(xué)習(xí)和實(shí)施結(jié)對(duì)編程的時(shí)候,意識(shí)到自己是一名指導(dǎo)者,并有效地進(jìn)行知識(shí)傳播,就可以跟另一半建立起強(qiáng)烈的自信和信任關(guān)系。在穩(wěn)定階段,當(dāng)一個(gè)指導(dǎo)者可以在完成特征的過程中傳播知識(shí)。#p#

扮演指導(dǎo)者的角色可以有很好的機(jī)會(huì)從宏觀上考慮全局。你也許會(huì)想出一個(gè)更簡(jiǎn)單的辦法可以解決手頭的問題。如果我想出一個(gè)更有效的解決問題的方式,我 首先會(huì)教會(huì)另一半怎么用最開始的方式完成任務(wù)(如果有時(shí)間限制的話),然后對(duì)另一個(gè)念頭做一個(gè)快速探測(cè),如果解決方案較優(yōu),那對(duì)方就可以理解為什么我們要 切換過去,如果還不如最開始那一個(gè),我們也可以很容易做還原。

結(jié)對(duì)中的學(xué)習(xí)者

有了指導(dǎo)者,另外一個(gè)人就肯定是學(xué)習(xí)者了。學(xué)習(xí)者的任務(wù)只有一個(gè):控制結(jié)對(duì)用的機(jī)器,徹底弄清楚問題,用自己覺得最顯而易見的解決方式來實(shí)現(xiàn)任務(wù)。 如果這個(gè)方案可行,指導(dǎo)者就可以提供一些必要的指導(dǎo)。如果方案中有缺陷,指導(dǎo)者也很容易對(duì)方案中的不足之處加以指點(diǎn),為改進(jìn)指明方向。

無論是指導(dǎo)者還是學(xué)習(xí)者,這種分類都不是長期固定的。這得看當(dāng)前所進(jìn)行的活動(dòng)。我可能是RoR的專家,另一個(gè)伙伴則可能是SQL和JavaScript的專家。實(shí)現(xiàn)一個(gè)特征的時(shí)候我們會(huì)多次交換角色。重要的是得弄清楚什么時(shí)候作交換,并對(duì)自己的角色進(jìn)行調(diào)整。

這里有一條規(guī)則,學(xué)習(xí)者應(yīng)該承擔(dān)大部分駕駛員的任務(wù)。

不感興趣的&精力不集中的結(jié)對(duì)伙伴

有時(shí)候,你的結(jié)對(duì)伙伴對(duì)手頭的任務(wù)不感興趣。跟了無生趣的結(jié)對(duì)伙伴一起工作決不會(huì)讓人興趣盎然。只有兩個(gè)人齊心協(xié)力,才能從結(jié)對(duì)編程中得到最佳的解 決方案。很顯然,無精打采的人是不會(huì)好好協(xié)作的,所以解決方案也很難是最優(yōu)解。最好的情況下,即使解決方案已經(jīng)足夠完美,但另外一個(gè)人的時(shí)間卻被完全浪費(fèi) 了。

一個(gè)結(jié)對(duì)伙伴不感興趣必然是有些原因。當(dāng)然,要弄清楚為什么一個(gè)結(jié)對(duì)伙伴不感興趣,就涉及到個(gè)人問題,是不能按照一般方式來解釋。

精力不集中的結(jié)對(duì)伙伴,就像描述的那樣,很容易被周圍的環(huán)境所影響。他們往往花在打字上的時(shí)間比較少,因?yàn)樗麄兛偸敲χ鴰椭鷦e人。他們不是沒有 價(jià)值的。事實(shí)上,他們通常能對(duì)他們的結(jié)對(duì)伙伴正在編寫的代碼做出巨大的貢獻(xiàn)。當(dāng)然,他們很少100%投入,因?yàn)樗麄兘?jīng)常在同一時(shí)間嘗試去幫助多對(duì)結(jié)對(duì)伙伴 解決問題。有一些精力不集中的結(jié)對(duì)伙伴也會(huì)花很多時(shí)間在查郵件和別的輔助工作上。

Joel Spolsky相信開放式的工作環(huán)境很有意思,但不夠高效。雖然我不同意這個(gè)觀點(diǎn),但我也明白一些精力不集中的結(jié)對(duì)伙伴是怎么樣很容易地就讓經(jīng)理們得出這個(gè)結(jié)論的。

我曾經(jīng)是個(gè)精力不集中的結(jié)對(duì)伙伴。我也曾經(jīng)和幾個(gè)精力不集中的結(jié)對(duì)伙伴們一起工作過。我相信我們每個(gè)人都不時(shí)地會(huì)遇到這種情況。過去我看到過通 過制訂一些政策來管理精力不集中的結(jié)對(duì)伙伴。比如,“個(gè)人的筆記本不能帶入開發(fā)區(qū)域”這條規(guī)則就在我之前的項(xiàng)目中出現(xiàn)過。這條規(guī)則能幫助大家解決些問題, 但它也帶來了新的別的問題。

不感興趣和精力不集中的結(jié)對(duì)伙伴所帶來的最大的問題是他們不能100%投入到結(jié)對(duì)編程中去,這樣就影響到了生產(chǎn)力的提高。如果你發(fā)現(xiàn)你遇到了一個(gè)不感興趣或者精力不集中的結(jié)對(duì)伙伴,不煩嘗試一下這幾個(gè)方法,可能能幫到你。

我個(gè)人比較喜歡的對(duì)付精力不集中結(jié)對(duì)伙伴的方法是運(yùn)用乒乓結(jié)對(duì)。乒乓結(jié)對(duì)迫使雙方都同時(shí)關(guān)注同一點(diǎn)。這個(gè)建議的另外一個(gè)好處在于它不需要制訂任 何別的可能帶來副作用的規(guī)定。乒乓結(jié)對(duì)編程可以幫助一個(gè)不感興趣的結(jié)對(duì)伙伴轉(zhuǎn)變成一個(gè)有貢獻(xiàn)的結(jié)對(duì)伙伴。當(dāng)然,通常他們的貢獻(xiàn)跟他們100%專注所應(yīng)有的 貢獻(xiàn)還是有差距的。我發(fā)現(xiàn),當(dāng)你跟一個(gè)精力不集中的結(jié)對(duì)伙伴打交道的時(shí)候,假裝混亂會(huì)更有幫助。

假裝混亂可能很枯燥,真的很枯燥。你一般已經(jīng)知道需要去做什么。通常你腦子里也有了解決方案。你可以獨(dú)自一人實(shí)現(xiàn)這個(gè)方案,而把精力不集中的那 個(gè)結(jié)對(duì)伙伴晾在一邊。不幸的是,根據(jù)我的經(jīng)驗(yàn),人們實(shí)際上往往就是這么干的。但是,簡(jiǎn)單的把他們晾在一邊不是最佳的長期解決方案。那個(gè)結(jié)對(duì)伙伴可能在某天 被要求去改進(jìn)你當(dāng)時(shí)的那個(gè)解決方案。如果他們做不到,因?yàn)樗麄儺?dāng)時(shí)沒關(guān)注過,你可能被從你新的任務(wù)中調(diào)回來解決這個(gè)問題。更糟糕的情況是,你可能已經(jīng)離開 了,那么關(guān)于這段代碼一切情況也就成了永遠(yuǎn)的迷了。

所以,假裝混亂很枯燥,但它對(duì)團(tuán)隊(duì)最有利。不去實(shí)現(xiàn)那個(gè)方案,相反地,你去問你的結(jié)對(duì)伙伴:我們?cè)趺磥硗瓿蛇@個(gè)?不要接受他們的第一個(gè)答案。他 們的第一個(gè)答案很可能很快給出,但難以置信的丑陋。給出些你的觀點(diǎn),但不是告訴他們你有方案了。相反地,一直問問題。這樣很有可能,你將會(huì)慢慢明白他們的 方案了。即使你很快明白了他們的方案也沒關(guān)系,你還是假裝不明白。你得迫使你那個(gè)不感興趣的結(jié)對(duì)伙伴寫出前3個(gè)測(cè)試,并且編寫代碼讓測(cè)試通過。此時(shí),你可 以接過鍵盤,寫些測(cè)試方法,但要求他們來實(shí)現(xiàn)。隨后慢慢地一步步地轉(zhuǎn)入乒乓結(jié)對(duì)的方式,但不要很快地跳過而直接采用乒乓結(jié)對(duì)。你需要迫使你那個(gè)不感興趣的 結(jié)對(duì)伙伴去編寫大概65%的代碼。不用花很長時(shí)間,一個(gè)不感興趣的結(jié)對(duì)伙伴就能轉(zhuǎn)變成一個(gè)100%起作用的結(jié)對(duì)伙伴了。這對(duì)大家都有好處。

檢查語法的結(jié)對(duì)伙伴

智力上的鴻溝可能會(huì)導(dǎo)致一個(gè)伙伴除了做點(diǎn)語法檢查以外其他什么都干不了。過去這些年里我著實(shí)見過很多次了,而且這最近也發(fā)生在了我身上。我接了個(gè)新 工作,在第二天上,我跟公司里最資深的一個(gè)工程師結(jié)對(duì),把他從前給.net寫的一個(gè)庫用java實(shí)現(xiàn)。我對(duì)這個(gè)領(lǐng)域很陌生。我從前也沒做過真正專業(yè)的 java開發(fā)。我從來沒見到過這個(gè)庫的.net版本。我從來沒用過跟這個(gè)庫進(jìn)行交互的通信系統(tǒng)。我從來沒用過IntelliJ來編java程序。等等。

我對(duì)我的結(jié)對(duì)伙伴一點(diǎn)作用都起不上。這個(gè)任務(wù)還相當(dāng)緊迫,我們之間的信息差異實(shí)在太大,所以除了指出點(diǎn)語法錯(cuò)誤之外,我一直都保持安靜。偶爾我也會(huì)敲鍵盤,但也是在結(jié)對(duì)伙伴告訴我要敲些啥的情況下。

雖然我一般都提倡結(jié)對(duì),但是如果一個(gè)人除了語法建議以外什么忙都幫不上,那就該換個(gè)方式來使用他的時(shí)間。另外,如果一個(gè)有經(jīng)驗(yàn)的伙伴被要求把速 度降下來去解釋一些東西,那當(dāng)前的任務(wù)就肯定要多花些時(shí)間才能完成。當(dāng)經(jīng)驗(yàn)上的差距能被彌補(bǔ),這通常來說是最有效的學(xué)習(xí)。當(dāng)然如果經(jīng)驗(yàn)上的差距太大,以至 于沒法彌補(bǔ)或者影響到了成功地交付,那么就應(yīng)該拆散這對(duì)重新組合。

不該結(jié)對(duì)的時(shí)候

有幾種情況下最好不要使用結(jié)對(duì)編程,包括一個(gè)結(jié)對(duì)成員的作用僅僅是檢查語法。另外一些可能更合適你一個(gè)人去搞定的場(chǎng)景包括:

◆當(dāng)讀一個(gè)未來可能有幫助的代碼庫的時(shí)候

◆當(dāng)你和一個(gè)跟你經(jīng)驗(yàn)上差距太大的人一起專研一個(gè)復(fù)雜的解決方案或者查一個(gè)怪異的錯(cuò)誤的時(shí)候。通常結(jié)對(duì)編程不適合既探索問題又帶新人。

記住這些,很重要的,上述情況都不是進(jìn)行結(jié)對(duì)的最好時(shí)機(jī)。但這不意味著你永遠(yuǎn)不應(yīng)該在這些情況下去結(jié)對(duì)。當(dāng)然你如果正在結(jié)對(duì)做這些事情,你應(yīng)該 意識(shí)到你的結(jié)對(duì)伙伴可能不感興趣或者不能產(chǎn)生價(jià)值。要知道一種快速的阻礙團(tuán)隊(duì)引入結(jié)對(duì)編程的方法就是讓一些人去做些不產(chǎn)生價(jià)值的事情。

不是每個(gè)任務(wù)都需要一個(gè)結(jié)對(duì)伙伴的。當(dāng)然,需要結(jié)對(duì)的任務(wù)的數(shù)量遠(yuǎn)遠(yuǎn)多于不需要的。

Dan North在審閱這篇文章的時(shí)候指出:可能不是任務(wù)的數(shù)量,而是任務(wù)的種類。任何跟交付直接相關(guān)的開發(fā)活動(dòng)(編寫代碼,編寫測(cè)試,構(gòu)建)在做了結(jié)對(duì)后往往 都有更好的質(zhì)量。至于那些跟交付間接相關(guān)的,比如研究,調(diào)查和行政瑣事,如果用結(jié)對(duì),那么回報(bào)率就小了很多。所以通常不這么做。

核心結(jié)對(duì)時(shí)段(Core Pairing Hours)

平均而言,你如果覺得結(jié)對(duì)不是最適合你當(dāng)前的問題,那么就立刻停止結(jié)對(duì)。然而,我通過定義每天你有多少小時(shí)預(yù)留著做結(jié)對(duì)編程(核心結(jié)對(duì)時(shí)段)獲得了 不少成功的例子。典型的,核心結(jié)對(duì)時(shí)段是你工作時(shí)間的60%到70%。舉個(gè)例子,如果你從早上8點(diǎn)開始工作到下午5點(diǎn),那么你的核心結(jié)對(duì)時(shí)段可能從早上 10點(diǎn)到下午4點(diǎn)。

在核心結(jié)對(duì)時(shí)段,你不是被要求一定要結(jié)對(duì)工作(你永遠(yuǎn)不應(yīng)該“被要求一定”結(jié)對(duì))。但是你應(yīng)該騰出時(shí)間,做好結(jié)對(duì)的準(zhǔn)備。如果你正在做的事情由 你一個(gè)人來做更好,那就別去結(jié)對(duì)。當(dāng)然,如果你沒在結(jié)對(duì),但結(jié)對(duì)的話更有益,那還猶豫什么呢,或者讓你自己準(zhǔn)備好去跟別的需要結(jié)對(duì)的人一起工作。可能的 話,把一些適合一個(gè)人完成的任務(wù)拖到核心結(jié)對(duì)時(shí)段結(jié)束以后去做,也會(huì)有幫助。舉個(gè)例子,你在下午2點(diǎn)被分派到了一個(gè)中等優(yōu)先級(jí)的錯(cuò)誤,你的結(jié)對(duì)伙伴對(duì)這個(gè) 錯(cuò)誤所用到的庫一無所知,那么你等到4點(diǎn)以后再去看這個(gè)問題可能更加合適一點(diǎn)。

所以說核心結(jié)對(duì)時(shí)段非常不錯(cuò),它讓你的工作時(shí)間有足夠靈活性。

人們反對(duì)結(jié)對(duì)的首要原因是人們“需要自己的時(shí)間”,不可能“每天結(jié)對(duì)8小時(shí)”。這個(gè)反對(duì)意見我總覺得很有意思,因?yàn)槲也徽J(rèn)為大家每天就得結(jié)對(duì)8小 時(shí),我認(rèn)為每個(gè)人都有資格掌握他們自己的時(shí)間。我個(gè)人就傾向于每天70%的時(shí)間做結(jié)對(duì)。我有些朋友傾向于60%,另外些95%。我不確定誰是對(duì)的,但沒人 是100%的。特別是剛剛引入結(jié)對(duì)的階段,很重要的一點(diǎn)就是,一旦覺得結(jié)對(duì)有益,那么就結(jié)對(duì),反之就停止。

做可能管用的最簡(jiǎn)單的事

“做可能管用的最簡(jiǎn)單的事”是一句被大多數(shù)敏捷開發(fā)人員常常掛在嘴邊的話,但想做到卻不容易。如果你做得實(shí)在太簡(jiǎn)單了,你會(huì)被批評(píng)為目光短淺。然而 如果你做得太復(fù)雜,你又會(huì)被說成浪費(fèi)了你自己的時(shí)間和那些需要維護(hù)這個(gè)方案的人的時(shí)間。當(dāng)然,結(jié)對(duì)編程能幫助你,讓你對(duì)你的方案更有信心:簡(jiǎn)單但足夠管 用。

在結(jié)對(duì)過程中,你要有恒心,堅(jiān)持做可能管用的最簡(jiǎn)單的事情。如果你正在結(jié)對(duì),你有可能正在實(shí)現(xiàn)一個(gè)能夠滿足絕大部分使用要求的優(yōu)雅的方案。通過堅(jiān)持做最簡(jiǎn)單的方案,你能更快地完成功能,更快地維護(hù)現(xiàn)有功能。這個(gè)巨大的進(jìn)步會(huì)幫助你推廣你的想法:使用結(jié)對(duì)編程非常棒。

強(qiáng)制執(zhí)行代碼審查

如果你想提高代碼質(zhì)量,就該找團(tuán)隊(duì)成員來審查代碼。實(shí)際上,有些制度(SOX,HIPPA)要求所有產(chǎn)品代碼都得經(jīng)過審查。要是你打算推行結(jié)對(duì)編 程,而且又有一顆聰明的大腦,認(rèn)識(shí)到強(qiáng)制執(zhí)行結(jié)對(duì)很容易失敗,那就不妨強(qiáng)制執(zhí)行代碼審查。在審查的時(shí)候,既可以采取傳統(tǒng)方式,又可以作結(jié)對(duì)。結(jié)對(duì)和代碼審 查之間的主要差別是,后者是評(píng)判,并且表示出某人對(duì)代碼的所有權(quán),同時(shí)令人滋生防備心理;但前者則是協(xié)作。自己的代碼被別人審查通常都是個(gè)很痛苦的過程, 用不了多久大家就會(huì)換成結(jié)對(duì)的。

強(qiáng)制做任何工作都是有風(fēng)險(xiǎn)的,我一般把它作為下下策。

結(jié)論

被人“允許”結(jié)對(duì)不會(huì)取得成功。要想成功的話,就要讓團(tuán)隊(duì)享受結(jié)對(duì)的樂趣,并且從中獲得生產(chǎn)力的提升。如果你從這個(gè)角度來實(shí)施結(jié)對(duì)的話,成功的概率就會(huì)高很多。所以,在你把上面的想法付諸實(shí)踐的時(shí)候,請(qǐng)注重一下團(tuán)隊(duì)建設(shè)和效率。

責(zé)任編輯:佚名 來源: InfoQ
相關(guān)推薦

2015-09-11 08:59:03

結(jié)對(duì)編程

2015-09-11 09:43:27

分析編程特征

2013-01-30 10:03:01

結(jié)對(duì)編程編程語言

2013-05-06 10:22:07

結(jié)對(duì)編程敏捷開發(fā)敏捷管理

2013-11-28 10:22:37

編程結(jié)對(duì)編程

2020-02-07 09:23:17

云遷移混合云云計(jì)算

2023-06-30 11:55:09

人工智能機(jī)器學(xué)習(xí)

2020-02-14 09:30:36

云遷移數(shù)據(jù)中心云計(jì)算

2013-06-20 09:38:57

2023-01-18 23:20:25

編程開發(fā)

2014-03-03 09:48:55

SSHTmux

2013-05-24 09:37:25

結(jié)對(duì)編程結(jié)對(duì)編程實(shí)踐BitBucket

2023-01-10 14:29:34

大數(shù)據(jù)數(shù)據(jù)倉庫

2012-04-10 15:11:26

2020-07-27 09:58:55

數(shù)據(jù)湖數(shù)據(jù)CIO

2023-04-20 18:45:44

2023-07-04 10:26:15

保險(xiǎn)業(yè)數(shù)字化轉(zhuǎn)型

2011-07-26 10:03:11

ITIL實(shí)施ITIL流程認(rèn)證

2016-03-31 11:32:31

DevOps亞馬遜網(wǎng)絡(luò)服務(wù)

2009-06-09 16:24:11

攜程網(wǎng)運(yùn)維管理SiteView
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲视屏 | 亚洲精品91 | 国产欧美在线一区二区 | 欧美精品在线播放 | 国产精品69久久久久水密桃 | 欧美国产中文 | 久久精品久久久久久 | 九九热精品在线视频 | 欧美一级大片免费观看 | 波多野结衣在线观看一区二区三区 | 国产精品a久久久久 | 99精品欧美一区二区三区综合在线 | 一二区视频| 91视频网址 | 成人在线免费网站 | 色黄爽 | 中文字幕色站 | 在线免费观看成年人视频 | 久久中文字幕一区 | 成人在线视频网站 | 草久久免费视频 | 久久精品黄色 | 国产日韩一区二区三免费 | 亚洲国产日韩欧美 | 久久久一区二区三区 | 国产精品久久久久久久久婷婷 | 国产精品久久久久久久久久久久久 | 人人人人干 | 久久久久久久久99精品 | 亚洲精品9999久久久久 | 亚洲一区国产精品 | 精品欧美一区二区三区久久久 | japanhd美女动 | 中文字幕高清免费日韩视频在线 | 亚洲欧美激情精品一区二区 | 毛片com | 91亚洲免费 | 国产高清在线 | 国产99视频精品免视看9 | 精品国产乱码一区二区三区a | 日本三级电影在线观看视频 |