结对编程意味着每个开发人员的成这笔钱值得吗?

时间:2009-03-20 21:55:39

标签: agile methodology pair-programming

在Agile中进行结对编程需要我们将单个程序员的薪水加倍。当然,采用这种方法,代码的质量要好得多,早期发现的错误等等,但仍然值得花钱吗?也许我们应该向少数测试人员支付第二个开发人员的工资(后者通常比合格的程序员便宜得多)?有没有人有这种比较的经验?

21 个答案:

答案 0 :(得分:51)

你怎么知道你的不成对的程序员更有效率?我有时认为单/双与兔子和乌龟的旧童话相当。

配对不会影响适得其反的工作。我不知道我多久经常看到开发人员花费数周时间研究那些后来被更简单的东西取代的东西。 “在区域内”的单个程序员经常做蠢事。生成太多代码太简单了,当你想要的东西更多时,代码更少。

在后代,当尘埃落定时,你会发现数百条(如果不是数千条)代码可能未编写,因为有人没有知道库X或技术Y.配对改善此问题,但不删除它。在鼓励无意识的代码兴奋之前,它鼓励个人和两人进行更多的研究。

我希望我能够配对......

答案 1 :(得分:17)

我们在公司使用这种方法,但仅针对困难的任务,或者当您不确定其他人已经开展的工作时,我认为这些工作非常有效。它可以帮助您避免陷入困境,并且能够在必要时将想法从人们身上移开,同时仍然能够独立完成大多数简单任务。

我也相信它比代码审查更有益,这是我工作的其他方面。在没有提供重要的背景信息的情况下进行代码审查时,通常很难完全了解正在进行的操作,此时您并不总是有时间考虑所有的进出。结对编程从一开始就为您提供上下文,并允许您花更多时间考虑可能会或可能不会导致问题的边缘情况。

答案 2 :(得分:15)

虽然我同意目前关于结对编程是一件好事的大部分反应,但我会扮演魔鬼的拥护者,并认为它并不总是有意义。

当你配对时,你没有得到一个拥有两倍大脑的程序员。你得到的是一个程序员,这是你的两个大脑的联盟。因此,基本上任何时候我搞砸了,我的伴侣抓住或找到更好的方式,这是一个加号。但是,任何时候我自己编写正确的代码都是浪费钱,因为不需要我的伴侣。

基本上,您需要评估您正在处理的代码。简单的任务通常不值得花钱让别人坐在肩上并确保你正确地编写你的for循环。但是,在某个阈值处,任务很复杂,足以使对编程的roi合理化。

答案 3 :(得分:12)

如果花费的时间少于一个开发时间的1/2,这并不意味着成本增加一倍。我认为在困难或低级别的任务中,这会有所帮助。我发现这是值得的,因为你有人说“不,不要那样做!”很久之后,它最终会出现在生产代码中,这将花费你的时间和金钱。

我已经编写了操作系统和那种性质的东西,有人坐在我旁边来仔细检查我的逻辑是非常宝贵的。

答案 4 :(得分:12)

使用结对编程,您可以组合:

  • 更高质量的代码
  • 更好地分配内在知识
  • 更多团队精神

你不会比这更容易获得那么多的投资回报。

然后,您不应该将它用于所有任务。

答案 5 :(得分:8)

在工作中我们一直使用配对编程。 诀窍是知道应该成对完成哪些任务,如果由两个开发人员完成,那将是“浪费时间”。 拇指的规则是更加面向研究的任务(即POC和尖峰)应该成对完成以及新特征的开发(这样知识将存在于多个思想中)。 诸如CI服务器安装或替换插件图标等更为简洁的任务由单个开发人员完成。 另一个因素是团队成员的当前可用性以及在该次迭代中要完成的当前任务。

答案 6 :(得分:7)

不,你没有。每个程序员仍然可以获得一个薪水。

如果你不把它称为“结对编程”,你认为你的程序员不会互相交谈吗?您认为编程是完全可并行化的吗?

答案 7 :(得分:7)

很难说 - 我花了很多时间在一个强制配对环境中工作,也在配对可选环境中工作。我见过的最高质量代码在配对环境中。这可能更多地与个体开发者的能力和纪律有关。有时你会从配对中获得你的钱,特别是在一些编码员不是顶级的情况下。但是,如果所有的编码员都是经验丰富,训练有素的编码人员,那么如果他们正在配对所有的话,你只会浪费你的钱。

我曾多次对我的编码规则和产品质量产生巨大影响的一种体验是:携带寻呼机。当我必须支持我编码的系统时,它会改变我编码的方式。也就是说,我以这样的方式编码,以防止该寻呼机熄灭。结果是产品质量更好,通常代码质量也更好。我见过的那些从未携带过寻呼机的编码器产生的代码更脆弱。在他们获得支持之前,他们甚至无法理解和改进这一点。

答案 8 :(得分:6)

越早发现错误/缺陷,修复越便宜,因此使用这笔资金雇佣更多的qa人与其他开发人员相比,由于从DEV到QA的次数多少,您将花费更多的时间/金钱。

话虽如此,对编程并不适合所有人,有些开发人员配对不好,他们互相分散注意力,把所有时间花在战斗上等等。

如果您有可以配对程序的开发人员,那么从长远来看,当您添加更易维护的代码,更低的缺陷以及更少的QA时间,以及最重要的是如果其中一个开发人员被公交车,你不必等待有人在项目上做更多工作之前加快速度。

如果您的开发人员无法配对计划,请不要强迫他们加入计划,您所要做的就是浪费时间和金钱。

答案 9 :(得分:6)

结对编程可能非常有效,但是你不应该成对雇佣程序员。你不能强迫开发人员配对程序。它只适用于两个开发人员单击并决定他们可以相互学习并构建一起非常棒的东西。我的建议是雇用尽可能多的最聪明的开发人员,并将其置于一个自然有助于鼓励兼职配对编程的环境中。开发人员需要能够单独编码,但也要与团队中的其他人讨论它。

找到适合您和您公司的合适组合将更多的是艺术而不是科学,当然也不是盲目地遵循某些已发布的方法的要求。

也就是说,你在签入之前压扁的bug越多,从长远来看你节省的就越多。让另一位开发人员在构建一些东西时看起来总是比在之后使用测试器黑盒子更有效。我称之为花钱。

答案 10 :(得分:4)

结对编程不会使成本加倍 - 它只是将输入量减半。打字不是编程。完成软件中的功能是编程。这是解决问题的方法。您不能只在键入的代码行中测量它。一些程序员会使用更好的算法,因此最终输入的内容会减少。

您如何定义物有所值?可能在编码和已完成的实时工作功能之间经过了总时间?

不配对的成本通常不会被正确计算:问题是,大多数人都没有衡量缺陷的数量或修复工作所需的额外时间首先正确完成 - 他们只是衡量首先“把工作扔到栅栏上”所花费的时间。

在削减时有一些尝试衡量生产力的尝试,但不幸的是它与“交付的代码行数”有点紧张 - 这是一个虚假的指标。

您可能会发现此研究相关: http://collaboration.csc.ncsu.edu/laurie/Papers/XPSardinia.PDF

答案 11 :(得分:4)

使用结对编程进行的第一个假设是,故事卡的开发成本会高出两倍。这个假设是错误的。这就是为什么?

  • 提高质量:在同一故事卡上工作的一对活跃程序员将完成卡片的缺陷更少
  • 提高生产力:如果在解决问题时没有完全阻止,则一对不太可能减速。此外,当您与合作伙伴合作时,更难以接受电子邮件或网络假期......您不想让合作伙伴失望。您将以更简洁的设计解决问题,并在成对工作时减少代码行数
  • 消除知识孤岛:通过轮换对,您将学习整个团队的应用程序和域业务知识。由于Sue在度假时没有其他人知道她的代码,所以团队不太可能被阻止。
  • 知识转移:轮换对在他们协同工作时互相教授新技能(工程和域名)。每个人的团队水平都会提高,知识会通过团队传播。
  • 团队自我选择:团队学习一个花药的技能,并迅速淘汰一些没有表现的人。

根据实际经验,我们发现缺陷显着下降。可以在不降低团队速度的情况下添加新团队成员(尝试使用非配对团队)。对于试验,一个团队估计了一组故事卡的工作,好像六个单独的开发人员将单独完成代码。然后告诉六位开发人员配对。他们按时完成了高质量的工作。如果你不配对,你花费很多时间来提供低质量,你没有办法扩展,你有太多的专业知识孤岛。

在第二个例子中,我们估计在要求的时间内完成工作我们需要从4对到7对的团队。我们给了自己一个月的新配对。我们将一位新开发人员与一位经验丰富的开发人员配对,并在故事卡中轮换对。该团队在计划的时间内以质量达到了所有可交付成果。如果没有配对,就不可能将6位开发人员添加到8位开发人员的团队中并达到目标!

最重要的是,您将通过配对节省资金。您将花费大约相同的时间,以更高的质量交付,提高团队绩效,技能和知识,并淘汰死木。您的节省将以可持续的速度进行,并且减少团队速度减慢的缺陷显着减少。

答案 12 :(得分:3)

来自其他许多行业的质量管理经验告诉我们,缺陷预防从长远来看比缺陷检测(也称为QA)和随后的修复更便宜。

他们还了解到,长期的范围在大多数情况下为1至2年,这意味着您的投资在此之后会有所回报。考虑到这种规模的投资通常预计会在4年后达到收支平衡,这是非常好的!

问题在于,其他行业需要花费数十年的时间来积累足够的数据才能证明这是他们的情况。您可以轻松找到支持其结论的数据,并以类似的方式得出软件的结论,但截至今天,没有证据证明软件业务。

话虽如此,我相信类似的结论是有效的:一对开发人员和一名测试人员比一名开发人员和两名测试人员更有效率。

如果你有两个昂贵的开发人员坐在一台计算机前面来管理这个问题,那么还有很多其他的东西可以帮助预防缺陷,但对管理层来说并不那么明显(因此也很烦人)。

答案 13 :(得分:3)

当我在朋友的船上编程时,我们并不总是有时间,因为我们其中一人正在航行,而另一人正在编码。然而,当我们锚定或在平静的水中,我们可以做结对编程,它工作正常。

答案 14 :(得分:3)

前提是你的生产力超过两倍。部分增益是立即实现的(例如,在检入代码之前),当错误和故障较少时,部分进一步实现。

当我教两个学期的学生经验时,对于大多数人来说他们的生产力超过两倍,因为他们互相问问题,他们学习和完成得更快。但这并非普遍存在;一对不匹配的对可能需要更长的时间,并且比技能更高的一半更差。

答案 15 :(得分:2)

男人没办法!在我正在工作的公司里,我们练习了很多配对编程!它让事情变得非常快速且真正有效!试一试!你以后会评价它!

答案 16 :(得分:2)

来自北卡罗来纳州立大学的Laurie Williams教授是学术界关于结对编程有效性的主要权威,她对此进行了大量研究。

如果您想要“官方消息”,请访问她的publication列表。

她的文章:“加强对编程案例”非常有名。

答案 17 :(得分:2)

这取决于开发人员。不幸的是,您不能只是将任何两个开发人员聚集在一起并期望及时,高质量的结果。并不是每个人都会因为配对编程而被淘汰,甚至不适合在敏捷开发环境中工作。关于配对编程的两件事我认为值得:(1)开发人员之间的交叉培训; (2)实时同行评审。交叉培训将有助于加强整个团队的技能,实时同行评审可以消除正式同行评审的需要。多年来,我从同龄人那里学到的东西比我在技术培训上学到的更多。

答案 18 :(得分:1)

它不是黑白相间的东西,也不是任何类型的银弹,都是结对编程的概念。

对编程通常由于各种原因非常有效,但做得正确它也非常耗费(在我看来任何方式) - 意味着一对好的对可能最多每天花几个小时编程。当然,这应该受到鼓励,但不是强制性的,特别是在100%的时间内没有强制要求,因为这似乎难以管理(持续有效且无论如何都没有啤酒)。

因此,结对编程只是解决问题的一种方式,我发现很难从问题的角度来看待它。这并不是说你需要雇佣两倍的开发人员。这就像想知道是否值得雇用一个消息的男孩/女孩让同一部门的两名员工互相交谈......当明显的解决方案是让他们直接与对方交谈而不需要额外的信使。

答案 19 :(得分:1)

除非你是一个非常小的商店,否则你可能已经支付了两个程序员的工资。结对编程只是(理论上)在相同的时间内从这两者中获得更多调试和工作软件的一种方法。

答案 20 :(得分:0)

我还没有完成统计数据 - 我怀疑你在进行统计学上有效的研究时遇到了困难 - 但要记住生成工作,没有错误的表面目标代码 - 不仅仅是代码数量。一个好的对应该能够创建至少与两个独立工作的程序员一样多的正确的代码。