<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Software Development Culture

    將軟件文化進(jìn)行到底

     

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

    (本文發(fā)表于《程序員雜志》第九期,略有刪改)

    ?

    ? 作者:錢(qián)安川(Moxie

    Email:qiananchuan@gmail.com

    我們Pair 做任何一件事情。

    ??????????????????????????????????????????? ? ——ThoughtWorks 西安Office

    pair.gif

    我的第一次PairPair Programming的簡(jiǎn)稱(chēng),即結(jié)對(duì)編程。后面都是用Pair代替)是在ThoughtWorks公司面試進(jìn)行的。那次,他們來(lái)自英國(guó)的項(xiàng)目經(jīng)理Andy面試我,和我一起進(jìn)行Pair。Andy問(wèn)我以前是否Pair過(guò),我說(shuō):“沒(méi)有,這是我第一次Pair”。隨即他就告訴我:“It’s very fun.(它非常有趣)。”

    就這樣,開(kāi)始了我的第一次Pair,也是加入TW最重要的一輪面試。其實(shí),剛開(kāi)始很不習(xí)慣,我那可憐的英語(yǔ)口語(yǔ),陌生的測(cè)試優(yōu)先開(kāi)發(fā)(TDD Test Driven Development? 一種軟件開(kāi)發(fā)方式,先寫(xiě)單元測(cè)試代碼,再寫(xiě)業(yè)務(wù)代碼。我以前也寫(xiě)過(guò)很多單元測(cè)試,但從沒(méi)有測(cè)試優(yōu)先)。當(dāng)我看到需求文檔時(shí),大腦幾乎是一片空白,不知從何處下手。

    但面試總不能就這樣放棄吧。我又仔細(xì)看了一遍文檔,嘗試著寫(xiě)了幾段業(yè)務(wù)代碼。做在我旁邊的Andy搖了搖頭,從我手里拿了鍵盤(pán)。他說(shuō)應(yīng)該這樣做,先寫(xiě)測(cè)試代碼。于是他一邊和我解釋業(yè)務(wù)需求,一邊寫(xiě)測(cè)試代碼。并提醒我,如何去對(duì)一個(gè)復(fù)雜的功能進(jìn)行分解,并且小步伐的前進(jìn)。

    Andy的引導(dǎo)下,我慢慢的進(jìn)入了角色。充分理解業(yè)務(wù)之后,也就清楚了該如何寫(xiě)業(yè)務(wù)代碼。我從Andy那里要了鍵盤(pán),又寫(xiě)了幾段代碼。然后運(yùn)行單元測(cè)試,綠色狀態(tài),測(cè)試成功。Andy微笑的向我豎起了大拇指。

    受到鼓勵(lì)的我,這是已完全放松進(jìn)入狀態(tài)。我們又試著完成了幾個(gè)功能。這時(shí),我們已經(jīng)不只覺(jué)的渡過(guò)了2.5個(gè)小時(shí)。Pair確實(shí)是一件非常有趣的事。

    進(jìn)入ThoughtWorks公司之后,發(fā)現(xiàn)在大家不僅Pair編程,還Pair研究技術(shù),Pair撰寫(xiě)文章,Pair翻譯,等等。只要是Pair能完成的工作,我們就不一個(gè)人完成。甚至在生活中也出現(xiàn)了很多Pair的影子。在我們的西安Office里流傳這樣一句話:“我們Pair做任何一件事情”。兩個(gè)人Pair,可以一起一起分享工作樂(lè)趣,一起承擔(dān)工作壓力。

    這些天的Pair生活,讓我深深體會(huì)到了Pair的優(yōu)點(diǎn)。

    一、Pair 可以最大化的提高工作效率。 軟件開(kāi)發(fā)并不只是程序員堆砌代碼的過(guò)程,它更多的是一個(gè)創(chuàng)新的過(guò)程,是一個(gè)發(fā)現(xiàn)問(wèn)題、分析問(wèn)題、解決問(wèn)題的過(guò)程。一個(gè)人編程時(shí),往往有了一絲零碎的想法就開(kāi)始編寫(xiě)代碼。寫(xiě)完代碼之后,忽然發(fā)現(xiàn)這個(gè)方案行不通,只好廢棄這些代碼,重新開(kāi)始新的想法。當(dāng)一個(gè)人在遇到疑難問(wèn)題時(shí),很容易走入“死角”。而Pair則不同,一個(gè)人有了想法,首先要表達(dá)出來(lái),讓自己的同伴理解,經(jīng)過(guò)深刻的討論,一致認(rèn)可之后才開(kāi)始編寫(xiě)代碼。一個(gè)人編寫(xiě)代碼,另一個(gè)則在旁邊思考,會(huì)為下一步的工作提出建設(shè)性的意見(jiàn)。發(fā)現(xiàn)了問(wèn)題可以及時(shí)的指正。大大的提高了代碼質(zhì)量。

    一個(gè)人一天有效工作時(shí)間不超過(guò)34個(gè)小時(shí)。兩個(gè)人一起Pair。一個(gè)人編寫(xiě)代碼,另一個(gè)人則從設(shè)計(jì)的角度思考下一步的工作,有了想法之后,互相討論,再互換角色。在開(kāi)發(fā)過(guò)程中,設(shè)計(jì)思考和編碼實(shí)現(xiàn)不停的進(jìn)行交換,保持了良好的開(kāi)發(fā)節(jié)奏。同時(shí)可以互相督促,使彼此更加認(rèn)真的工作。遇到問(wèn)題和壓力時(shí),可以一起面對(duì),互相鼓勵(lì)??梢砸黄鸱窒斫鉀Q問(wèn)題的成就和樂(lè)趣。

    二、Pair 是知識(shí)傳播的最好途徑。 很多軟件公司都建立有自己的知識(shí)庫(kù),有的還建立自己的培訓(xùn)部門(mén),甚至高薪聘請(qǐng)一些專(zhuān)家做技術(shù)培訓(xùn)。但發(fā)現(xiàn)效果并不理想。培訓(xùn)之后,開(kāi)發(fā)人員面臨實(shí)際的項(xiàng)目,還是一片茫然。而與有經(jīng)驗(yàn)的同事一起Pair則是在實(shí)際項(xiàng)目中學(xué)習(xí),具有非常強(qiáng)的針對(duì)性。你學(xué)到的不僅是一些技術(shù)和技巧,更多是他們思考問(wèn)題方式、解決問(wèn)題的方法。和各種不同經(jīng)驗(yàn)的同事一起Pair,你的經(jīng)驗(yàn)和能力可以得到快速的提高。

    ThoughtWorks公司,如果你要加入一個(gè)項(xiàng)目,完全不用擔(dān)心它使用的技術(shù)和涉及的業(yè)務(wù)。只要你有一定的基礎(chǔ),和有經(jīng)驗(yàn)的同事一起Pair能讓你很快熟悉和掌握它們。

    三、Pair 可以打造出最佳的合作團(tuán)隊(duì)。 團(tuán)隊(duì)是有組織有計(jì)劃的,合理有效地利用各種資源,進(jìn)行最佳的組合。Pair并不是一對(duì)固定的伙伴,我們鼓勵(lì)在團(tuán)隊(duì)中經(jīng)常交換Pair伙伴。這時(shí)我們發(fā)現(xiàn),項(xiàng)目不再是一個(gè)人的事情,也不是兩個(gè)人的事情,而是整個(gè)團(tuán)隊(duì)的事情。

    通過(guò)Pair,大家可以在最短的時(shí)間內(nèi)完成磨合。Pair很好的促進(jìn)了團(tuán)隊(duì)的溝通交流,經(jīng)常一起合作Pair的伙伴,彼此了解、熟悉,很多都是工作和生活上的好友。在這樣的團(tuán)隊(duì)里,大家很樂(lè)意互相協(xié)助,一起分享知識(shí),分享快樂(lè)。

    ? 在聽(tīng)過(guò)我們一番熱情洋溢的闡述之后,某些項(xiàng)目管理者會(huì)點(diǎn)頭并且認(rèn)可Pair帶來(lái)的力量。但,我們也聽(tīng)到了一些拒絕Pair的聲音。下面是我們聽(tīng)到的拒絕Pair的最主要的理由,當(dāng)然也包括了我們的辯解。

    一、 Pair 浪費(fèi)資源。 以前是一個(gè)人完成的工作,而現(xiàn)在卻是由兩個(gè)人一起完成。一個(gè)人在寫(xiě)程序,而另一個(gè)卻在旁邊觀望。為開(kāi)發(fā)人員支付報(bào)酬的老板是多么心疼那些白花花的銀子。

    ? 可是,作為老板的你可曾做過(guò)統(tǒng)計(jì)過(guò),每天加班工作12小時(shí),滿臉疲憊的開(kāi)發(fā)人員到底為你創(chuàng)造了多少的價(jià)值?在這漫長(zhǎng)的12小時(shí)中,能高效工作的時(shí)間又能有多少呢?一個(gè)開(kāi)發(fā)人員每天編寫(xiě)幾百行的代碼,可是真正具有實(shí)效性的代碼又有多少呢?

    ? 軟件的本質(zhì)就是很難用一種標(biāo)準(zhǔn)去衡量它的進(jìn)度和實(shí)效性。開(kāi)發(fā)人員能力的高與低、經(jīng)驗(yàn)的多與少、工作的主動(dòng)與被動(dòng),對(duì)軟件開(kāi)發(fā)的成本有非常大的影響。前期糟糕的代碼,在后期修正,是需要付出幾倍甚至更多的代價(jià)。在軟件的行業(yè)里,人月和代碼行永遠(yuǎn)是神話。

    1999年,猶他州立大學(xué)(University of Utah)做了一項(xiàng)試驗(yàn)。.兩組學(xué)生,一組獨(dú)自工作(一共13人),一組Pair(一共28人,即14對(duì))。他們完成相同的任務(wù)(由助教預(yù)先設(shè)計(jì)和開(kāi)發(fā)了測(cè)試案例)。

    下面的表格(圖-1)是完成相同的四個(gè)程序,獨(dú)自工作和Pair工作使測(cè)試案例成功通過(guò)的百分比。

    test cases passed.png

    (圖-1

    下面的柱狀圖(圖-2)則是完成相同的程序,兩組所花費(fèi)的時(shí)間比。雖然Pair的學(xué)生在剛開(kāi)始的階段比獨(dú)自工作的學(xué)生花在同樣任務(wù)的時(shí)間較多,但很快Pair的學(xué)生的時(shí)間開(kāi)始大幅度的下降。而獨(dú)立工作的學(xué)生需要花費(fèi)比Pairs更多的時(shí)間來(lái)達(dá)到接近的代碼質(zhì)量。

    elapsed time.png

    (圖-2

    而且,在具體項(xiàng)目中。Pair會(huì)帶來(lái)比上面結(jié)果更高的價(jià)值。一、在實(shí)際開(kāi)發(fā)中,如果錯(cuò)誤越多,就要花費(fèi)越多的時(shí)間去修復(fù)它。在我們的試驗(yàn)中,沒(méi)有統(tǒng)計(jì)修復(fù)錯(cuò)誤所花費(fèi)的時(shí)間。二、從圖-1可以看出,Pair在產(chǎn)生高質(zhì)量代碼時(shí),也即意味著對(duì)需求的準(zhǔn)確理解。個(gè)人團(tuán)隊(duì)對(duì)需求理解偏差比較大,后期也要花費(fèi)更大的代價(jià)來(lái)糾正。三、從圖-2可以看到,Pair的團(tuán)隊(duì)開(kāi)發(fā)能力提高很快,這是潛在的價(jià)值。

    在比較試驗(yàn)之后的問(wèn)卷調(diào)查之后發(fā)現(xiàn):

    ü????? Pair能用較少的時(shí)間生產(chǎn)更高質(zhì)量的代碼。

    ü????? Pair的學(xué)生們認(rèn)為自己比一個(gè)人的時(shí)候更勤奮和更聰明的工作,因?yàn)椴幌胱屪约旱?/span>partner失望。

    ü????? Pair的學(xué)生認(rèn)為自己比一個(gè)人的時(shí)候更專(zhuān)著,緊湊和由紀(jì)律的工作,而且是持續(xù)的。而獨(dú)立工作的學(xué)生也可以專(zhuān)著和緊湊的工作,但往往不持續(xù)。

    ü????? 在緊張時(shí)間安排和繁重的工作壓力下,獨(dú)自工作的學(xué)生很容易蛻變?yōu)闆](méi)有紀(jì)律的程序員。

    ? 同時(shí),在ThoughtWorks這樣的咨詢公司,每個(gè)開(kāi)發(fā)者都是能夠獨(dú)擋一面。ThoughtWorks的開(kāi)發(fā)者,在一般的軟件公司都是類(lèi)似項(xiàng)目經(jīng)理或架構(gòu)師的角色。你可以想象公司肯定要為他們提供不翡的待遇??墒?,他們卻Pair做任何一件事情,也從不認(rèn)為自己是在浪費(fèi)資源。相反,ThoughtWorks從實(shí)踐中得出:Pair能夠充分的利用每個(gè)開(kāi)發(fā)者,讓他們發(fā)揮最大的價(jià)值。

    ? 二、人手不夠。 也許,在你的公司,昨天又有一個(gè)老員工遞交了辭職申請(qǐng)。老板看著一張張新的面孔,很無(wú)奈的搖了搖頭。招聘員工并不困難。但如何讓新員工快速進(jìn)入角色,掌握公司的技術(shù)和業(yè)務(wù)呢?

    ??? 人員的流動(dòng)一直是讓很多軟件公司非常困擾的問(wèn)題。特別是老員工的離去,也就意味著公司多年的技術(shù)和業(yè)務(wù)積累的流失。

    而在Pair工作的團(tuán)隊(duì)中,幾乎不用擔(dān)心這個(gè)問(wèn)題。Pair可以快速的進(jìn)行知識(shí)傳遞,通過(guò)PairPair伙伴的交換,知識(shí)不再是掌握在一個(gè)人的手中,而是整個(gè)團(tuán)隊(duì)一起共享。

    ThoughtWorks內(nèi)部,工作的調(diào)整和變換是非常頻繁的。但很少會(huì)對(duì)項(xiàng)目造成影響。相反,這樣的變換卻加快了知識(shí)的傳遞。

    ?

    三、開(kāi)發(fā)者不能很好的合作,Pair 對(duì)開(kāi)發(fā)者要求太高。 真的要求很高嗎?看看求職簡(jiǎn)歷,不是每個(gè)開(kāi)發(fā)者都口口聲稱(chēng)自己具有很好的團(tuán)隊(duì)合作精神嗎?如果你不能很好的和別人Pair,團(tuán)隊(duì)精神又從何談起呢?

    那任何兩個(gè)人都可以搭配進(jìn)行Pair嗎?

    不,Pair對(duì)開(kāi)發(fā)者是有要求的。它要求開(kāi)發(fā)者樂(lè)意和別人溝通、合作,要求開(kāi)發(fā)者能夠彼此尊重,愿意和別人分享自己的知識(shí)。這不正是我們一直倡導(dǎo)的團(tuán)隊(duì)合作精神嘛!

    Pair的搭配是一個(gè)有趣的問(wèn)題。有人說(shuō),最好的搭配就是兩個(gè)人能力相當(dāng)。其實(shí)不然,Pair應(yīng)該是一種多樣的變換組合。在Pair的團(tuán)隊(duì)中,經(jīng)驗(yàn)豐富的開(kāi)發(fā)者有責(zé)任帶領(lǐng)新人,傳知授道解惑,同時(shí)可以享受傳道的樂(lè)趣。新人,更應(yīng)主動(dòng)找有經(jīng)驗(yàn)的伙伴Pair,快速學(xué)習(xí)提高自己。Pair的核心就是溝通,只要兩個(gè)人能很好的進(jìn)行溝通,那么他們就可以很好的搭配。

    關(guān)于Pair的實(shí)施,其實(shí)并不困難。我們需要的只是經(jīng)驗(yàn),當(dāng)然經(jīng)驗(yàn)也只會(huì)來(lái)源于實(shí)踐。

    最后,我要說(shuō)的是:我在ThoughtWorks中國(guó),有幸多次和傳說(shuō)中的美女天才程序員一起Pair,其中的感覺(jué)也就不用多說(shuō)了,呵呵。

    ?

    參考資料:

    http://www.pairprogramming.com/ 這是一個(gè)專(zhuān)門(mén)介紹和研究Pair的一個(gè)網(wǎng)站

    聯(lián)系作者:

    Email:qiananchuan@gmail.com

    http://moxie.blogdriver.com/moxie/index.html

    posted on 2006-09-14 17:53 moxie 閱讀(12538) 評(píng)論(19)  編輯  收藏 所屬分類(lèi): 敏捷開(kāi)發(fā)方法

    評(píng)論

    # re: Pair Programming (結(jié)對(duì)編程) 2006-09-14 19:38 wxslime

    我們公司要能這樣就好了  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程) 2006-09-14 22:46 stoneshao

    重要的是找到一個(gè)合適的pair  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程) 2006-09-15 07:42 Anubis

    重要的是找到一個(gè)漂亮MM做我的pair  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程) 2006-09-15 12:09 panqr

    我覺(jué)得,如果pair的目的是為了帶新人,那么,能力不用相當(dāng)只要溝通技能就可以了;但是,如果pair是為了項(xiàng)目開(kāi)發(fā),那么,除了溝通技能外,兩個(gè)人的能力也必須,這個(gè)能力主要包括理解需求的能力和發(fā)現(xiàn)問(wèn)題,分析問(wèn)題,解決問(wèn)題的能力。因?yàn)?,如果pair的兩個(gè)人能力差距比較大的話,效果和一個(gè)人沒(méi)什么兩樣,達(dá)不到集思廣益,互相激勵(lì),互相啟發(fā),互相發(fā)現(xiàn)解決問(wèn)題的效果。  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程) 2006-09-15 13:16 moxie

    panqr,說(shuō)得很很對(duì)。溝通,也就是需要有一定的理解、分析、解決問(wèn)題的能力。在公司,我們鼓勵(lì)經(jīng)常Switch Pair。所以,你需要經(jīng)常和公司的每一個(gè)在一起工作的同事Pair  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程) 2006-09-15 14:07 dennis

    從沒(méi)體驗(yàn)過(guò)敏捷過(guò)程的我,只有羨慕的份  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程) 2006-10-17 13:34 jane

    這篇文章對(duì)我的論文幫助很大:)  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程) 2007-03-01 23:24 溫柔一刀

    呵呵,pair是愉快的工作方式  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程) 2008-03-10 09:21 :)

    "最后,我要說(shuō)的是:我在ThoughtWorks中國(guó),有幸多次和傳說(shuō)中的美女天才程序員一起Pair,其中的感覺(jué)也就不用多說(shuō)了,呵呵"
    是不是感覺(jué)自己有點(diǎn)卑微  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程)[未登錄](méi) 2008-03-10 10:06 moxie

    是非常卑微。哈哈哈哈!  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程) 2008-03-19 16:40 Jukka

    是相當(dāng)?shù)谋拔?,哈?nbsp; 回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程) 2008-10-27 14:51 weisai

    看起來(lái)非常好,現(xiàn)在ThoughtWorks中國(guó)招人否?深圳有Office嗎?  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程)[未登錄](méi) 2008-12-09 21:19 james

    沒(méi)有任何pair基礎(chǔ)的公司不知要經(jīng)過(guò)多久才能適應(yīng)!  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程) 2009-02-18 20:41 toto233

    @panqr
    像外行一樣思考,才能想到更新奇的點(diǎn)子。  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程) 2011-11-14 17:44 TOGOO

    與美女pair才是關(guān)鍵  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程) 2011-12-05 11:38 chs

    公司都要求有團(tuán)隊(duì)精神,但是,他們卻沒(méi)有團(tuán)隊(duì)的感覺(jué)  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程) 2012-01-11 23:01 hot13399@163.com

    我正在我們公司,我們組推進(jìn)pair programming  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程)[未登錄](méi) 2012-05-27 21:07 Ryan

    我們公司也正好要嘗試實(shí)行Pair,看了此帖后我更加有信心了  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程)[未登錄](méi) 2013-12-19 16:54 luke

    效率不能達(dá)到50%或更優(yōu),就是在浪費(fèi)時(shí)間  回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    常用鏈接

    留言簿(2)

    隨筆分類(lèi)(6)

    隨筆檔案(6)

    搜索

    最新評(píng)論

    主站蜘蛛池模板: 国产亚洲视频在线观看| 性感美女视频在线观看免费精品| 亚洲精品福利你懂| 国产成人A人亚洲精品无码| 四虎影视大全免费入口| 亚洲性线免费观看视频成熟 | 1000部夫妻午夜免费| 一级做a爱片特黄在线观看免费看| 亚洲影视自拍揄拍愉拍| 中文字幕亚洲综合精品一区| 国产成人精品日本亚洲专区61| 日本午夜免费福利视频| 曰曰鲁夜夜免费播放视频| 最近2022中文字幕免费视频 | 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲av无码成人影院一区| 亚洲精品国产福利在线观看| 亚洲精品无码永久在线观看你懂的| 又大又黄又粗又爽的免费视频| 成人毛片18女人毛片免费96| 青草草色A免费观看在线| 69精品免费视频| 99re这里有免费视频精品| 国产成人一区二区三区视频免费| 中文字幕无码免费久久9一区9| 无码 免费 国产在线观看91| 免费大片黄在线观看| 国产亚洲精品2021自在线| 国产精品无码亚洲精品2021| 理论亚洲区美一区二区三区| 亚洲av永久中文无码精品| 噜噜综合亚洲AV中文无码| 豆国产96在线|亚洲| 国产亚洲精品美女久久久久| 色费女人18女人毛片免费视频| 国产亚洲精品91| 狠狠躁狠狠爱免费视频无码| 中文字幕手机在线免费看电影 | 亚洲伊人成无码综合网| 亚洲国产另类久久久精品黑人| 亚洲精品无码专区在线在线播放|