结对编程,到底是双剑合璧还是脚趾抠地?

​​​​​​​​​​​​​​​​摘要:结对编程(Pair programming)来自于极端编程 XP(eXtreme Programming),是它的十二个最佳实践之一。顾名思义,结对编程就是两个程序员坐在一起,结对进行代码开发。

本文分享自华为云社区《结对编程到底好不好》,作者: 敏捷江湖桃花岛梅师姐 。

什么是结对编程

结对编程(Pair programming)来自于极端编程 XP(eXtreme Programming),是它的十二个最佳实践之一。顾名思义,结对编程就是两个程序员坐在一起,结对进行代码开发。在极限编程中,所有的软件产品都是由两个程序员并排坐在一起,在同一台机器上共同完成的。

图 2 VersionOne 的 14 届年度敏捷状态报告——组织采用的敏捷工程实践

关于组织是否要采用结对编程这项实践,主要是它到底适不适合自己的项目,符合自己公司的文化。选择某一项实践的时候我们要形神兼具,如果仅仅是安排两个程序员坐在一起,一个写,一个看,这只是形式上符合,而重点是要理解这项实践它背后的理念。在结对中通常要求两个程序员水平比较相近,这样可以形成互补,引起讨论。两个人的智慧大于一个人的智慧,这是结对编程的基本依据,这样就会提升产品质量,提升工作效率。下面我们一起来看一下结对编程的特点。

结对编程的特点

从项目角度,提高了产品质量

结对编程时,两个人共同完成一个功能,可以避免个人的误区存在,通常个人的想法难免有局限性,自己看自己写的代码总是觉得怎么都对。每个人站在不同的角度能够看到彼此的误差。还有通过结对,代码至少有一个程序员进行了审查,这样可以让设计、测试和编码更加友好,减少了缺陷,从而提高了产品质量。

另外,结对的形式也保证了一个功能至少两个人知道,互为形成 backup,不会出现一个人请假或者离职,后续无人知的情形。有的公司还会定期更换结对的人,这样可以让团队的成员都能熟悉到项目的各个功能模块,形成项目集体所有和负责的氛围,避免了一人责任制,自扫门前雪的现象,也可以让团队成员快速的熟悉业务。

从团队角度,更好的实现了知识传递和分享,让成员关系更融洽

不可否认,结对这种面对面的沟通交流方式,对于知识和技能的传递是最好的形式。同时,这种即时的沟通交流也让同事之间关系变得融洽,相对比那种每个人一个格子间闷头写代码,更利于创建和谐的团队氛围。根据“乔哈里视窗(沟通视窗)”的理论,在实际工作的人际交往中,共同的开放区越多,沟通起来也就越便利,越不易产生误会。当我们向别人扩大我们的公开象限时,就会更多的和对方建立良好的关系,结对编程就是很好的一种形式。

图 3 乔哈里视窗

结对编程其实是在结对的磨合中,慢慢的形成团队的一个共同的价值观和文化,这个过程是漫长的,潜移默化的,其中必然经历分歧和统一的过程,而很多团队在分歧中就直接停止了实践,也就无法看到结对带来的好处。

从个人角度,提高了个人的能力,提升了效率

在结对合作的时候,每个人不仅会从对方那里学到新的知识和技能,还能受到对方的工作方式和处世态度的影响。尺有所短,寸有所长,每个人都有自己的优点和长处,值得被学习和尊重。当团队中的每个人的能力提高了,其实就是整个团队能力的提高。

工作效率上,结对编程让大家更专注在工作上,个人的一些工作外的活动将不会进行。每个人都有自己要负责的任务,两个人其实形成了一个互相监督,共同进步的小团队,为了团队任务的完成,两个人都会专注在自己的任务上,这样就提高了输出的效率。

对结对编程的质疑

前面提到了对结对编程的争议很大,主要有以下两点。

管理者认为提高了人力成本

一个人可以完成的工作,变成两个人来做,产出就降低了一半,这很显然是一种浪费。关于说到的提高产品的质量,短时间无法看出来,所以,无容置疑的结对编程就被认定为一个不好的实践。

团队认为找到合适的结对人员很难

首先水平相差不太多的人在团队中不多;其次结对要求两个人的脾气性格都能够相投,否则很难合作;再次,有些人喜欢单打独斗,不善于和别人合作等等很多的原因和理由。

对于以上两点,在这里不做评判。敏捷开发不等于所有的敏捷实践都要在自己的团队落地,还是那句话:适合自己的才是最好的。

点击关注,第一时间了解华为云新鲜技术~

本文文字及图片出自 InfoQ

本文文字及图片出自

你也许感兴趣的:

共有 9 条讨论

  1. admin  这篇文章, 并对这篇文章的反应是俺的神呀赞一个
  2. admin  这篇文章
  3. admin  这篇文章
  4. admin  这篇文章
  5. admin  这篇文章
  6. admin  这篇文章
  7. admin  这篇文章
  8. admin  这篇文章
  9. admin 这是疯了吗?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注