<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 (結對編程)

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

    ?

    ? 作者:錢安川(Moxie

    Email:qiananchuan@gmail.com

    我們Pair 做任何一件事情。

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

    pair.gif

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    test cases passed.png

    (圖-1

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

    elapsed time.png

    (圖-2

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

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

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

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

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

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

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

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

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

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

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

    ?

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

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

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

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

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

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

    ?

    參考資料:

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

    聯(lián)系作者:

    Email:qiananchuan@gmail.com

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

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

    評論

    # 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是為了項目開發(fā),那么,除了溝通技能外,兩個人的能力也必須,這個能力主要包括理解需求的能力和發(fā)現(xiàn)問題,分析問題,解決問題的能力。因為,如果pair的兩個人能力差距比較大的話,效果和一個人沒什么兩樣,達不到集思廣益,互相激勵,互相啟發(fā),互相發(fā)現(xiàn)解決問題的效果。  回復  更多評論   

    # 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

    是相當?shù)谋拔ⅲ?nbsp; 回復  更多評論   

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

    看起來非常好,現(xiàn)在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%或更優(yōu),就是在浪費時間  回復  更多評論   


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


    網站導航:
     

    導航

    常用鏈接

    留言簿(2)

    隨筆分類(6)

    隨筆檔案(6)

    搜索

    最新評論

    主站蜘蛛池模板: 亚洲熟妇无码另类久久久| 我要看免费的毛片| 亚洲人成色4444在线观看| 国产亚洲一区区二区在线| 天天拍拍天天爽免费视频| 黄页免费在线观看| 伊人久久国产免费观看视频| 四虎影视大全免费入口| 无码欧精品亚洲日韩一区| 青草草在线视频永久免费| 麻花传媒剧在线mv免费观看| 两性色午夜免费视频| 无人视频免费观看免费视频 | 最新猫咪www免费人成| 免费精品国产自产拍在线观看| 亚洲噜噜噜噜噜影院在线播放| 亚洲国产无套无码av电影| 亚洲熟妇中文字幕五十中出| 国产精品免费小视频| 国产一区二区三区免费在线观看| 欧美最猛性xxxxx免费| 国产一精品一AV一免费孕妇| 亚洲午夜精品一级在线播放放| 男人的天堂av亚洲一区2区| 亚洲欧美综合精品成人导航| 亚洲日本中文字幕天天更新| 另类专区另类专区亚洲| 四虎精品成人免费视频| 在线观看黄片免费入口不卡| 久久久久久久99精品免费| 1000部啪啪毛片免费看| 大陆一级毛片免费视频观看| 国产又大又长又粗又硬的免费视频| 午夜国产大片免费观看| 亚洲乱码精品久久久久..| 亚洲天天在线日亚洲洲精| 亚洲中文字幕一二三四区| 中国在线观看免费的www| 免费看片在线观看| 亚洲无码日韩精品第一页| 亚洲免费精彩视频在线观看|