posts - 56, comments - 77, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Q: 結(jié)對(duì)編程、責(zé)任共享,完全是胡說,代碼找不到作者,開發(fā)人員哪里會(huì)有責(zé)任心!

          A: 這個(gè)疑問基于一個(gè)假設(shè): 開發(fā)人員的責(zé)任心來自于問責(zé)制度, 開發(fā)人員只有在恐懼的驅(qū)使下才會(huì)細(xì)心去編碼.

          我不知道你的職位是什么, 你或許是某個(gè)大中型企業(yè)的中高層領(lǐng)導(dǎo), 或許手下有不少的人, 但你不會(huì)得到手下的尊敬, 他們只有"畏".

          或許在對(duì)死亡之類的恐懼面前, 人類會(huì)爆發(fā)出強(qiáng)大的力量, 對(duì)于醫(yī)療系統(tǒng), 軍事系統(tǒng), 心存敬畏之心是對(duì)的. 但日常生活中, 人們?cè)跇s譽(yù)而不是恐懼的驅(qū)使下, 更能發(fā)揮自己的潛能

          Pair都希望通過展示自己的知識(shí)得到彼此的尊敬, 都希望代碼輪轉(zhuǎn)到其他同行手中時(shí)得到對(duì)代碼質(zhì)量的贊賞.

          是的, 即使代碼不署名, 團(tuán)隊(duì)依然清楚誰的代碼寫的好, 因?yàn)榻Y(jié)對(duì)和輪換, 因?yàn)榘姹究刂葡到y(tǒng).

          但是, 你, 管理者, 不需要知道哪塊代碼是誰寫的, 不需要知道引起重大損失的Bug是哪個(gè)開發(fā)者引入的. 所有的事情都是整個(gè)團(tuán)隊(duì)一起完成的.

          事實(shí)上, 你真正想知道的, 是整體上誰優(yōu)秀, 誰需要提高, 或者誰真的不適合. 有其它比代碼署名更好更有效, 而且不會(huì)把整個(gè)團(tuán)隊(duì)籠罩在恐懼的陰影下的方法.

          Q: 那是什么方法?

          A: 這涉及到整個(gè)考評(píng)體系的轉(zhuǎn)變. 舉個(gè)例子, 團(tuán)隊(duì)?wèi)?yīng)該作為一個(gè)整體被考評(píng), 客戶的反饋, 帶來的利潤, 造成的損失, 都應(yīng)該只到團(tuán)隊(duì)這一級(jí), 榮辱與共.

          團(tuán)隊(duì)內(nèi)部每個(gè)成員的考評(píng), 應(yīng)該由團(tuán)隊(duì)自己完成, 成員之間經(jīng)歷了輪換結(jié)對(duì), 誰優(yōu)秀, 誰需要提高, 誰不適合, 都會(huì)有共識(shí), 偽裝不了.

          Q: 你是說同行互評(píng)? 別扯了, 我只要弄好人際關(guān)系, 隨你怎么評(píng). 況且尤其是中國人, 抹不開面子, 怎么好意思當(dāng)面說人家壞話.

          A: 這是另外一個(gè)觀念的轉(zhuǎn)變, 必須借助于團(tuán)隊(duì)文化達(dá)成共識(shí): 同行互評(píng), 是幫助你發(fā)現(xiàn)自己的不足, 幫助你提高, 不是指責(zé)或貶低你. 如果你真的不合適, 同行互評(píng)會(huì)更快的讓你認(rèn)識(shí)到這一點(diǎn), 從而努力提高或盡快選擇其它的道路.

          至于面子問題, 依然需要團(tuán)隊(duì)文化, 在秉承"溝通, 反饋, 勇氣", 心態(tài)開放的團(tuán)隊(duì)里, 當(dāng)面反饋反而更易接受.

          另一方面, 大家都心智成熟, 如果一個(gè)人令周圍的人都不爽, 難道真的因?yàn)槊孀拥膯栴}忍受下去?

          Q: 怎么結(jié)對(duì)編程, 責(zé)任共享扯出這么大的動(dòng)靜來? 還要顛覆公司的考核體系?

          A: 是的, 結(jié)對(duì)編程是 XP 實(shí)踐中最具爭議的一個(gè). 反對(duì)它的開發(fā)者不在少數(shù), 但更大的阻力來自老板的本能反對(duì).

          我們不幸生活在口號(hào)的時(shí)代. 或許領(lǐng)導(dǎo)們習(xí)慣了喊口號(hào), 而從不考慮讓口號(hào)"落地", 從不關(guān)注口號(hào)的實(shí)施. "合作"是不是能把耳朵磨出老繭的口號(hào)? 有什么具體行動(dòng)? 結(jié)對(duì)編程就是最具體的一種合作啊.

          老板們對(duì)它的質(zhì)疑更多的是效率上. 其實(shí)就像TDD增加了整體代碼量但不是工作量一樣, 結(jié)對(duì)編程并非像直覺的那樣降低了效率, 而是失之東隅, 收之桑榆, 甚至魚與熊掌兼得.

          幾個(gè)俗套但不親身體驗(yàn)就無法體會(huì)的論斷:

          1. 不是總希望員工像驢一樣干活不要偷懶嗎? 為什么不讓員工互相監(jiān)督? 有人坐在旁邊盯著你的屏幕, 你能上網(wǎng),打游戲,和女朋友聊天? 天亮就干活,一直到天黑

          2. 不是總擔(dān)心員工跳槽帶來損失嗎? 為什么不趁他還在的時(shí)候就讓團(tuán)隊(duì)把他所有的知識(shí)都吸收干凈?

          3. 不是總擔(dān)心有人寫爛代碼嗎? 不是一直覺得code review流于形式效果不理想嗎? 還有比結(jié)對(duì)/輪換結(jié)對(duì)更徹底的code review形式嗎?

          4. 不是總想取長補(bǔ)短, 優(yōu)勢(shì)互補(bǔ)嗎? 不是總想達(dá)到"臭皮匠頂諸葛亮"的效果嗎?

          5. 不是總擔(dān)心新員工成長太慢嗎?

          6. 不是總希望團(tuán)隊(duì)氣氛融洽, 互幫互助, 沒人跳樓嗎?

          Q: 我干嘛要把辛辛苦苦很多年積累的經(jīng)驗(yàn)白白告訴別人? 我喜歡不可替代的感覺.

          A: 是的, 本質(zhì)上這是一個(gè)心理學(xué)和政治學(xué)的問題, 我也無法說服你. 但有幾點(diǎn), 還是要說一下.

          1. 獨(dú)自解決一個(gè)別人無法解決的難題, 可以得到公司的承認(rèn); 把知識(shí)傳授給團(tuán)隊(duì), 至少也會(huì)得到團(tuán)隊(duì)的認(rèn)可

          2. 解決已知問題的經(jīng)驗(yàn), 可以傳授. 但當(dāng)未知問題出現(xiàn)時(shí), 多年的沉淀依然不可代替. 即使新手知道解決問題的一般原則, 真正熟練運(yùn)用也需要?dú)q月的歷練.

          3. 如果你真的擁有智慧, 不必?fù)?dān)心別人剽竊你的只言片語, 它們剽竊不了你的思想

          如果你只是擔(dān)心功勞會(huì)被別人搶走, 好吧, 我心理學(xué)和搞政治兩方面都很差, 也沒什么辦法. 或許你可以堅(jiān)持你不喜歡結(jié)對(duì), 團(tuán)隊(duì)也不應(yīng)該強(qiáng)求你結(jié)對(duì).

          Q: 有些老手不喜歡結(jié)對(duì), 覺得新人不勞而獲對(duì)他們不利, 不情愿, 怎么辦?

          A: 人們總是在心甘情愿的去做一件事的時(shí)候效率最高, 結(jié)對(duì)編程也應(yīng)該遵循這個(gè)原則. 但并不意味著不做任何努力就放棄結(jié)對(duì)的紀(jì)律.

          有些人可能憑直覺不喜歡結(jié)對(duì), 但不曾真的嘗試過. 你要想辦法讓團(tuán)隊(duì)的人真正花點(diǎn)時(shí)間試過, 再來下結(jié)論, 或許想法就會(huì)有所改變.

          但實(shí)踐初期, 有一個(gè)敏捷教練是有必要的. 結(jié)對(duì)涉及到人與人之間的合作, 性格的碰撞. 人的問題是最難纏的問題, 稍有不順心, 就會(huì)夸大結(jié)對(duì)的負(fù)面效果, 比如彼此之間的爭執(zhí), 互不相讓等, 又或者總是由強(qiáng)勢(shì)的人來主導(dǎo), 平和的人總是被迫承擔(dān)不喜歡的決定, 及它帶來的后果.

          敏捷教練可以發(fā)現(xiàn)這些問題的苗頭, 并協(xié)助團(tuán)隊(duì)建立良好的紀(jì)律和習(xí)慣.

          Q: 你剛才提到結(jié)對(duì)就是持續(xù) Code Review, 可如果是兩個(gè)新手結(jié)對(duì), 代碼質(zhì)量還是得不到保證. 聽說不鼓勵(lì)新手結(jié)對(duì), 是否真的?

          A: 沒什么真不真, 取決于你的資源情況. 兩個(gè)經(jīng)驗(yàn)豐富而又各有所長的人合作解決問題自然是最高效的. 現(xiàn)實(shí)生活中的最佳拍檔不勝枚舉, 甚至小說中人們也表達(dá)了對(duì)這種合作形式的強(qiáng)烈向往: 陸小鳳與花滿樓司空摘星, 楚留香與胡鐵花姬冰雁, 四大名捕等.

          然而確實(shí)團(tuán)隊(duì)中不是每個(gè)人都是楚留香. 事實(shí)上, 有經(jīng)驗(yàn)的人能占到一半, 從而保證每對(duì)開發(fā)者都有一位經(jīng)驗(yàn)豐富的人, 已經(jīng)很不錯(cuò)了.

          新人結(jié)對(duì), 卻也有另外一種效果, 以探索的方式成長, 雖然對(duì)團(tuán)隊(duì)短期的整體效率可能是個(gè)短板, 但對(duì)個(gè)人的成長, 會(huì)留下一些印象深刻的教訓(xùn), 在未來的職業(yè)生涯中發(fā)揮作用.

          有一些互相支撐的實(shí)踐來提高新人結(jié)對(duì)的效率, 比如團(tuán)隊(duì)專用的開發(fā)空間, 實(shí)際上大家都坐在一間屋子里, 經(jīng)驗(yàn)豐富的人聽到新人Pair之間的討論明顯偏離正確的解決方案的時(shí)候, 隨時(shí)可以加入討論.

          Q: 那互不相讓怎么辦?

          A: 幾種實(shí)踐:

          1. 卷入更多的人討論, 時(shí)間窗;

          2. 先選擇其中一個(gè)人的意見做做看看;

          3. 不要選擇夾生飯, 即妥協(xié)出來的方案通常集中了兩種方案的缺點(diǎn).

          其實(shí)結(jié)對(duì)編程對(duì)開發(fā)者的沖擊最大. 把你的工作重點(diǎn)從與機(jī)器打交道變成了與人打交道. 把你從虛擬的機(jī)器世界拉回到現(xiàn)實(shí)世界. 把程序員重新變回成"人", 練習(xí)人與人之間的交流.

          工作上的爭論, 對(duì)事不要對(duì)人.

          Q: 強(qiáng)勢(shì)的人主導(dǎo)怎么辦?

          A: 這個(gè)問題很快能夠被整個(gè)團(tuán)隊(duì)發(fā)現(xiàn). 團(tuán)隊(duì)需要和強(qiáng)勢(shì)的人溝通, 提醒, 碰到問題不應(yīng)該一味維護(hù)自己的方案. 但通常本性難改, 這時(shí)其他成員在發(fā)生此類問題的時(shí)候如果堅(jiān)信自己的方案有可取之處, 要堅(jiān)持不要放棄, 可以擴(kuò)大討論范圍, 卷入更多的人討論.

          項(xiàng)目經(jīng)理和初期的敏捷教練需要特別關(guān)注此類問題, 因?yàn)樗锌赡馨呀Y(jié)對(duì)變成假結(jié)對(duì), 只是表面看是兩個(gè)人.

          Q: 難道一定要結(jié)對(duì)? 個(gè)人編碼時(shí)代一樣產(chǎn)生了無數(shù)優(yōu)秀的軟件, 而且更能體現(xiàn)作者的思想和個(gè)性.

          A: "一定"這類詞只應(yīng)出現(xiàn)在幾個(gè)基本定理中, 其它場合通常是錯(cuò)的, 而且總會(huì)給措辭追咬者提供把柄, 有時(shí)甚至你只是說某個(gè)東西好推薦使用, 他也能理解成你說的是"一定"要用某個(gè)東西

          至少兩個(gè)極端情形下, 結(jié)對(duì)并不強(qiáng)制:

          1. 復(fù)雜, 初期需要靜心思考的問題, 可以分頭行動(dòng), 各自有了理解或解決方案或時(shí)間窗到了再來討論. 言語在思考的過程中也會(huì)幫忙, 但我們都知道對(duì)有些問題, 言語只會(huì)打擾思路.

          2. 一堆瑣碎毫無技術(shù)含量的工作, 不得不手工完成, 只是考驗(yàn)?zāi)托? 自然不妨分頭行動(dòng), 效率肯定比結(jié)對(duì)要高

          Q: 幾對(duì)開發(fā)者同時(shí)討論各自的問題, 太吵了!

          A: 小點(diǎn)聲.

          Q: 又說Pair之間要交流, 要討論以便周圍的人聽到后可以及時(shí)發(fā)現(xiàn)偏差以節(jié)省時(shí)間. 到底要小聲還是要大聲?

          A: 安靜的討論

          Q: 如果代碼集體所有, 那某個(gè)模塊出錯(cuò),此時(shí)已經(jīng)有超過5對(duì)開發(fā)者編輯過此模塊代碼,那么誰來改?

          A: 團(tuán)隊(duì)來改. 如果要在某個(gè)模塊上增加新功能, 此時(shí)已經(jīng)有超過5對(duì)開發(fā)者編輯過此模塊代碼, 那么誰來添加?

          Q: 我想修改某段代碼, 想找原作者了解一下思路, 可根本不知道是誰.

          A: svn praise/blame. 然而更應(yīng)該發(fā)生的是:

          1. TDD, 一旦改錯(cuò)單元測(cè)試用例會(huì)給你反饋.

          2. 輪換結(jié)對(duì)編程, 可能很多人都清楚那段代碼.

          3. 簡單設(shè)計(jì), 代碼不應(yīng)該太復(fù)雜


          評(píng)論

          # re: 敏捷質(zhì)疑: 結(jié)對(duì)編程, 代碼集體所有權(quán)  回復(fù)  更多評(píng)論   

          2008-07-28 18:12 by BeanSoft
          敏捷現(xiàn)在最突出的一個(gè)詞就是: 敏捷教練... 這讓人想起某些不好的東西, 一如 SOA 必須依賴一流的商業(yè)付費(fèi) SOA 平臺(tái)一樣.

          # re: 敏捷質(zhì)疑: 結(jié)對(duì)編程, 代碼集體所有權(quán)  回復(fù)  更多評(píng)論   

          2008-07-28 21:02 by 切爾斯基
          @BeanSoft
          呵呵, 這只是一個(gè)角色, 一如"架構(gòu)師""產(chǎn)品經(jīng)理"一樣, 或者某些企業(yè)的"QA""流程管理員"等, 未必就是付費(fèi)聘請(qǐng)的第三方的人

          # re: 敏捷質(zhì)疑: 結(jié)對(duì)編程, 代碼集體所有權(quán)  回復(fù)  更多評(píng)論   

          2008-07-29 12:32 by rocket
          good FAQ。一些答案是我以前知道的,但是還有一些答案是我以前沒有考慮到的。不過,我覺得敏捷的關(guān)鍵還是思想的轉(zhuǎn)變,結(jié)對(duì)等這些方法是需要基于敏捷的思想的。所以上面有很多問題的提出都是由于沒有把思考問題的方式轉(zhuǎn)變過來。
          切爾斯基,在blogjava很少能夠見到幾個(gè)研究和介紹敏捷的,我想邀請(qǐng)你到我的一個(gè)敏捷qq群中一起多討論論:59765983
          有興趣也可以去我的博客看看,指指錯(cuò)誤:)

          # re: 敏捷質(zhì)疑: 結(jié)對(duì)編程, 代碼集體所有權(quán)  回復(fù)  更多評(píng)論   

          2008-07-29 21:00 by 切爾斯基
          @rocket
          4,5年沒用QQ了, 呵呵; 弄個(gè)MSN群

          # re: 敏捷質(zhì)疑: 結(jié)對(duì)編程, 代碼集體所有權(quán)  回復(fù)  更多評(píng)論   

          2008-07-30 10:33 by 體制問題不能委過個(gè)人覺悟
          Q: 我干嘛要把辛辛苦苦很多年積累的經(jīng)驗(yàn)白白告訴別人? 我喜歡不可替代的感覺.
          A: 是的, 本質(zhì)上這是一個(gè)心理學(xué)和政治學(xué)的問題, 我也無法說服你. 但有幾點(diǎn), 還是要說一下.
          1.獨(dú)自解決一個(gè)別人無法解決的難題, 可以得到公司的承認(rèn); 把知識(shí)傳授給團(tuán)隊(duì), 至少也會(huì)得到團(tuán)隊(duì)的認(rèn)可
          團(tuán)隊(duì)認(rèn)可和公司承認(rèn)從本質(zhì)上講是不同的
          2.解決已知問題的經(jīng)驗(yàn), 可以傳授. 但當(dāng)未知問題出現(xiàn)時(shí), 多年的沉淀依然不可代替. 即使新手知道解決問題的一般原則, 真正熟練運(yùn)用也需要?dú)q月的歷練.
          多年的沉淀不是經(jīng)驗(yàn)嗎?經(jīng)驗(yàn)不僅是用來解決已知問題的,對(duì)于解決未知問題同樣有很大幫助
          3.如果你真的擁有智慧, 不必?fù)?dān)心別人剽竊你的只言片語, 它們剽竊不了你的思想
          剽竊不了思想,但是可以剽竊經(jīng)驗(yàn)
          如果你只是擔(dān)心功勞會(huì)被別人搶走, 好吧, 我心理學(xué)和搞政治兩方面都很差, 也沒什么辦法. 或許你可以堅(jiān)持你不喜歡結(jié)對(duì), 團(tuán)隊(duì)也不應(yīng)該強(qiáng)求你結(jié)對(duì).
          如果不能從心理學(xué)和搞政治兩方面說服,估計(jì)團(tuán)隊(duì)就會(huì)強(qiáng)求結(jié)對(duì)而不是不應(yīng)該

          # re: 敏捷質(zhì)疑: 結(jié)對(duì)編程, 代碼集體所有權(quán)  回復(fù)  更多評(píng)論   

          2008-07-30 18:49 by rocket
          @切爾斯基

          速度建好,呵呵
          agilelife@groups.msn.com

          # re: 敏捷質(zhì)疑: 結(jié)對(duì)編程, 代碼集體所有權(quán)  回復(fù)  更多評(píng)論   

          2009-04-02 16:42 by forsunlight
          我是一個(gè)新手,如果和我結(jié)對(duì)的人總是一副盛氣凌人的態(tài)度,我該怎么辦呢?是我心胸太狹窄,還是沒辦法承認(rèn)自己有太多需要改進(jìn)的地方呢?這樣的結(jié)對(duì)編程是不是會(huì)在一定程度上造成對(duì)新手積極性的打擊?

          # re: 敏捷質(zhì)疑: 結(jié)對(duì)編程, 代碼集體所有權(quán)  回復(fù)  更多評(píng)論   

          2009-12-13 22:38 by aqingsao
          @forsunlight
          一般來說,結(jié)對(duì)時(shí)可以一個(gè)人寫測(cè)試,一個(gè)人寫實(shí)現(xiàn)。如果他技術(shù)上很強(qiáng),你可以多干一些,有問題了他再指導(dǎo)。這其實(shí)是你學(xué)習(xí)的好機(jī)會(huì)。但是如果他技術(shù)不怎么樣,還盛氣凌人,那就pair時(shí)堅(jiān)持和他“一個(gè)人測(cè)試,一個(gè)人實(shí)現(xiàn)”,把他的根底暴露出來就好了

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 安义县| 昌宁县| 平潭县| 胶州市| 五原县| 金华市| 桓台县| 丰城市| 绍兴市| 沙洋县| 峡江县| 屏山县| 旺苍县| 句容市| 满洲里市| 德令哈市| 通山县| 阳曲县| 浦北县| 宝清县| 措勤县| 大田县| 班戈县| 昌黎县| 平昌县| 出国| 兰考县| 天全县| 新营市| 侯马市| 长垣县| 嘉黎县| 图片| 喀喇| 调兵山市| 伊川县| 鄱阳县| 文登市| 建湖县| 大宁县| 仁布县|