BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Mike Bria 关注 0 他的粉丝 ,译者 金毅 关注 0 他的粉丝 发布于 2009年9月27日. 估计阅读时间: 4 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

最近几年,结对编程仍旧是最具争议的实践之一。支持者们不吝赞美之词,但是即使不少支持者都不得不承认他们自己公司真正结对编程都困难重重。为什么?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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

结对编程可以用在新员工上 by 贾 国清

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

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

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

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

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

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

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

这个有讨论的必要嘛? by 小 黑

都是老带新吧

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

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

软件工艺! by 朱 敏

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

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

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

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

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

独的办公室里面写代码 by wang yi

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

操蛋的开发人员才是关键 by Xiang Ran

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

结对不符合人性 by 聂 晶

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

同理 by 聂 晶

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

Re: 结对不符合人性 by Cai John

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

Re: 同理 by 吕 新科

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

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

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

利大于弊 by Guo Ford

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

Re: 利大于弊 by Zheng Can

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


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

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

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

Re: 同理 by Shichao Liu

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

Re: 结对不符合人性 by Yao Sapphire

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

Re: 同理 by Yao Sapphire

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

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

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

Re: 同理 by 陈 健

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

结对说相声也是可以的

Re: 结对不符合人性 by 陈 健

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

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

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

24 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT