InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

观点:结对编程并不适合所有人

作者 Mike Bria 译者 金毅 发布于 2009年9月26日

领域
过程 & 实践
主题
企业级敏捷 ,
敏捷 ,
敏捷技术
标签
结对编程 ,
组织模式

最近几年,结对编程仍旧是最具争议的实践之一。支持者们不吝赞美之词,但是即使不少支持者都不得不承认他们自己公司真正结对编程都困难重重。为什么?Obie Fernandez给出了10个可能的原因。
Obie所在公司Hashrocket的两名员工Desi McAdam和Jim Remsik在《纽约时报》发表了一篇文章,大谈结对编程好处的,为此Obie回应了一篇令人深思的博文,概括了很多公司不能成功实施结对编程的10大原因。他首先澄清并解释他是非常认同结对带来的好处的,他认为”结对编程是Hashrocket里面最重要的竞争优势之一。”
接着他阐述道:“结对编程,尤其是完全100%地实施结对,他不得不逐步提醒大多数敏捷理想主义者:那条路对他们来说可能走不通”,他也解释了为什么。

  • 10 - 大多数软件经理不想在必要的硬件上投资:高效的结对编程需要好的设备,但很多公司不愿意做这种投资。
  • 9 - 大多数软件公司的办公布置不适合结对编程: 很多软件公司让他们的程序员在自己的小隔间工作,但小隔间不能用在结对编程上。
  • 8 - 大多数软件公司还是使用传统的招聘方式: 好的结对意味着有合适的人合适的环境,很多公司的招聘方式并不能保证这一点。
  • 7 - 大多数软件公司会容忍不合群的行为:结对需要双方都谦虚(或者像Obie说的那样,需要强力推行“没有混蛋守则” )。不合群(不和谐)的行为不能参合到结对里面来,但很多公司并不会积极处理这种有不良举止的程序员。
  • 6 - 大多数人不理解结对的生产力:关于结对的一个由来已久的误解:“难道这不就降低了一半生产力吗?”
  • 5 - 很多软件公司招聘了不合格的开发人员
  • 4 - 很多软件公司都超负荷以及人员不够:结对编程,尤其在刚开始的胡乱搭配阶段,可能需要更多的人(但不需要更多时间),但很多公司没这么多人。
  • 3 - 很多软件开发人员并不会每个人都喜欢:除非你能有个由善于交往的人组成的小团队,不然你得经过一段痛苦期才能让大家开开心心地一起工作
  • 2 - 很多软件开发人员就是不想那么努力工作:结对编程非常紧凑,会引领着你努力工作,但很多人并没有激情那么努力地工作。
  • 1 - 很多软件公司并不真正地追求卓越:投资结对意味着投资工艺,但很多公司并没有兴趣

Obie的列表(我在这里做了精简概括,但在你得出判断前,请完整地阅读一下他的文章),并不武断,引发来很多讨论,大部分都在他博文的那个长长的评论列表中。

Brian Guthrie花了点时间做了一份他自己的列表用来反驳Obie的观点。他这么说道:

Obie和他的公司Hashrockets提供了适宜的结对环境,但是很多初次尝试这一实践的人并不会有那种工作环境,而且你也不必都需要有那些。

他在列表里面罗列了他认为Obie遗漏或者不尽然的5项:

  • 5 - 结对编程不需要很昂贵的硬件: 如果这是你能用的全部,那么一台配置完好的电脑,一些备用的鼠标和键盘,一个会议室就足够你开始结对了。
  • 4 - 每个人不需要立马能一起工作,并互相欣赏的。合作不好就不结对,但强推一些基本必要的行为准则是每个公司应该能去做的。
  • 3 - 很多公司很乐意去试试结对:公司其实并不像你们说得那样害怕结对。
  • 2 - 很多软件公司非常关注投资回报率:大多数公司并不在乎“卓越”本身,但他们其实很关注减少缺陷以及知识传播,而这些结对能很好地做到。
  • 1 - 结对编程并不是仅仅适用于精英:每个人都可以做到,而且很可能喜欢上结对,并且从中受益良多。这不是核心程序员的专利。

请花点时间完整地读读ObieBrain的这两篇博文。很可能你自己的经验和想法与这些观点不谋而合。

查看英文原文:Opinion: Pair Programming Is Not For The Masses

译者 金毅 多年来服务于欧美软件外包行业从事管理工作,对软件工程、方法学等在外包业的运用和CMMI实施略有感悟。

结对编程可以用在新员工上 发表人 贾 国清 发表于
Re: 结对编程可以用在新员工上 发表人 Wang Carl 发表于
Re: 结对编程可以用在新员工上 发表人 Xiang Eric 发表于
结对编程需要两个人都有非常好的素质 发表人 im Kevin 发表于
Re: 结对编程需要两个人都有非常好的素质 发表人 im Kevin 发表于
Re: 结对编程需要两个人都有非常好的素质 发表人 鲍 央舟 发表于
Re: 结对编程需要两个人都有非常好的素质 发表人 He Puras 发表于
这个有讨论的必要嘛? 发表人 小 黑 发表于
软件工艺! 发表人 朱 敏 发表于
独的办公室里面写代码 发表人 wang yi 发表于
操蛋的开发人员才是关键 发表人 Xiang Ran 发表于
结对不符合人性 发表人 聂 晶 发表于
Re: 结对不符合人性 发表人 Cai John 发表于
Re: 结对不符合人性 发表人 陈 健 发表于
Re: 结对不符合人性 发表人 Yao Sapphire 发表于
同理 发表人 聂 晶 发表于
Re: 同理 发表人 吕 新科 发表于
Re: 同理 发表人 Shichao Liu 发表于
Re: 同理 发表人 Yao Sapphire 发表于
Re: 同理 发表人 陈 健 发表于
结对至少可以降低一些低级失误! 发表人 m lm 发表于
利大于弊 发表人 Guo Ford 发表于
Re: 利大于弊 发表人 Zheng Can 发表于
中国的基础教育没有准备好 发表人 Shichao Liu 发表于
  1. 返回顶部

    结对编程可以用在新员工上

    发表人 贾 国清

    公司总会招些实习生或是经验不足的应届生,这时可以采用结对的方法,帮助新员工更快的胜任工作。另外,有些公司实行了导师制度,让导师和徒弟结对,也会有很积极地影响。

  2. 返回顶部

    Re: 结对编程可以用在新员工上

    发表人 Wang Carl

    这种以老带新的结对,确实是不少项目采用的,也是有一定效果的。
    不过结对讲究的是地位对等和思路互补,相互促进,这样才能1+1>>2。
    新老结对这种组合,1+1可能=1.5或者更低,不过这属于培养新员工的必须投资的过程。
    文章中说到的,比较切中要好,项目中可能缺少这种有激情、追求卓越、和睦相处、技能优秀的人才。
    看了一下自己上面写的,这种人确实不是很好找啊:)
    以前在学校ACM竞赛的团队,使用这种结对方式的,效果很好。

  3. 返回顶部

    结对编程需要两个人都有非常好的素质

    发表人 im Kevin

    结对编程需要两个人都有非常好的素质,能够谦虚客观的看待别人的观点。新老员工的场景中,新员工——特别是应届毕业生——一般都比较好学,谦虚,容易接受别人的经验之谈,所以容易成功。但是如果水平接近然后结对的两个人有一方是那种很自大的人,在情绪上不容易接受别人对自己代码意见的话,那结对肯定效果不理想。我感觉中国在这方面的环境还不是特别适合这类的结对编程。

  4. 返回顶部

    Re: 结对编程需要两个人都有非常好的素质

    发表人 im Kevin

    而且,完成同一个功能的代码可能不同人实现的方式是不一样的,假设他们写出来的都是很优质的代码。这个时候就需要结对双方都能够意识到并承认这一点。结对的本质是用两个人的大脑拼接出最优质的代码,如果代码已经是最优了,那就无需对这段代码妄加评论了。
    但是大多数程序员都有强迫症(我自己也有一些),这表现在看不惯别人的代码上,总觉得自己的代码才是最好的。所以看到不符合自己风格的代码总是想强迫别人按照自己的方式来写。这是非常糟糕的。

  5. 返回顶部

    这个有讨论的必要嘛?

    发表人 小 黑

    都是老带新吧

  6. 返回顶部

    Re: 结对编程可以用在新员工上

    发表人 Xiang Eric

    支持地位对等和思路互补,结对目的是为了更好的代码质量和实现,需要的思维火花的碰撞;如果是老带新的话那是导师制度,更多的是传授。

  7. 返回顶部

    软件工艺!

    发表人 朱 敏

    “投资结对意味着投资工艺”,YES,工艺!

  8. 返回顶部

    Re: 结对编程需要两个人都有非常好的素质

    发表人 鲍 央舟

    所以,最好公司的所有程序员都对什么是好的代码有一个统一的认识。这样结对才更有效

  9. 返回顶部

    Re: 结对编程需要两个人都有非常好的素质

    发表人 He Puras

    我也有强迫症
    怎么办???

  10. 返回顶部

    独的办公室里面写代码

    发表人 wang yi

    我喜欢在一个单独的办公室里面写代码,没人来烦我。

  11. 返回顶部

    操蛋的开发人员才是关键

    发表人 Xiang Ran

    严重同意8,7,5,2。

  12. 返回顶部

    结对不符合人性

    发表人 聂 晶

    1.我不喜欢在工作的时候身后/或旁边 有人盯着,有一种被监视的感觉
    2.我不喜欢在我思考代码的时候,不时有人在旁指指点点,思路经常被打断也是很恼火的事情。
    3.编码以为这要进行独立思考,而独立思考过程是一个私人的问题,有问题我们可以在专门的会议上讨论,但当你在分析处理具体问题时候总有人在旁边啰里八嗦的时候不知道你是否感到愉快。
    4.总之,结对编程不符合人类思维习惯即行为习惯。

  13. 返回顶部

    同理

    发表人 聂 晶

    不知道有没有结对驾驶
    结对下象棋
    结对拧螺丝
    结对写小说之类的
    所谓观棋不语真君子大概就是这个道理

  14. 返回顶部

    Re: 结对不符合人性

    发表人 Cai John

    结对编程并不是一天8个小时都坐在一起。有些东西必须一个人静静独立思考,或者一些Research的工作,就没必要两人做在一起了。结对跟独立思考是不矛盾的。
    至于有被监视的感觉,那就很奇怪了,也许是你个性问题,不够Open。

  15. 返回顶部

    Re: 同理

    发表人 吕 新科

    结对逛街购物

    不知道有没有结对驾驶
    结对下象棋
    结对拧螺丝
    结对写小说之类的
    所谓观棋不语真君子大概就是这个道理

  16. 返回顶部

    结对至少可以降低一些低级失误!

    发表人 m lm

    只要结对的人不走神,两个人一起写出来的代码一般都会比一个人写出来的质量高、bug少,而且考虑的比较全面,这样就省去了后续一些代码检视、频繁修改代码结构、过多bug返工带来的工作量

  17. 返回顶部

    利大于弊

    发表人 Guo Ford

    改变习惯要有个过程,但是一旦新习惯形成,其效果不可同日而语。
    此外我觉得老带新并不是结对的最佳实践形式。

  18. 返回顶部

    Re: 利大于弊

    发表人 Zheng Can

    改变习惯要有个过程,但是一旦新习惯形成,其效果不可同日而语。
    此外我觉得老带新并不是结对的最佳实践形式。


    总是老带新的话,老人就没提高没兴趣了
    除非... 男女搭配,干活不累...

  19. 返回顶部

    中国的基础教育没有准备好

    发表人 Shichao Liu

    中国的基础教育善于培养独行侠,几乎没什么培养团队精神的内容。

  20. 返回顶部

    Re: 同理

    发表人 Shichao Liu

    拉力赛都是结对驾驶。。。不过有明确分工,中间没有时间交换位置嘛

  21. 返回顶部

    Re: 结对不符合人性

    发表人 Yao Sapphire

    1.我不喜欢在工作的时候身后/或旁边 有人盯着,有一种被监视的感觉
    结队的人是你的同伴,不是你的老板。
    2.我不喜欢在我思考代码的时候,不时有人在旁指指点点,思路经常被打断也是很恼火的事情
    结对是两个人共同思考,讨论,两人的思维要同步或者互补。。你为什么非要考虑别人不一样的事情,并打断(被打断)别人的思路呢?
    3.编码以为这要进行独立思考,而独立思考过程是一个私人的问题,有问题我们可以在专门的会议上讨论,但当你在分析处理具体问题时候总有人在旁边啰里八嗦的时候不知道你是否感到愉快。
    结对是为了解决独立思考是,比较容易产生的欠缺和逻辑错误等这类问题,而不是要剥夺你独立思考的权利和机会。
    4.总之,结对编程不符合人类思维习惯即行为习惯。
    请学习行为认知等相关学科知识,你会发现,完全的独立思考,才是 不符合人类思维习惯即行为习惯 的事情。

  22. 返回顶部

    Re: 同理

    发表人 Yao Sapphire

    结对驾驶啊。。这个比喻不恰当,毕竟司机的位置和活动空间那么小,行驶中换人是很麻烦且很危险的事情,即使停下来,换人也是很高成本的。。在这种场景里,一人驾驶,一人辅助(比如看地图,决策行驶路线),恰恰是结队编程里最精髓思想的体现。
    通常情况下,结对的时候,两种情形:一种是我描述我的想法,你来写代码,另外一种是我写我的代码实现我的想法。。。通常只要两种方式适时的交替出现,结对的效果就能达到最大话。

    至于结对下象棋,那是游戏规则的问题。。。
    拧螺丝?这么简单的事情没必要,结对编程是要解决软件开发中,日益复杂的过程和质量控管的问题。。毕竟软件开发,是个复杂的脑力劳动过程。否则也不会被人们研究了3,4十年的软件工程,仍然没有很大的改善软件开发过程中出现的问题。。当然我的意思不是说,结对就是银弹,但是,如果你没有理解其中的思想原理,并切实实践一下,就不会发现其中的好处。。当你切实实践一下,你才能真正发现其中的利弊,然后再做出正确的取舍。

    结对写小说之类。。。。恩,你怎么就知道所有小说都是一个人脑力劳动的结果?就没有编辑或者其他人提供的思路和改进建议?

  23. 返回顶部

    Re: 同理

    发表人 陈 健

    越野车赛都要有个driver,有个navigator,
    正好对应新员工和老远工的位置

    结对说相声也是可以的

  24. 返回顶部

    Re: 结对不符合人性

    发表人 陈 健

    不是结对不符合人性,而是结对同样考验能力
    同样是球类双打运动员,有配合好的总有配合差的

    脑力活动和身体活动都同理

深度内容

专访Jeffery Richter:Windows 8是微软的重中之重

Jeffery Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffery Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。

解析JDK 7的动态类型语言支持

随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备。在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义。