<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ā)表于《程序員雜志》第九期,略有刪改)

    ?

    ? 作者:錢安川(Moxie

    Email:qiananchuan@gmail.com

    我們Pair 做任何一件事情。

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

    pair.gif

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

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

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

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

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

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

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

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

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

    二、Pair 是知識(shí)傳播的最好途徑。 很多軟件公司都建立有自己的知識(shí)庫(kù),有的還建立自己的培訓(xùn)部門,甚至高薪聘請(qǐng)一些專家做技術(shù)培訓(xùn)。但發(fā)現(xiàn)效果并不理想。培訓(xùn)之后,開發(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ì)里,大家很樂意互相協(xié)助,一起分享知識(shí),分享快樂。

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

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

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

    ? 軟件的本質(zhì)就是很難用一種標(biāo)準(zhǔn)去衡量它的進(jìn)度和實(shí)效性。開發(fā)人員能力的高與低、經(jīng)驗(yàn)的多與少、工作的主動(dòng)與被動(dòng),對(duì)軟件開發(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ì)和開發(fā)了測(cè)試案例)。

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

    test cases passed.png

    (圖-1

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

    elapsed time.png

    (圖-2

    而且,在具體項(xiàng)目中。Pair會(huì)帶來(lái)比上面結(jié)果更高的價(jià)值。一、在實(shí)際開發(fā)中,如果錯(cuò)誤越多,就要花費(fèi)越多的時(shí)間去修復(fù)它。在我們的試驗(yàn)中,沒有統(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ì)開發(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í)候更專著,緊湊和由紀(jì)律的工作,而且是持續(xù)的。而獨(dú)立工作的學(xué)生也可以專著和緊湊的工作,但往往不持續(xù)。

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

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

    ?

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

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

    不,Pair對(duì)開發(fā)者是有要求的。它要求開發(fā)者樂意和別人溝通、合作,要求開發(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)豐富的開發(fā)者有責(zé)任帶領(lǐng)新人,傳知授道解惑,同時(shí)可以享受傳道的樂趣。新人,更應(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,其中的感覺也就不用多說(shuō)了,呵呵。

    ?

    參考資料:

    http://www.pairprogramming.com/ 這是一個(gè)專門介紹和研究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 閱讀(12537) 評(píng)論(19)  編輯  收藏 所屬分類: 敏捷開發(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

    我覺得,如果pair的目的是為了帶新人,那么,能力不用相當(dāng)只要溝通技能就可以了;但是,如果pair是為了項(xiàng)目開發(fā),那么,除了溝通技能外,兩個(gè)人的能力也必須,這個(gè)能力主要包括理解需求的能力和發(fā)現(xiàn)問(wèn)題,分析問(wèn)題,解決問(wèn)題的能力。因?yàn)椋绻鹥air的兩個(gè)人能力差距比較大的話,效果和一個(gè)人沒什么兩樣,達(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

    從沒體驗(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,其中的感覺也就不用多說(shuō)了,呵呵"
    是不是感覺自己有點(diǎn)卑微  回復(fù)  更多評(píng)論   

    # re: Pair Programming (結(jié)對(duì)編程)[未登錄] 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ì)編程)[未登錄] 2008-12-09 21:19 james

    沒有任何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ì)精神,但是,他們卻沒有團(tuán)隊(duì)的感覺  回復(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ì)編程)[未登錄] 2012-05-27 21:07 Ryan

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

    # re: Pair Programming (結(jié)對(duì)編程)[未登錄] 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)

    隨筆分類(6)

    隨筆檔案(6)

    搜索

    最新評(píng)論

    主站蜘蛛池模板: 亚洲男人的天堂网站| 欧洲亚洲国产清在高| 国产精品久久免费视频| 国外成人免费高清激情视频| 天天摸天天碰成人免费视频| 午夜毛片不卡高清免费| 日本免费一本天堂在线| 免费人成在线观看网站视频| 亚洲人成电影在线播放| 中文字幕亚洲图片| 亚洲va久久久噜噜噜久久| 亚洲国产精品lv| 亚洲午夜久久久久久尤物| 一本色道久久88亚洲精品综合 | 国产成人啪精品视频免费网| 国产极品粉嫩泬免费观看| 亚洲AⅤ优女AV综合久久久| 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲精品无码不卡在线播放| 亚洲成a人片在线不卡一二三区| 国产区图片区小说区亚洲区| 国产va免费精品| 1000部羞羞禁止免费观看视频| 免费v片在线观看视频网站| 成人免费看黄20分钟| 亚洲成年人啊啊aa在线观看| 亚洲色欲色欲www在线丝| 91嫩草私人成人亚洲影院| 亚洲乱码在线观看| 曰韩无码AV片免费播放不卡| 97在线视频免费公开视频| 97国产在线公开免费观看| 午夜爱爱免费视频| 亚洲中文字幕不卡无码| 亚洲欧洲精品一区二区三区| 亚洲av无码专区在线观看亚| 精品国产免费人成网站| 希望影院高清免费观看视频| 亚洲国产成人精品91久久久| 亚洲av无码乱码国产精品| 日本亚洲色大成网站www久久|