Agile占业,Pair Programming 1+1>n

Pair Programming.jpg

Pair Programming - 結(jié)對(duì)編程,敏捷中非常重要的一項(xiàng)實(shí)踐纯赎。

之前參與的幾個(gè)項(xiàng)目谦疾,都有結(jié)對(duì)編程的實(shí)踐。而我現(xiàn)在所參與的一個(gè)項(xiàng)目犬金,是從項(xiàng)目開始到現(xiàn)在的一兩個(gè)月時(shí)間里念恍,嚴(yán)格按照結(jié)對(duì)編程的方式來進(jìn)行開發(fā)的,并且每天會(huì)輪換(Pair Rotation佑附,可以用這個(gè)工具 - Parrit)樊诺。這一兩個(gè)月的時(shí)間里面仗考,讓我對(duì)結(jié)對(duì)編程有了更深刻的理解和認(rèn)識(shí)音同。拋開結(jié)對(duì)編程理論里面說的好處,我想記錄分享一下最近這段時(shí)間在我們團(tuán)隊(duì)里面真實(shí)發(fā)生的一些關(guān)于結(jié)對(duì)編程的故事和體會(huì)到的好處秃嗜。

  • 1+1 = 0.8
    一談到Pair Programming权均,很多人都會(huì)提出疑問,為什么一個(gè)人可以干的工作要兩個(gè)人一起做锅锨?兩個(gè)人一起結(jié)對(duì)工作的效率是多少呢(1+1會(huì)不會(huì)等于2)叽赊?會(huì)不會(huì)是浪費(fèi)Resource?
    這個(gè)項(xiàng)目中developer有四個(gè)人必搞,團(tuán)隊(duì)成員對(duì)這個(gè)項(xiàng)目的MVP(Minimum Viable Product) 過了一邊之后必指,想要做一個(gè)簡(jiǎn)單的預(yù)估。有同事就提到恕洲,我們采用結(jié)對(duì)的方式開發(fā)塔橡,預(yù)計(jì)開發(fā)資源的效率為1 + 1 = 0.8,也就是說霜第,兩個(gè)人結(jié)對(duì)編程葛家,最后的結(jié)果是0.8個(gè)人。這個(gè)預(yù)估可能是憑以前項(xiàng)目的經(jīng)驗(yàn)得出來的泌类。

  • 1 + 1 > 2
    我們是從幾個(gè)不同的團(tuán)隊(duì)抽出來的resource組成現(xiàn)在這個(gè)開發(fā)團(tuán)隊(duì)的癞谒,團(tuán)隊(duì)合作默契或者其他一些因素,而且團(tuán)隊(duì)成員一半是沒有實(shí)踐過結(jié)對(duì)編程的,所以剛開始開發(fā)的效率一般弹砚。但不久后的一段時(shí)間双仍,有幾天我覺得我們的效率是明顯的1 + 1 > 2的。也就是兩個(gè)人結(jié)對(duì)編程桌吃,最后的產(chǎn)出比兩個(gè)人單獨(dú)進(jìn)行更多殊校。

  • 1 + 1 > n
    最近,我已經(jīng)不想跟2進(jìn)行比較了读存,1 + 1 > n为流,n是3呢,還是4呢让簿,還是更大的數(shù)字敬察?我覺得我沒辦法給出具體的數(shù)字,因?yàn)閺拈_發(fā)效率上講尔当,絕對(duì)是大于2的莲祸,如果再長遠(yuǎn)考慮對(duì)團(tuán)隊(duì)和公司的益處,這個(gè)數(shù)字可能會(huì)很大椭迎。

結(jié)對(duì)編程的好處

從預(yù)估的1 + 1 = 0.8锐帜,到1 + 1 > 2,再到1 + 1 > n的這個(gè)過程畜号,我體會(huì)到了很多結(jié)對(duì)編程的好處缴阎。

  • 快速學(xué)習(xí)新知識(shí)
    我之前做的項(xiàng)目都是用Java寫的,對(duì)Node.js并不熟悉简软,跟同事一起結(jié)對(duì)蛮拔,很快就基本掌握了Node.js以及其他一些不熟悉的技能。團(tuán)隊(duì)中的同事也很快學(xué)習(xí)到了寫單元測(cè)試痹升、TDD建炫、重構(gòu)、IDE快捷鍵的使用等等疼蛾。
  • 工作更加專注肛跌、效率高
    一個(gè)人工作的時(shí)候,很容易被IM察郁、微信衍慎、電話、郵件等信息打擾绳锅。每次中斷西饵,再開始,都需要時(shí)間重新進(jìn)入狀態(tài)鳞芙,對(duì)工作效率影響很大眷柔。我們用固定的兩臺(tái)機(jī)器來進(jìn)行Pair期虾,我電腦基本處于鎖屏狀態(tài),手機(jī)基本上都不知道丟哪個(gè)角落了驯嘱,有同事錯(cuò)過了好幾個(gè)快遞電話镶苞。(所以這段時(shí)間如果各種消息沒有及時(shí)回復(fù)還請(qǐng)見諒)。Pair的時(shí)候鞠评,我們比以前更加專注茂蚓,自然效率就高很多。
    我還發(fā)現(xiàn)一個(gè)很有趣的現(xiàn)象剃幌,就在前幾天聋涨,當(dāng)我跟一個(gè)同事pair開發(fā)一個(gè)新feature的時(shí)候,我腦海里思考著這個(gè)功能應(yīng)該怎么去做负乡,思緒越想越復(fù)雜牍白,我當(dāng)時(shí)靠著椅子上抱著自己的腦袋,而另外一個(gè)同事沒有想那么多抖棘,直接就開始寫了茂腥,后面我才發(fā)現(xiàn),自己當(dāng)時(shí)想得過于復(fù)雜切省,我們很快的把那個(gè)feature完成了最岗。如果,我們不是pair的形式開發(fā)朝捆,當(dāng)我陷入這種思考的時(shí)候般渡,可能會(huì)有一段比較長的時(shí)間都是在思考。這種情況也發(fā)生在其他同事身上右蹦。其實(shí)每個(gè)人的技能诊杆、知識(shí)、想法都不一樣何陆,有時(shí)候自己覺得難的,沒有頭緒的豹储,可能是自己想的過于復(fù)雜了贷盲,其他同事可能覺得簡(jiǎn)單, 反過來也是一樣。當(dāng)我們結(jié)對(duì)編程的時(shí)候,就好像一起爬山掏膏,你拉我一把兄一,我拉你一把,很快就爬上了山頂鸿市,而不是在某塊石頭前面一直徘徊。
  • 被打斷之后,很快速的能接上
    工作過程中鞠鲜,難免有同事被其他事情打斷宁脊,當(dāng)他處理完再回來的時(shí)候,可以簡(jiǎn)單的和自己的partner溝通一下贤姆,就能很快進(jìn)入狀態(tài)榆苞。
  • 信息共享
    通過每天的Pair Rotation,我們每個(gè)人對(duì)項(xiàng)目所有事情都有一定的了解霞捡。任何一對(duì)Pair都可以去做任何一個(gè)Story坐漏。
  • 代碼質(zhì)量更高
    一個(gè)人開發(fā)feature的時(shí)候,基于進(jìn)度的壓力或者自己的惰性碧信,有時(shí)候雖然知道自己寫的代碼存在隱患或者不夠clean赊琳,但很容易心里會(huì)出現(xiàn)這樣的想法:算了吧,先這樣吧砰碴,問題不大慨畸,單元測(cè)試以后再加等等。這樣的代碼上到production之后出問題或者以后的同事來做修改的時(shí)候衣式,都需要花費(fèi)多很多的時(shí)間寸士。
    兩個(gè)人一起Pair的時(shí)候,第一碴卧,當(dāng)跟其他同事一起pair的時(shí)候弱卡,惰性沒那么大,也不想留下一些隱患住册;第二婶博,假如自己真的不想去改,自己的partner可能會(huì)主導(dǎo)來改荧飞, 當(dāng)partner改的時(shí)候凡人,自己又很容易加入一起改了,最終實(shí)現(xiàn)讓代碼存在的隱患消失并且代碼更加整潔等等很多方面的好處叹阔。
    對(duì)以后的影響挠轴,也是我考慮1 + 1 > n n可能會(huì)很大的一個(gè)因素。

怎么結(jié)對(duì)編程

在結(jié)對(duì)編程的過程中耳幢,我們經(jīng)常會(huì)有不愉快的情況出現(xiàn)岸晦,特別是在項(xiàng)目開始的前一段時(shí)間,現(xiàn)在已經(jīng)有了很大的改善睛藻,我們的效率也噌噌噌的上漲启上。在這個(gè)轉(zhuǎn)變的過程中,我對(duì)怎么結(jié)對(duì)編程有了更深的理解店印。

  • 說話技巧
    程序員冈在,公認(rèn)的情商比較低。所以在一些溝通交流技巧方面按摘,大家都不太擅長包券。在我們Pair的過程中纫谅,經(jīng)常會(huì)出現(xiàn)下面的對(duì)話情景:
    A: 你這里寫錯(cuò)了,你這里不能這樣兴使,你這里不熟的話系宜,我來寫。
    這段話有什么問題呢发魄?可能現(xiàn)在看起來沒什么問題盹牧,但在pair的時(shí)候,自己的partner聽到這樣的話會(huì)影響情緒励幼。Pair的時(shí)候要站在團(tuán)隊(duì)的層次汰寓,一對(duì)Pair不要分你我,寫出來的代碼都是一起的苹粟。不能歸咎于個(gè)人有滑。我們可以這樣說:
    A: (我們)這里寫錯(cuò)了,(我們)這里不能這樣嵌削,我們可以這樣試一下毛好,(我們)這樣寫會(huì)不會(huì)更好。
    可以不說我們苛秕,但最好不要一直說你你你的肌访。
    還有一種情況:
    A: 我告訴你這樣不行,我說了這樣不行艇劫,你還不信...balabala吼驶。(語氣比較強(qiáng)硬)
    在pair的過程中, 經(jīng)常有一方認(rèn)為自己是對(duì)的店煞,聲音會(huì)很大聲蟹演,感覺要證明自己是對(duì)的,對(duì)方是錯(cuò)的顷蟀,并且要壓倒對(duì)方酒请。
    每個(gè)人都有很強(qiáng)的自尊心,溝通的時(shí)候衩椒,一定不要情緒很大蚌父,這樣會(huì)讓對(duì)方不舒服。盡量用委婉一點(diǎn)毛萌,讓對(duì)方更容易接受的語言來溝通。

  • “自我犧牲”
    每個(gè)人都有不同的想法喝滞,Pair的時(shí)候阁将,經(jīng)常會(huì)意見不同。舉個(gè)很簡(jiǎn)單的例子右遭,對(duì)一個(gè)方法命名或者一段代碼的實(shí)現(xiàn)方式做盅,如果自己的想法和Partner的差不多缤削,或者對(duì)方的雖然會(huì)差一點(diǎn)點(diǎn)但沒啥影響,這個(gè)時(shí)候吹榴,可以簡(jiǎn)單表達(dá)出自己的想法亭敢,然后傾向于采用partner的方式。而不是努力去證明自己的更好图筹,對(duì)方的不好帅刀。當(dāng)然,假如對(duì)方的想法是錯(cuò)的远剩,或者影響很大的時(shí)候扣溺,還是要提出來。當(dāng)雙方都保持這種“自我犧牲”的心態(tài)的時(shí)候瓜晤,也許對(duì)方聽取了你的建議之后锥余,也會(huì)建議采用你的方法。

  • 學(xué)習(xí)的心態(tài)
    每個(gè)人的技能痢掠、知識(shí)會(huì)不一樣驱犹,有些方面自己比Partner強(qiáng),有些方面自己比Partner弱足画,要時(shí)刻保持可以從對(duì)方身上學(xué)習(xí)到Partner強(qiáng)處的心態(tài)雄驹。千萬不要想著要證明自己更強(qiáng),而不好意思承認(rèn)自己某些方面不如其他人锌云。

  • 切換Driver 和 Navigator
    Pair的時(shí)候會(huì)更加專注荠医,會(huì)更加累。經(jīng)常性的切換Driver和Navigator會(huì)讓Pair的整體效率更高桑涎。就好像開長途汽車彬向,經(jīng)常輪換著開,會(huì)讓車子一直保持高速前進(jìn)攻冷,并且更加安全娃胆。

  • 信任
    跟團(tuán)隊(duì)比賽一樣,一定要相信自己的隊(duì)友等曼。就算他某些地方不強(qiáng)里烦,當(dāng)你很信任他的時(shí)候,并在必要的時(shí)候給一些好的建議禁谦,會(huì)讓團(tuán)隊(duì)Pair的效率提高很多胁黑。

  • 聽取partner的意見
    出現(xiàn)不同意見的時(shí)候,不要搶著鍵盤一意孤行的按照自己的想法去實(shí)現(xiàn)州泊。多尊重一下自己的Partner丧蘸,或許他的方法會(huì)更好。假如他的方法差不多遥皂,可以用前面提到的“自我犧牲”采用對(duì)方的方式力喷。

  • 給自己的partner鼓掌
    當(dāng)一起克服了困難刽漂,或者效率很高的時(shí)候,(最近有幾個(gè)story弟孟,一眨眼的功夫就完成了贝咙,比我預(yù)期的快很多)。給自己的Partner鼓掌拂募,雖然可能是一起完成的庭猩,甚至是自己的貢獻(xiàn)更大,都沒關(guān)系没讲,一對(duì)Pair眯娱,不分你我。給予對(duì)方肯定和贊美爬凑,非常利于團(tuán)隊(duì)合作徙缴,對(duì)提升Pair效率幫助很大。而且大家一起工作會(huì)很開心嘁信。

  • 嚴(yán)格采用結(jié)對(duì)的方式
    很多時(shí)候于样,大家會(huì)提出問題:結(jié)對(duì)編程又很多好處,但是不需要一直結(jié)對(duì)編程吧潘靖。有些簡(jiǎn)單的東西穿剖,一個(gè)人來做就好了。
    在團(tuán)隊(duì)開始采用結(jié)對(duì)編程的開始階段卦溢,也就是結(jié)對(duì)編程經(jīng)驗(yàn)不夠豐富或者體會(huì)還不深刻的時(shí)候糊余,我建議團(tuán)隊(duì)還是嚴(yán)格按照結(jié)對(duì)的方式,不管團(tuán)隊(duì)中要做的時(shí)候是簡(jiǎn)單的還是復(fù)雜的单寂,都嚴(yán)格結(jié)對(duì)來做贬芥。如果一件事情很簡(jiǎn)單,那就一起結(jié)對(duì)很快速的完成宣决,或者說那天的工作就輕松一點(diǎn)蘸劈。而且經(jīng)常我們對(duì)簡(jiǎn)單困難的把控其實(shí)是不夠的,開始認(rèn)為簡(jiǎn)單的事情尊沸,不一定真的簡(jiǎn)單威沫。
    其實(shí),少一點(diǎn)時(shí)間浪費(fèi)在思考某件事情要不要結(jié)對(duì)編程洼专,直接嚴(yán)格采用結(jié)對(duì)編程的方式棒掠,會(huì)簡(jiǎn)單暴力點(diǎn)。長期來說屁商,對(duì)團(tuán)隊(duì)及個(gè)人都是有很大的幫助的句柠。
    所以,我的建議是棒假,最好嚴(yán)格一點(diǎn)溯职,直接采用結(jié)對(duì)的方式,不需要考慮做的事情是什么帽哑。

總結(jié)

以上是這段時(shí)間的一些體會(huì)谜酒。如果你所在的團(tuán)隊(duì)還沒有采用結(jié)對(duì)編程,建議可以嘗試一下妻枕,可以先小范圍僻族,但嚴(yán)格結(jié)對(duì)的方式來開始。如果你所在的團(tuán)隊(duì)結(jié)對(duì)編程的效率不高屡谐,可以參考一下我上面所說的一些細(xì)節(jié)述么。
我們Pair效率提升的過程中,我也體會(huì)到Retrospective和Feedback的重要性愕掏,后期我會(huì)整理一篇關(guān)于這兩方面的文章分享出來度秘。

歡迎大家一起交流:jani.peng@qq.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市饵撑,隨后出現(xiàn)的幾起案子剑梳,更是在濱河造成了極大的恐慌,老刑警劉巖滑潘,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垢乙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡语卤,警方通過查閱死者的電腦和手機(jī)追逮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粹舵,“玉大人钮孵,你說我怎么就攤上這事∑胗ぃ” “怎么了油猫?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柠偶。 經(jīng)常有香客問我情妖,道長,這世上最難降的妖魔是什么诱担? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任毡证,我火速辦了婚禮,結(jié)果婚禮上蔫仙,老公的妹妹穿的比我還像新娘料睛。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布恤煞。 她就那樣靜靜地躺著屎勘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪居扒。 梳的紋絲不亂的頭發(fā)上概漱,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音喜喂,去河邊找鬼瓤摧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛玉吁,可吹牛的內(nèi)容都是我干的照弥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼进副,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼这揣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起敢会,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤曾沈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鸥昏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塞俱,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年吏垮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了障涯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膳汪,死狀恐怖唯蝶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遗嗽,我是刑警寧澤粘我,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站痹换,受9級(jí)特大地震影響征字,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娇豫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一匙姜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冯痢,春花似錦氮昧、人聲如沸框杜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咪辱。三九已至,卻和暖如春昭伸,著一層夾襖步出監(jiān)牢的瞬間梧乘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工庐杨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人夹供。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓灵份,卻偏偏與公主長得像,于是被迫代替她去往敵國和親哮洽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子填渠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Pair (結(jié)對(duì))已經(jīng)不是什么新鮮的事情。工作中我們進(jìn)行 Pair鸟辅。但是也會(huì)經(jīng)常發(fā)現(xiàn)一個(gè)問題:“兩個(gè)人單純的坐在一...
    PageThinker閱讀 275評(píng)論 0 0
  • Agile的培訓(xùn)已經(jīng)結(jié)束了氛什,經(jīng)過自己的努力也拿到了公司頒發(fā)的Agile Coach Certificate。在這里...
    賈尼閱讀 1,290評(píng)論 0 5
  • 背景 常常被很多朋友問到關(guān)于XP的問題匪凉,如什么是XP枪眉,什么又是工程實(shí)踐,跟敏捷啥關(guān)系等等這樣的問題再层。相信這些看似簡(jiǎn)...
    張燎原閱讀 7,507評(píng)論 1 8
  • 今天感恩節(jié)哎贸铜,感謝一直在我身邊的親朋好友。感恩相遇聂受!感恩不離不棄蒿秦。 中午開了第一次的黨會(huì),身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,572評(píng)論 0 11
  • 彩排完蛋济,天已黑
    劉凱書法閱讀 4,225評(píng)論 1 3