天天看點

關于結對程式設計的一些問題

前言

  最近由于公司項目,有機會嘗試結對程式設計(pair programming),實踐了3個月,也有了自己的一些心得體會,本文以Martin.Fowler的《結對程式設計模糊概念》來展開叙述。

1. 實踐靈活過程一定要“結對”嗎?

This is utterly false. 'Agile' is a very broad term defined only in terms of values and principles, most notably in the Manifesto for Agile Software Development.

  正如Martin所言,靈活宣言并未提及結對程式設計是必須的,靈活隻是一種思想,結對程式設計僅僅是實踐中的一個非必須的組成部分。即使XP被強烈推崇,也不代表結對程式設計适用于任何公司或者項目。

  就個人體會而言,目前項目組内會有Switch pair的過程,我的了解是pair的過程更多的注重團隊成員間的知識分享以及互相之間的溝通、檢查代碼等,帶來代碼品質上以及、知識流動上的優勢,要因項目或成員而異。

2. 極限程式設計迫使你結對嗎?

I would say that pair-programming is usual for XP teams. I wouldn't say that a team that doesn't do pair-programming thus cannot call itself an XP team. I should also point out that to most XPers I know the question of whether a team is XP or not is uninteresting; the real issue is whether a team is effective.

   Martin所贊成的是團隊開發效率或者說結對程式設計是否适合團隊。

3. 如果我不喜歡結對程式設計,我就沒必要去實踐它?

  Make sure you have someone who really knows how coach you, so you can be sure you're evaluating the real thing.

  針對這一點,我覺得我還是有切身體會的,真的很同意Martin的觀點。如果你經曆過一個不好的pair體驗,你就要回憶并且追問下,是否你找到了“合适”的parter來一起pair,而不是那種話不投機半句多、我寫你看着,這種同伴。

  往往pair的過程中兩個人的水準會有所差距,這個問題要從下面幾個角度考慮:

  1. 如果你是low的一方,你需要一個什麼樣的同伴,你希望同伴是如何回答你的各種疑問,如何正确提出問題,怎麼樣提問能讓對方樂意回答你的問題,如何讓pair的對象不覺得你很low,如何找一個有耐心的同伴交流,而不是諷刺挖苦?

  我覺得這個問題是一個很難平衡的問題,可能在大多數的情況下,要虛心請教、加速學習,努力跟上設計思路,并且提出自己的觀點,讓對方覺得你不是一個“無用之人”,誠然,最開始總是最難熬的,“命運”是公平的,如果有一個更Nice的同伴,可能你的學習努力程度就會稍若些;如果你的同伴很自傲,說話略帶諷刺,這可能會激勵你更快的學習。盡可能找一個适合自己的parter才是開始pair的關鍵。

  2. 如果你是High的一方,你是否思考過,low的一方的感受,你應該如何幫助low的一方提高能力水準,如何能在你累的時候,low能替你完成你的思路?

  俗話說的好,授人以魚,不如受人以之漁。可能做為能力稍強的一方如何引導同伴去融入代碼,融入設計思維,而不是我自己也行,不需要知識分享也能完成,或者你水準太low,問題太多,我不需要你這樣的累贅。其實pair的一方面是分享知識的過程,如果簡單簡單了解為完成項目任務,則會錯失很多提升自己的機會,如果是這樣你要考慮你是否适合pair。

  3. 兩個人水準相當,有時,大家思路一緻,互相搶鍵盤來完成代碼,而有時,甚至兩個人為了一個命名争的面紅耳赤?

  這是一個相當普遍的情景,而往往後者出現的次數更多。這裡有一些對代碼了解上的沖突,有一些實踐上的規範,還有一些人内心的虛榮(不接受别人對自己的否定,即使是錯誤的也要堅持),這時首先要思考下自己堅持的東西是否是正确的,自己是否能承認不足(不完美),其次可以找“第三方”來決斷沖突。從實踐的角度出發,如果事事都要第三方決斷的話,極有可能你們兩個之間的pair關系早以不存在,我覺得處理pair沖突的過程是兩個人互相了解、互相包容的過程,一味最求自我,這樣隻能單打獨鬥。

  當然,如果兩個人,“化學”作用比較好的話,會非常happy :)

4. 結對程式設計對降低工作效率?

that would be true if the hardest part of programming was typing

  一些結對程式設計的支援者認為,結對程式設計的效率會更高,他們(她們)可以持續讨論、互相review代碼,這樣可以保證高品質的代碼。而更多時候“工作效率”是無法衡量的,特别是在解決很困難的問題時,一個人可能會陷于某種“極明顯”的錯誤中,而不得要領,這個時候如果兩個能保持獨立思考的人往往效率更高。

  在我的pair中,有時我的任務是當代碼開發遇到困難時梳理代碼的作用,從新overview代碼思路,解決困難,一個人的能力是有限的,而兩個互補的人會産生1+1>2的效果。

5. 結對程式設計隻适用于解決困難代碼場合?

Except this: writing boring rote code is a smell. If I'm writing boring repetitive code it's usually a sign that I've missed an important abstraction, one that will drastically reduce the amount of rote code to write. Pairing will help you find that abstraction.

  簡單并不代表沒有重構機會或者說沒有機會寫出更完美的代碼。

  在我的pair過程中,partner總是在提醒我要重構,抽取代碼段,也許這就是一種外在的推力,來開發更優質的代碼。結對程式設計是提成代碼能力的過程,你如何知道你寫的代碼是最最優美的呢?看看codewars上大牛們代碼,你自己都會覺得汗顔。

作者:Stephen Cui

出處:http://www.cnblogs.com/cuiyansong

版權聲明:文章屬于本人及部落格園共有,凡是沒有标注[轉載]的,請在文章末尾加入我的部落格位址。

如果您覺得文章寫的還不錯,請點選“推薦一下”,謝謝。