pair programing是所有XP實(shí)踐中爭議最大的一個(gè),但竊以為確實(shí)XP實(shí)施的關(guān)鍵關(guān)鍵實(shí)踐之一,甚至于,我認(rèn)為很多XP實(shí)施的失敗都是由于沒有采用pair programming而造成的。
要了解pair為什么重要,就要了解pair的目的在何。當(dāng)然了,大多數(shù)人都知道pair的重點(diǎn)在于知識傳遞,知識共享,持續(xù)走查,降低代碼缺陷等等等等。這些都是pair的優(yōu)點(diǎn),不過最重要的一點(diǎn)卻常常被忽略——pair programing的最直接而又最根本的目的之一在于simple design。



上圖是著名的Ron Jefferies Model,可以看到XP最佳實(shí)踐被劃分成了一個(gè)一個(gè)的圓圈,而pair, TDD, refactor和simple design位于中心。這并不是說這四個(gè)實(shí)踐就是xp的核心。jefferies model每一圈代表了xp實(shí)踐過程中的不同關(guān)注點(diǎn),最中心的是dev視角,其次是team視角,最外層是交付/管理視角。每圈上的最佳時(shí)間多少都有些緊耦合,放開其他的不講,我們專門說說dev圈,pair programing, tdd, refactor和simple design。

這四個(gè)實(shí)踐里只有simple design最虛也最重要。有一個(gè)問題已經(jīng)被問過無數(shù)次了,“到底多simple的design才叫simple”。我對此也有一個(gè)近乎刻板的回答:team里所有人員都能夠理解的design就是simple的。一旦立了標(biāo)準(zhǔn),這四個(gè)實(shí)踐的主從關(guān)系就一下子清晰起來——simple design是這四個(gè)實(shí)踐的核心,其他三個(gè)實(shí)踐都是它服務(wù)的。

首先做出一個(gè)設(shè)計(jì),最簡單的判斷標(biāo)準(zhǔn)就是是否可測,一個(gè)不可測的設(shè)計(jì)基本上可以認(rèn)為無法實(shí)現(xiàn),于是TDD即是simple design的質(zhì)量保證又是simple design的直覺驗(yàn)證。

refactor是為了得到好的代碼,那么什么是好的代碼?simple design!!!這里有人不同意了,有人說只是要易于修改和擴(kuò)展,可是擴(kuò)展和修改也要?jiǎng)e人看得懂才行啊...simple design是起碼的要求嘛。實(shí)際上,XP中的refactor就是朝著simple design的方向重構(gòu)過去的,也就是朝著所有人都能理解的代碼refactor過去的。插一句題外話,為啥說好的架構(gòu)的不是設(shè)計(jì)出來的呢?因?yàn)楹玫募軜?gòu)至少應(yīng)該是simple design的,而simple的概念有和人員相關(guān)...所以當(dāng)你極盡能事show off你的pattern知識之后,得到復(fù)雜設(shè)計(jì)根本就不可能是好的架構(gòu)。時(shí)刻緊記,架構(gòu)是妥協(xié)啊...

最后,pair programming是simple design的實(shí)際檢驗(yàn)!!!因?yàn)榧幢闶亲顝?fù)雜的設(shè)計(jì),只要是你自己想出來的,你都覺得它簡單無比,里面充滿了直白且顯而易見的理由。可惜不幸的是,我們要的簡單,是對team里所有人的簡單。如果你的pair不能理解你的設(shè)計(jì),那么說明你的設(shè)計(jì)復(fù)雜了;如果你們兩個(gè)人懂,但是swith pair的時(shí)候,換過來的人不懂,說明你的設(shè)計(jì)復(fù)雜了。pair programming(以及他那容易讓人忽略的子實(shí)踐switching pair)就是檢驗(yàn)simple design的過程。pair programing + refactor就是時(shí)刻保證simple design防止過渡設(shè)計(jì)反攻倒算的過程。pair programming + refactor + tdd就是團(tuán)結(jié)在以Deming同學(xué)built quality in的質(zhì)量大旗下,堅(jiān)定地與過渡設(shè)計(jì)做斗爭的過程。據(jù)我觀察,至沒有使用pair programming的團(tuán)隊(duì)中,少一半simple design成了口號,而這一半中,至少又有一半最終放棄了xp放棄了敏捷(俺以前帶過的團(tuán)隊(duì)就有這樣的...默哀一下)。深刻的教訓(xùn)啊,我們來高呼一下:"pair programming是檢驗(yàn)simple design的唯一標(biāo)準(zhǔn)!"。

最后說一下pair programming經(jīng)濟(jì)學(xué),過多的假設(shè)我就不講了。單說一點(diǎn),有哪一位上班的8小時(shí)從來不上msn/yahoo/qq等im?有哪一位上班從來不上論壇/不回貼/不發(fā)郵件?以我pair的經(jīng)驗(yàn)來看,pair programming的過程中,兩個(gè)人幾乎不會用im,幾乎不會逛論壇。你不好意思呀,畢竟不是你一個(gè)人的機(jī)器,畢竟是兩個(gè)人的時(shí)間,畢竟你也不愿意給同事一種懶散的印象吧?收回的這么浪費(fèi)的時(shí)間,至少頂?shù)眠^另外一個(gè)人的工作時(shí)間了吧?