配对编程是极限编程里争议最大的做法之一——支持者和反对者对此的反应都相当强烈。那么什么是配对编程?为什么人们对此的反应这么大?
Laurie Williams将配对编程(pair programming)描述为“一种编程风格,它由两个程序员并排在一台计算机上工作,连续协作完成同一个设计、算法、代码或者测试”。从上面的描述我们可以清楚地看出,配对编程的含义不仅仅是编程本身的键入,我个人认为“配对开发(pair development)”应该是对这种活动的更好描述。
配对编程不是一个人简单地看着另一个在做什么——在卓有成效的配对工作里,这两个合作伙伴常常工作在不同抽象层次,一个人关注的是为实现眼前目标而编写的代码的细节,而另一个人考虑的是更大的前景和下一步要做的事情,这两个人的角色频繁进行更换。这是一项高强度的、严密的,且常常令人疲劳的活动,但是能够创造出经过深思熟虑的高质量代码。
反对配对编程的大多数强烈反应都源于配对编程对社会上业已形成的软件开发习惯的挑战。
对编程的传统看法是在隔离上花一大段时间,在此期间程序员进入一个“流程”,只与计算机和他们自己的思考模式进行交互。这样做的结果就是,编程往往更受性格内向的人的欢迎,因为这样的人喜欢将社交活动减到最少,而对那些外向的人却吸引力不大,因为他们更希望时时刻刻进行合作。
当然这些都是一般的想法,但是总有不愿意与其他人肩并肩工作程序员,对他们工作的满意度肯定会受到像配对编程这样的事的影响,了解这种情况是非常重要的。
对配对编程也有反应不太强烈的反对,一般都是与让两个人在一台机器上工作所花费的时间肯定要比他们各自独立工作然后合并工作成果所需要的时间多一倍的思想有关。
如果将软件开发的因素限定为编程的时候我们能够输入有多快,这肯定是对的,但是根据Kent Beck的观察,如果情况真的如此的话,我们给每个程序员一份Mavis Beacon(盲打教学软件)就行了。
我自己不会盲打,我也从来都没有在面试别人的时候问过他们的打字速度,所以打字速度是我们的主要关注因素的想法是值得怀疑的。然而,软件开发是一项智力活动,它能够从清楚的表达和思想的合作发展中受益,而配对编程在这两个方面都有所帮助。
另外一个误解是,配对编程成功与否,应该最终由产出的软件的质量来确定。当两个人合作的时候,至少有三种结果:
这些变化的比例取决于配对的平衡和动态,但是上述所有三者都会在某种程度上表现出来。当一个经验丰富的程序员与一个新手配对的时候,配对产生的软件可能不会被那个有经验的程序员单独工作产生的软件更多,但是这个新手肯定会学到很多关于这个应用程序的知识以及关于编程的基本知识。