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

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

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

    Software Development Culture

    將軟件文化進行到底

     

    Pair Programming (結對編程)

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

    ?

    ? 作者:錢安川(Moxie

    Email:qiananchuan@gmail.com

    我們Pair 做任何一件事情。

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

    pair.gif

    我的第一次PairPair Programming的簡稱,即結對編程。后面都是用Pair代替)是在ThoughtWorks公司面試進行的。那次,他們來自英國的項目經理Andy面試我,和我一起進行PairAndy問我以前是否Pair過,我說:“沒有,這是我第一次Pair”。隨即他就告訴我:“It’s very fun.(它非常有趣)。”

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

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

    Andy的引導下,我慢慢的進入了角色。充分理解業務之后,也就清楚了該如何寫業務代碼。我從Andy那里要了鍵盤,又寫了幾段代碼。然后運行單元測試,綠色狀態,測試成功。Andy微笑的向我豎起了大拇指。

    受到鼓勵的我,這是已完全放松進入狀態。我們又試著完成了幾個功能。這時,我們已經不只覺的渡過了2.5個小時。Pair確實是一件非常有趣的事。

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

    這些天的Pair生活,讓我深深體會到了Pair的優點。

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

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

    二、Pair 是知識傳播的最好途徑。 很多軟件公司都建立有自己的知識庫,有的還建立自己的培訓部門,甚至高薪聘請一些專家做技術培訓。但發現效果并不理想。培訓之后,開發人員面臨實際的項目,還是一片茫然。而與有經驗的同事一起Pair則是在實際項目中學習,具有非常強的針對性。你學到的不僅是一些技術和技巧,更多是他們思考問題方式、解決問題的方法。和各種不同經驗的同事一起Pair,你的經驗和能力可以得到快速的提高。

    ThoughtWorks公司,如果你要加入一個項目,完全不用擔心它使用的技術和涉及的業務。只要你有一定的基礎,和有經驗的同事一起Pair能讓你很快熟悉和掌握它們。

    三、Pair 可以打造出最佳的合作團隊。 團隊是有組織有計劃的,合理有效地利用各種資源,進行最佳的組合。Pair并不是一對固定的伙伴,我們鼓勵在團隊中經常交換Pair伙伴。這時我們發現,項目不再是一個人的事情,也不是兩個人的事情,而是整個團隊的事情。

    通過Pair,大家可以在最短的時間內完成磨合。Pair很好的促進了團隊的溝通交流,經常一起合作Pair的伙伴,彼此了解、熟悉,很多都是工作和生活上的好友。在這樣的團隊里,大家很樂意互相協助,一起分享知識,分享快樂。

    ? 在聽過我們一番熱情洋溢的闡述之后,某些項目管理者會點頭并且認可Pair帶來的力量。但,我們也聽到了一些拒絕Pair的聲音。下面是我們聽到的拒絕Pair的最主要的理由,當然也包括了我們的辯解。

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

    ? 可是,作為老板的你可曾做過統計過,每天加班工作12小時,滿臉疲憊的開發人員到底為你創造了多少的價值?在這漫長的12小時中,能高效工作的時間又能有多少呢?一個開發人員每天編寫幾百行的代碼,可是真正具有實效性的代碼又有多少呢?

    ? 軟件的本質就是很難用一種標準去衡量它的進度和實效性。開發人員能力的高與低、經驗的多與少、工作的主動與被動,對軟件開發的成本有非常大的影響。前期糟糕的代碼,在后期修正,是需要付出幾倍甚至更多的代價。在軟件的行業里,人月和代碼行永遠是神話。

    1999年,猶他州立大學(University of Utah)做了一項試驗。.兩組學生,一組獨自工作(一共13人),一組Pair(一共28人,即14對)。他們完成相同的任務(由助教預先設計和開發了測試案例)。

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

    test cases passed.png

    (圖-1

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

    elapsed time.png

    (圖-2

    而且,在具體項目中。Pair會帶來比上面結果更高的價值。一、在實際開發中,如果錯誤越多,就要花費越多的時間去修復它。在我們的試驗中,沒有統計修復錯誤所花費的時間。二、從圖-1可以看出,Pair在產生高質量代碼時,也即意味著對需求的準確理解。個人團隊對需求理解偏差比較大,后期也要花費更大的代價來糾正。三、從圖-2可以看到,Pair的團隊開發能力提高很快,這是潛在的價值。

    在比較試驗之后的問卷調查之后發現:

    ü????? Pair能用較少的時間生產更高質量的代碼。

    ü????? Pair的學生們認為自己比一個人的時候更勤奮和更聰明的工作,因為不想讓自己的partner失望。

    ü????? Pair的學生認為自己比一個人的時候更專著,緊湊和由紀律的工作,而且是持續的。而獨立工作的學生也可以專著和緊湊的工作,但往往不持續。

    ü????? 在緊張時間安排和繁重的工作壓力下,獨自工作的學生很容易蛻變為沒有紀律的程序員。

    ? 同時,在ThoughtWorks這樣的咨詢公司,每個開發者都是能夠獨擋一面。ThoughtWorks的開發者,在一般的軟件公司都是類似項目經理或架構師的角色。你可以想象公司肯定要為他們提供不翡的待遇。可是,他們卻Pair做任何一件事情,也從不認為自己是在浪費資源。相反,ThoughtWorks從實踐中得出:Pair能夠充分的利用每個開發者,讓他們發揮最大的價值。

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

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

    而在Pair工作的團隊中,幾乎不用擔心這個問題。Pair可以快速的進行知識傳遞,通過PairPair伙伴的交換,知識不再是掌握在一個人的手中,而是整個團隊一起共享。

    ThoughtWorks內部,工作的調整和變換是非常頻繁的。但很少會對項目造成影響。相反,這樣的變換卻加快了知識的傳遞。

    ?

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

    那任何兩個人都可以搭配進行Pair嗎?

    不,Pair對開發者是有要求的。它要求開發者樂意和別人溝通、合作,要求開發者能夠彼此尊重,愿意和別人分享自己的知識。這不正是我們一直倡導的團隊合作精神嘛!

    Pair的搭配是一個有趣的問題。有人說,最好的搭配就是兩個人能力相當。其實不然,Pair應該是一種多樣的變換組合。在Pair的團隊中,經驗豐富的開發者有責任帶領新人,傳知授道解惑,同時可以享受傳道的樂趣。新人,更應主動找有經驗的伙伴Pair,快速學習提高自己。Pair的核心就是溝通,只要兩個人能很好的進行溝通,那么他們就可以很好的搭配。

    關于Pair的實施,其實并不困難。我們需要的只是經驗,當然經驗也只會來源于實踐。

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

    ?

    參考資料:

    http://www.pairprogramming.com/ 這是一個專門介紹和研究Pair的一個網站

    聯系作者:

    Email:qiananchuan@gmail.com

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

    posted on 2006-09-14 17:53 moxie 閱讀(12538) 評論(19)  編輯  收藏 所屬分類: 敏捷開發方法

    評論

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

    我們公司要能這樣就好了  回復  更多評論   

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

    重要的是找到一個合適的pair  回復  更多評論   

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

    重要的是找到一個漂亮MM做我的pair  回復  更多評論   

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

    我覺得,如果pair的目的是為了帶新人,那么,能力不用相當只要溝通技能就可以了;但是,如果pair是為了項目開發,那么,除了溝通技能外,兩個人的能力也必須,這個能力主要包括理解需求的能力和發現問題,分析問題,解決問題的能力。因為,如果pair的兩個人能力差距比較大的話,效果和一個人沒什么兩樣,達不到集思廣益,互相激勵,互相啟發,互相發現解決問題的效果。  回復  更多評論   

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

    panqr,說得很很對。溝通,也就是需要有一定的理解、分析、解決問題的能力。在公司,我們鼓勵經常Switch Pair。所以,你需要經常和公司的每一個在一起工作的同事Pair  回復  更多評論   

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

    從沒體驗過敏捷過程的我,只有羨慕的份  回復  更多評論   

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

    這篇文章對我的論文幫助很大:)  回復  更多評論   

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

    呵呵,pair是愉快的工作方式  回復  更多評論   

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

    "最后,我要說的是:我在ThoughtWorks中國,有幸多次和傳說中的美女天才程序員一起Pair,其中的感覺也就不用多說了,呵呵"
    是不是感覺自己有點卑微  回復  更多評論   

    # re: Pair Programming (結對編程)[未登錄] 2008-03-10 10:06 moxie

    是非常卑微。哈哈哈哈!  回復  更多評論   

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

    是相當的卑微,哈哈  回復  更多評論   

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

    看起來非常好,現在ThoughtWorks中國招人否?深圳有Office嗎?  回復  更多評論   

    # re: Pair Programming (結對編程)[未登錄] 2008-12-09 21:19 james

    沒有任何pair基礎的公司不知要經過多久才能適應!  回復  更多評論   

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

    @panqr
    像外行一樣思考,才能想到更新奇的點子。  回復  更多評論   

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

    與美女pair才是關鍵  回復  更多評論   

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

    公司都要求有團隊精神,但是,他們卻沒有團隊的感覺  回復  更多評論   

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

    我正在我們公司,我們組推進pair programming  回復  更多評論   

    # re: Pair Programming (結對編程)[未登錄] 2012-05-27 21:07 Ryan

    我們公司也正好要嘗試實行Pair,看了此帖后我更加有信心了  回復  更多評論   

    # re: Pair Programming (結對編程)[未登錄] 2013-12-19 16:54 luke

    效率不能達到50%或更優,就是在浪費時間  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    常用鏈接

    留言簿(2)

    隨筆分類(6)

    隨筆檔案(6)

    搜索

    最新評論

    主站蜘蛛池模板: 一区二区免费国产在线观看| 亚洲AV无码XXX麻豆艾秋| 巨胸喷奶水www永久免费| 全部免费国产潢色一级| 亚洲人成色77777在线观看| 免费99精品国产自在现线| 亚洲精品国产精品国自产网站 | 麻豆狠色伊人亚洲综合网站| 亚洲日本在线免费观看| 亚洲成a人片在线观看中文!!! | 成人免费a级毛片无码网站入口 | 国产美女精品视频免费观看 | 131美女爱做免费毛片| 久久久婷婷五月亚洲97号色 | 日本一区二区免费看| 亚洲丁香色婷婷综合欲色啪| 91视频免费网址| 亚洲一级黄色大片| 日本成人免费在线| 伊人久久国产免费观看视频| 亚洲人成色777777在线观看 | 成人免费福利电影| 国产精品亚洲专区无码不卡| 亚洲国产成人久久精品99| 久久免费国产精品| 久久亚洲私人国产精品| 97在线观免费视频观看| 香蕉视频免费在线播放| 在线观看亚洲av每日更新| 特级精品毛片免费观看| 国产猛男猛女超爽免费视频| 亚洲成人免费在线| 成人免费无码大片A毛片抽搐| 日韩大片在线永久免费观看网站| 国产亚洲人成网站观看| 91免费播放人人爽人人快乐| 亚洲AV无码资源在线观看| 亚洲精品国偷自产在线| 搡女人真爽免费视频大全| 成av免费大片黄在线观看| 亚洲天堂一区在线|