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