朋的博客

MySQL资料,Java技术,管理思想,博弈论,Ajax,XP极限编程,H.264,HEVC,HDR
随笔 - 86, 文章 - 59, 评论 - 1069, 引用 - 0
数据加载中……

配对编程(来自:ZDNet)

NetReptile推荐 [2005-7-17]
出处:ZDNet
作者:Steve Hayes
 

配对编程是极限编程里争议最大的做法之一——支持者和反对者对此的反应都相当强烈。那么什么是配对编程?为什么人们对此的反应这么大?

Laurie Williams将配对编程(pair programming)描述为“一种编程风格,它由两个程序员并排在一台计算机上工作,连续协作完成同一个设计、算法、代码或者测试”。从上面的描述我们可以清楚地看出,配对编程的含义不仅仅是编程本身的键入,我个人认为“配对开发(pair development)”应该是对这种活动的更好描述。

配对编程不是一个人简单地看着另一个在做什么——在卓有成效的配对工作里,这两个合作伙伴常常工作在不同抽象层次,一个人关注的是为实现眼前目标而编写的代码的细节,而另一个人考虑的是更大的前景和下一步要做的事情,这两个人的角色频繁进行更换。这是一项高强度的、严密的,且常常令人疲劳的活动,但是能够创造出经过深思熟虑的高质量代码。

反对配对编程的大多数强烈反应都源于配对编程对社会上业已形成的软件开发习惯的挑战。

对编程的传统看法是在隔离上花一大段时间,在此期间程序员进入一个“流程”,只与计算机和他们自己的思考模式进行交互。这样做的结果就是,编程往往更受性格内向的人的欢迎,因为这样的人喜欢将社交活动减到最少,而对那些外向的人却吸引力不大,因为他们更希望时时刻刻进行合作。

当然这些都是一般的想法,但是总有不愿意与其他人肩并肩工作程序员,对他们工作的满意度肯定会受到像配对编程这样的事的影响,了解这种情况是非常重要的。

对配对编程也有反应不太强烈的反对,一般都是与让两个人在一台机器上工作所花费的时间肯定要比他们各自独立工作然后合并工作成果所需要的时间多一倍的思想有关。

如果将软件开发的因素限定为编程的时候我们能够输入有多快,这肯定是对的,但是根据Kent Beck的观察,如果情况真的如此的话,我们给每个程序员一份Mavis Beacon(盲打教学软件)就行了。

我自己不会盲打,我也从来都没有在面试别人的时候问过他们的打字速度,所以打字速度是我们的主要关注因素的想法是值得怀疑的。然而,软件开发是一项智力活动,它能够从清楚的表达和思想的合作发展中受益,而配对编程在这两个方面都有所帮助。

另外一个误解是,配对编程成功与否,应该最终由产出的软件的质量来确定。当两个人合作的时候,至少有三种结果:

  • 软件
  • 对应用程序的共同理解(业务域、设计和实现)
  • 技能的转移

这些变化的比例取决于配对的平衡和动态,但是上述所有三者都会在某种程度上表现出来。当一个经验丰富的程序员与一个新手配对的时候,配对产生的软件可能不会被那个有经验的程序员单独工作产生的软件更多,但是这个新手肯定会学到很多关于这个应用程序的知识以及关于编程的基本知识。

将这一情形与两人单独工作相比较——我们可能得到更多的软件(尽管我们可能希望更加注意新手编写的软件的质量),但是我们却没有实现知识或者技能的转移。如果我们让这两个人在同一个小组里,配对编程就是两个人度过共同时光的理想方法。

而另一方面,两个有经验的人可能会发现配对编程里没有什么技能的转移,但是让他们在不同的抽象层次解决同一个问题会让他们更快地找到解决方案,而且错误更少。

配对编程的另一个目标是尽可能广泛地传播应用程序设计和实现的知识。

这是通过配对轮换实现的,这样小组配对的每个人都可以通过一段时间和其他所有人进行配对,而且应用程序的特定部分都会由尽可能多的人来解决。在这种环境里,糟糕的代码不会存在太久,因为它被暴露在很多双眼睛下(这就与开发人员代码开发背后的一个原理相似),而且当设计周期到来的时候,小组就会从所有人的贡献里受益,而不需要仅仅依赖某个熟悉应用程序特定部分的个人。

配对编程还有其他多种好处:

  • 直接的、连续的代码回顾
  • 与别人工作会增加责任和纪律性。在有人盯着的时候去偷懒要困难得多!
  • 两个程序员具有相同的缺点和盲点的可能性很小,所以我们会获得一个强大的解决方案。
  • 如果走进死胡同,配对浪费的时间要少得多,因为其中一个人不可避免地会厌烦,从而希望寻求帮助。

在定期配对轮换的情况下,上面列表里的最后两项尤其现实。当然,做得看起来像配对编程的方式有很多,但是却无法实现,或者破坏了这些优势。

如果不进行配对轮换,那么你所获得只会是编程的小圈子,知识和技术的转移也只会是最小。有些公司将配对编程用作是消灭个人空间(每两个程序员只需要一张桌子和一台计算机,不是吗?)的理由,这只会忽视程序员的人类需求。

希望让程序员一天八个小时都配对工作是不现实的——配对的持续交互带来了精确和清晰的结果,但是这一过程也是耗费精力的,而且(一个人)总是会有开发以外的任务要完成。

实践经验告诉我们,配对编程是提高软件质量和减少开发时间的有效方法,但是它并不适用于所有的程序员,它需要一种经过仔细思考的方式实现才能有效。

Steve Hayes是Internet Business Systems(IBS)公司的软件开发经理。IBS公司为金融服务行业提供敏捷开发方法咨询和开发服务,以及浏览器托管解决方案。

posted on 2006-02-19 21:08 benchensz 阅读(667) 评论(0)  编辑  收藏 所属分类: XP极限编程体验


只有注册用户登录后才能发表评论。


网站导航: