回歸結(jié)對(duì)編程
當(dāng)被問(wèn)及提高代碼質(zhì)量的***方法時(shí),我一般回答是:代碼審查。代碼審查是***的減少 bug 的方法。但我更喜歡的是 —— 結(jié)對(duì)編程。
我這一生中,很少進(jìn)行結(jié)對(duì)編程,當(dāng)然非正式的除外(例如和別人一起解決bug)。在 Typemock 工作的時(shí)候,我大部分時(shí)間都在改 bug,沒(méi)有特定的做法,也沒(méi)有人指導(dǎo)應(yīng)該怎么合作,僅僅是隨意地和不同的人解決不同的問(wèn)題。
最近我又接觸到了結(jié)對(duì)編程,我現(xiàn)在的感覺(jué)和以前完全不同。我更加注重這個(gè)過(guò)程,而以前的我僅僅對(duì)結(jié)果感興趣。
以下是我最近總結(jié)的一些要點(diǎn)。大部是作為專家的拍檔的角度來(lái)說(shuō),有些也從主導(dǎo)人的角度。
氛圍. 開(kāi)始一段工作的時(shí)候,你大概可以估摸到事情會(huì)怎樣發(fā)展。你有多投入,你的拍檔有多投入,你們對(duì)問(wèn)題和代碼有多熟悉,這些都很重要。你們***能做到多好,決定于你們的開(kāi)始。
耐性. 這是說(shuō)給急性子聽(tīng)的。我不知道以前自己是不是有耐心,但是現(xiàn)在我真的需要下大功夫去培養(yǎng)一下耐心。當(dāng)我是主導(dǎo)人的時(shí)候,我常常需要不厭其煩地對(duì)拍檔作出巨細(xì)無(wú)遺的解釋。
靜心聆聽(tīng),不要一味反駁. 當(dāng)我不是主導(dǎo)人的時(shí)候,我會(huì)一次又一次地要求主導(dǎo)人解釋他的方案是怎樣解決問(wèn)題的。當(dāng)然,我需要安靜地聽(tīng)他講解,才能聽(tīng)明白。但是,要我一聲不吭的,太難了。
不當(dāng)沉默的羔羊. 當(dāng)我不是主導(dǎo)人的時(shí)候,我常常在心里衡量,要不要提出我的疑問(wèn)。說(shuō)出來(lái)的話,怕他會(huì)笑我笨。沉默的話,的確不會(huì)引來(lái)嘲笑。但是我還是常常逼著自己提問(wèn),一般這樣開(kāi)頭:“可能是我太笨,但是我不太明白……”。結(jié)果,有時(shí)候我們會(huì)就這個(gè)問(wèn)題討論下去,有時(shí)候拍檔則會(huì)像看傻瓜一樣看著我。
態(tài)度很重要. 我自己的態(tài)度固然重要,但是拍檔的態(tài)度也很大程度上影響了結(jié)果。例如,當(dāng)我不是主導(dǎo)人的時(shí)候,對(duì)方有些言語(yǔ)和舉動(dòng)使我感覺(jué)到自己好像拖慢了進(jìn)度。我經(jīng)常告訴自己不要那樣想。當(dāng)我是主導(dǎo)人的時(shí)候,我盡量控制自己的言行舉止,以免拍檔誤會(huì)。當(dāng)主導(dǎo)人與不,都難啊。
拍檔也是很重要的. 無(wú)論是菜鳥(niǎo)還是高手,都沒(méi)有***的拍檔,只有最適合的拍檔。有時(shí)候,你不能選擇和誰(shuí)合作,但你的拍檔總有值得你學(xué)習(xí)的地方。
學(xué)會(huì)協(xié)商. 即使是這個(gè)層面的合作,也脫離不了付出和收獲的關(guān)系。你需要根據(jù)進(jìn)度決定什么時(shí)候討論相應(yīng)的話題,從命名到測(cè)試點(diǎn)。你的拍檔可能同意,或者不同意,又或者與你擊掌歡呼。失敗總是存在的,做好心理準(zhǔn)備吧。
缺少爭(zhēng)論. 當(dāng)帶領(lǐng)一個(gè)新手的時(shí)候,我說(shuō)出來(lái)的話好像都是對(duì)的,像是無(wú)可厚非的事實(shí)。這實(shí)際上是非常危險(xiǎn)的。我們應(yīng)該鼓勵(lì)人們發(fā)問(wèn),對(duì)我們的觀點(diǎn)提出疑問(wèn)和建議??墒牵芏鄷r(shí)候即使我的假設(shè)是錯(cuò)的,我還是很難放棄我觀點(diǎn)。
結(jié)對(duì)編程不僅僅是一種開(kāi)發(fā)的手段,它更是一種技巧,需要不斷地改進(jìn),并應(yīng)用到實(shí)踐中去。即使多花點(diǎn)時(shí)間也是值得的,就像單元測(cè)試一樣。當(dāng)然,結(jié)對(duì)編程也需要有一些準(zhǔn)則:即使尷尬也要提問(wèn);當(dāng)你確信自己的觀點(diǎn)是對(duì)的時(shí)候要大膽地提出來(lái);為了大局,有時(shí)候需要妥協(xié)一下。

























