讓結(jié)對(duì)編程更有效的十種方法
如果你回憶一下自己結(jié)對(duì)編程(pair programming) 的經(jīng)歷,有多少次你能感覺到自己效率和能力的提升呢?又有多少次你為不愉快的經(jīng)歷而煩惱?
結(jié)對(duì)編程為軟件開發(fā)團(tuán)隊(duì)(不管他們是否采用敏捷過程)帶來的好處已經(jīng)廣為人知,但是要有效的實(shí)施結(jié)對(duì)編程,不僅需要團(tuán)隊(duì)的成員相信結(jié)對(duì)編程的益處,更重要的是,他們要全身心的投入。
怎樣才能讓結(jié)對(duì)編程更有效呢??jī)H僅是兩個(gè)人共同完成一個(gè)任務(wù)并不意味著那是一次有效的結(jié)對(duì)經(jīng)歷。除了完成任務(wù),結(jié)對(duì)編程也是增進(jìn)你和其他團(tuán)隊(duì)成員之 間關(guān)系的好機(jī)會(huì)。你們可以互相學(xué)習(xí),不僅僅是技術(shù),也可以多了解一下彼此國(guó)家和民族的文化。你也可以了解一下他們的追求,他們?yōu)槭裁闯錆M斗志,又為什么垂 頭喪氣。
Marcos Brizeno,一個(gè)在巴西的ThoughtWorker, 在他的一篇博文中提到了結(jié)對(duì)編程中會(huì)碰到的挑戰(zhàn):
-
編程環(huán)境:結(jié)對(duì)編程中要使用相同的硬件和軟件
-
疲勞:結(jié)對(duì)編程中每個(gè)人都要保持高度的注意力
-
自尊心:當(dāng)你的想法不被接受時(shí),需要保持虛心,避免不必要的爭(zhēng)吵
好吧,我也沒有什么靈丹妙藥能讓結(jié)對(duì)成為更加神奇的體驗(yàn),不過在這里我還是有幾點(diǎn)建議,讓大家可以更好的面對(duì)Marcos提到的那些挑戰(zhàn):
#1 -不要讓一個(gè)人霸占鍵盤
結(jié)對(duì)編程中,對(duì)開發(fā)環(huán)境更熟悉的那個(gè)人經(jīng)常會(huì)長(zhǎng)時(shí)間掌控著鍵盤。另一方也覺得如果他寫代碼的話會(huì)拖慢進(jìn)度。這樣做的壞處就是,任務(wù)結(jié)束的時(shí)候,對(duì)開 發(fā)環(huán)境不熟悉的那個(gè)人沒有多少進(jìn)步,他依舊不熟悉這個(gè)開發(fā)環(huán)境。對(duì)此,我們的解決辦法是設(shè)定鬧鐘,時(shí)間到了就互換,雙方輪流寫代碼。
#2 -要共同管理注意力
出于多種原因,結(jié)對(duì)中的一個(gè)人可能會(huì)比另一個(gè)人更能集中注意力。當(dāng)這種情況發(fā)生時(shí),如果你是能集中注意力的一方,你要停下來和另一方討論這個(gè)問題。讓你的另一半自己恢復(fù)他/她的注意力可能要花很久的時(shí)間,你自己也可能因此喪失注意力。番茄工作法 之類的竅門可以幫忙提升注意力,但你***還是和對(duì)方共同討論來找到***解決辦法。
#3 -不要一個(gè)人干活
有時(shí)你的另一半需要離開一會(huì)。這時(shí),你要停下手頭的活,盡量等她/他/它回來。在等待時(shí),你可以做點(diǎn)其他有益于項(xiàng)目或公司的事情,也可以處理一下自 己的雜事。當(dāng)然,有時(shí)也要看具體情況。如果情況緊急,你不能停下來,那當(dāng)你的另一半回來時(shí),你要把自己?jiǎn)为?dú)做的那一部分解釋清楚。
#4 -要有勞有逸
干活的時(shí)候集中注意力很重要,但是過度集中注意力是有害的。畢竟我們都不是機(jī)器人,誰也不能連干八個(gè)小時(shí)不帶休息。所以我們還是需要間斷的休息時(shí) 間。休息的時(shí)候完全不要想工作的事情,也盡量保持兩個(gè)人在一起,比如討論個(gè)大家都關(guān)心的話題,一起打打游戲,一起喝杯咖啡之類的。
#5 -要慶祝你們的成就!
在任務(wù)每一階段結(jié)束的時(shí)候,或者每次結(jié)對(duì)結(jié)束的時(shí)候,你們要好好回顧一下自己的成就,要給自己一點(diǎn)激勵(lì)。好好慶祝吧!跟其他同事分享一下你們的成果也不錯(cuò)。
#6 -要和你的同伴保持同步
很自然的,有時(shí)一個(gè)人比另一個(gè)人對(duì)任務(wù)了解的更深入。這有可能造成兩個(gè)人的節(jié)奏不同步,以至不愉快的經(jīng)歷。如果你了解的更多,你要及時(shí)意識(shí)到這一 點(diǎn),控制你的節(jié)奏,讓你的同伴跟上。必要時(shí),停下你手頭的工作,好好解釋一下。同樣,如果你是跟不上趟的那個(gè)人,要及時(shí)提出來。讓你的同伴慢下來,好好跟 你解釋他/她到底在做什么,以及為什么這么做。記住,溝通是必須的。
#7 -要使用合適的交流方式
在交流時(shí),要使用結(jié)對(duì)編程的兩個(gè)人都能理解的語言。很難想象你能準(zhǔn)確的理解一個(gè)句子,如果你連句子里的單詞都不認(rèn)識(shí)。所以,請(qǐng)盡量用簡(jiǎn)單直白的描述。如果有幫助的話,不妨在紙上把自己的想法畫出來。你也可以找別人幫忙,如果他能把問題解釋得更清楚。
#8-要學(xué)會(huì)處理分歧
在結(jié)對(duì)編程的過程中,分歧是經(jīng)常會(huì)有的。面對(duì)分歧時(shí),雙方都應(yīng)該先仔細(xì)聽取對(duì)方的觀點(diǎn),然后用平靜和尊重對(duì)方的語氣闡述自己的觀點(diǎn)。這時(shí)侯,最忌諱 的就是盲目自信。你要試著從對(duì)方的角度看待問題,這會(huì)讓你發(fā)現(xiàn)自己遺漏了的地方。不要把這變成一場(chǎng)誰對(duì)誰錯(cuò)的爭(zhēng)斗,你也沒必要在每次辯論時(shí)都成為獲勝的那 一方。如果雙方實(shí)在沒有辦法達(dá)成一致的觀點(diǎn),那就試著找別的同事幫忙做個(gè)選擇。
#9 -既要作學(xué)生,也要作老師
就算你才剛剛加入一個(gè)新的項(xiàng)目,所知不多,你也能立刻作出自己的貢獻(xiàn)。同樣的,如果你和一個(gè)剛剛加入項(xiàng)目的新手結(jié)對(duì),你也要留給他/她發(fā)揮自己能力 的空間。多問些啟發(fā)式的問題,逐步的解釋你們的任務(wù),在潛移默化中讓你的同伴自己找到解決方案。此時(shí)你需要扮演的是一個(gè)良師益友的角色。
#10 -要及時(shí)提供和接受反饋
在結(jié)對(duì)結(jié)束的時(shí)候,要抓緊機(jī)會(huì)給對(duì)方一些意見和建議,再拖一陣,你的印象就模糊了。不用搞得太正式,15到30分鐘足夠了。你可以評(píng)價(jià)一下和他/她 結(jié)對(duì)的感覺如何,他/她有什么需要繼續(xù)保持或改進(jìn)的地方。如果你趕時(shí)間,至少也要把自己的想法記錄下來,然后等有合適的機(jī)會(huì)轉(zhuǎn)達(dá)給你的同伴。
***,值得一提的是,我在這里提供的竅門都是我以前和其他 ThoughtWorker 結(jié)對(duì)編程時(shí)收到的建議。這些不是什么金科玉律,你就當(dāng)作我給你的建議好了。
那么,現(xiàn)在輪到你給我提建議了。你有什么更好的辦法來應(yīng)付結(jié)對(duì)編程中的各種挑戰(zhàn)嗎?歡迎拍磚。
原文:http://insights.thoughtworkers.org/10-ways-improve-your-pairing-experience/