结对编程可能有哪些缺点?[关闭]


22

结对编程在当今非常有名。

它具有以下优点:

  1. 错误较少的程序。
  2. 后期制作维护成本要少得多。
  3. 既定的做法受到挑战,导致出现新的想法。
  4. 程序员可以互相学习。
  5. 程序员发展软技能。

但是结对编程的缺点是什么?


1
问题标题中的“平行”是错字吗?
5gon12eder 2016年

14
您是说除了两个人才能产生相同(可能更少)输出的事实之外?
罗伯特·哈维

4
@ThorbjørnRavnAndersen可能更少了。
罗伯特·哈维

4
@ThorbjørnRavnAndersen数学有问题。基本上,您的意思是您一直在同行/代码审查中。 很难想象这会节省更多时间。
罗伯特·哈维

5
这可以很容易地完成,而不会分散成对的编程程序。只需根据需要与您的其他软件开发人员合作即可。
罗伯特·哈维

Answers:


28

尽管结对编程赢得了相当大的声誉,但它也有一些陷阱。

其中一些如下:

  1. 在成对编程中,您不能坐下来对自己的代码进行自我评估。
  2. 一对中的一个可能会停止积极参与。
  3. 驾驶员需要“大声编程”。静默编程会降低收益。
  4. 产生相同功能需要花费更多的工时。必须在代码质量和增加的编码成本之间保持平衡。
  5. 当有经验的程序员和新手程序员配对时,可能会出现“监视大师”现象。新手成员可以成为观察者,而经验丰富的成员可以完成大多数编码工作。
  6. 当两个经验丰富的用户配对时,可能会出现“开发者的自我”现象,每个成员都试图推动自己的想法。

4
2和5可以通过Ping-Pong配对来解决(在TDD周期内,锁定和快速地在驱动程序和导航器之间切换角色:Alice编写失败的测试,Bob编写代码使测试通过,Alice重构,Bob编写失败的测试,爱丽丝编写代码以通过测试,鲍勃重构,爱丽丝编写失败的测试……)。这样,驾驶员和导航员最迟每隔几分钟(更像是几十秒)切换一次角色,并且每个成员都承担着同样大而重要的任务。
约尔格W¯¯米塔格

5
4听起来很明显,但我不确定。例如,捕获错误并及早获得反馈实际上可能(或可能没有)弥补开发人员工作时间的翻倍。
约尔格W¯¯米塔格

4
@JörgWMittag(回复:乒乓球配对)听起来像是一个工作日压力很大的秘诀:/我希望我永远不必在他们执行这种或任何严格配对编程方法的地方进行编程。
安德列斯·F

4
乒乓编程要求所涉及的两者在本质上是可以互换的。我有一个同事,唯一明智的结对编程组合是让他思考,然后我打字(和思考)。它可以帮助他保持专注,让我了解发生了什么。
托尔比约恩Ravn的安徒生

3
您还可以提到,浪费大量时间讨论琐碎的细节,而在代码审查中,您只能专注于重要方面。
乔治(Giorgio)

24

我已经尝试过多次进行配对编程,包括在一个组织中(简短地)考虑将其推广为所有工程师的强制性过程(您可以猜出这个想法的进展程度如何)。我个人讨厌它。

我在下面列出的原因仅是我的主观经验,我无法具体地“衡量”它们的影响。但是这里它们都是一样的:

1-仅当前者发声而后者会听时,才有“导航员”和“驾驶员”才有帮助。

我们都遇到过固执,对某种理论上的关注热心或在病理上无法(心理上)无法在有人提出问题时“扔掉”旧开发人员的开发人员。我们都知道,个人太胆小或无所顾忌,无法引起关注或提出极端案例。

当这些开发人员配对时,导航器迅速扮演被动角色,而最终的结果是通过自动代码审查进行唯一编程。这是对资源的巨大浪费。

2-配对会阻碍创造力。

与以前对“集体讨论”价值的看法相反,如今的共识是,创造性知识工作需要独立性自主性。当您一个人工作时,您可以迅速总结出一些疯狂的想法,看看它是否切实可行。您可以无言以对地组装一些奇怪的原型,如果失败了就没关系,因为没人知道

将其与配对进行比较:当我想尝试一些新概念时,我必须说服我的伙伴,逐步地与他们讨论实现,并希望他们不会对我进行评估,如果失败了。这种环境对创造新想法是有害的

3-最低公分母设计。

当一对不能像上面那样提出新的想法时,或者当个人不能就应如何设计功能的某些基本原则达成共识时,就会出现一个混乱的设计,试图折衷并满足所有人。

如果您将一个开发人员构建了出色的,雄辩的,面向天空的功能性编程抽象,并将它们与快速而肮脏的性能怪胎结合在一起,那么他们将共同生成的代码通常既不会非常优雅,也不会特别快。

4-缺乏自治权和暴力透明度。

暴力透明性是我从与Scrum方法论相对适度著名(且颇具争议)的争论中选择的一个短语。它描述了一些组织如何使开发人员幼稚化,并以通常为非专业工作者保留的怀疑态度对待他们。

无论您如何考虑使开发人员的工作完全透明的“危害”(您可能不同意这实际上是危害),许多人都珍视自己的自主权和独立工作的能力,并相信自己做正确的事。这是一个重要的心理需求,迫使开发人员结对(如我所见,至少在一家商店中发生过)将使员工感到沮丧,沮丧和疏远。

5-有些开发人员不能很好地配对使用。

有些人不会或不能在成对的环境中适当地表现自己。他们可能有不良的卫生习惯,不良的工作习惯,个性化的磨擦,“大声”和“紧张”的态度,或者还有其他许多特征,使他们成为优秀的个体工人,但对程序员却很差。

你能解决这个吗?并不是的。改变个人行为很难。结对编程的商店在招聘时需要非常小心,并花费大量时间来了解某人的工作方式以及他们是否能够与同龄人一起工作。但是,对人格进行更严格的歧视意味着除非您放松对技能和专业知识的标准,否则招聘将需要更长的时间。


3
尽管我确实喜欢“暴力透明”一词,但根据我的经验,首选的方法(scrum /敏捷或更传统的方法)与开发人员是否被视为专业人员无关。功能失调的组织会像对待孩子一样对待专业人员,无论他们(假装)遵循Scrum还是CMMI。
大卫,

1
“将其与配对进行比较:当我想尝试一些新概念时,我必须说服我的合作伙伴,逐步进行实施,并与他们交谈,并希望他们在失败时不会判断我。环境的破坏对创造新的想法是有害的。”:这不仅与判断有关,而且与速度有关。当您有一个想法时,您不希望分心,只要流淌下来,就尽可能地写下来。结对编程会积极阻止您执行此操作。
乔治

1
写下所有想法后,您可以整理它们,也许第二天再整理一下,然后,让同事进行彻底的审查,例如使用诸如审查委员会之类的工具,以便他们有足够的时间来查看您的想法。完成想法并在没有时间压力的情况下进行思考。结对编程还可以防止这种情况,因为它试图将编码和代码审查合并为一个活动。
Giorgio

2
@吉米:如果您写了五个答案,而不是一个满分为五分的答案,您将得到我五个赞誉。
Giorgio

绝对同意,实验需要安静且快速的工作-与配对要求完全相反。配对对于开发人员执行维护或向大型现有企业系统添加离散功能的开发人员来说可能效果很好。但我敢肯定,对于需要发现,新技术,独创性或创造性方式来解决困难的工作,这根本没有用。
吉米·布雷克-麦凯

12

取决于您的情况或观点。

结对编程对组织有利。但是对个人有益吗?

毕竟,这是一种节省成本(早期反馈)和提高生产率的方法;与您无关,但与项目,产品,公司($$)有关。

尽管您可以获得个人利益,但它们并不是任何开发方法的原因或终点。例如,(全职)结对编程还可以阻止您放松,冲浪等,您必须向伴侣证明自己的停顿是合理的。

您(轮换)的合作伙伴将是最好的监控摄像机:工作强度增加。

或者,通过分配知识,个人对公司的风险降低(例如,不能离开公司获得基本知识),并且“议价筹码”更少。

我相信您可以通过从公司的实际情况/立场而不是从经理的角度更严格地阅读肯定的文章来找到更多要点。

几乎所有方法都是从经理的角度编写的。


除非您拥有公司,否则您将获得产生代码的金钱。更好的代码可以为您的雇主带来更好的收益-我认为以某种方式对您的雇主进行讨价还价的筹码是我不了解首先让您变得有价值的原因。我相信PP太密集了,您一整天都不能做,但是会自动需要休息。
托尔比约恩Ravn的安徒生

7
由于有些人被迫以“对雇主有价值”为生,因此他们也必须自私地进行计算,不仅要像奴才一样考虑到雇主的利益。
一位客人

1
@ThorbjørnRavnAndersen我们不是生活在理想的世界中,每个人都在纳税,每个人都可以根据自己的功绩获得报酬。

1
@ThorbjørnRavnAndersen更好的代码对我的雇主来说更好?我希望我生活在这样的世界中,在我的世界中,重要的是尽快生成功能,其中代码质量只是一个中间的软值,不应花费比绝对需要更多的时间。错误是可以的,它们通常不严重并且很容易修复。
Alex

@Alex “通常并不严重” -我渴望那个世界:D
Gusdor

5
  1. 您现在突然必须告诉某人何时要上厕所或喝咖啡。至少没有必要征求许可。

  2. 您必须遵守他人的卫生标准。


4

除了其他答案:

  1. 我工作过的许多公司都向他们的程序员提供笔记本电脑(位于客户站点-下班后回家时更容易保护设备安全,能够在紧急情况下在家中通过VPN来完成其他工作)等以前,从肩膀冲浪的角度来看,我已经很难在其他人(“驾驶员”)的笔记本电脑屏幕上看到-年龄不会对此有所改善(在任何情况下,某些屏幕在理想视角之外都难以阅读)。

    因此,结对编程人员将需要足够大的屏幕,这将增加硬件成本并限制对位置的适应性。对于某些人来说可能不是问题,在其他情况下则是问题。

  2. 我还发现,个人卫生偏好(包括吸烟,饮食和饮酒)的差异以及人格冲突必定会影响生产力。告诉两个程序员“吸吮并相处”很容易,通常这将导致人们宁愿闭嘴,并通过消极的攻击性行为默默地破坏对方,以发泄彼此的不满。
  3. 噪声。我一方面喜欢安静的工作环境。我无法想象某些结对编程人员会不断地chat不休(因为您需要进行交流)。即使是耳机上的声乐,也会干扰我的注意力(办公室聆听的乏味乐器...)。我想可以通过从无处不在的开放式办公室转移到专用的2人办公室来缓解这种情况,但这将再次提高成本。

趣闻轶事:

  • 先前的雇主曾经从另一个国家/地区聘请承包商(所有人都保持匿名以保护罪行)。雇主提供住宿,但不提供交通。由于上述承包商一直沿着我的工作路线生活,所以我自愿参加了接他接送他的工作。假设他的个人卫生状况与我以前所接受的标准不同,并且他还大量吸烟(“最强!”),而我却没有。在我们15分钟的办公室旅行中,即使在冬天,我也保持着窗户的滚动状态,即使在冬天,这也没有阻止我的汽车闻起来像是三个月后的陈旧的吸烟室(不,他没有在车内吸烟) ,但他是在等我时做的。
  • 我们也没有进行配对编程,而是在会议桌旁坐了一会儿。大约一个月后,在桌子的人造木头上,同事的鼠标周围有一个漂亮的棕色环。那时,我在呼叫中心开放式计划区域的旁边有一个开放式办公桌,我偏爱它(在耳机的帮助下)。
  • 然后是无处不在的办公饮料:咖啡。尽管我确实喝,但我可以不喝也可以不像其他同事那样经常喝酒。近距离呼吸可能非常令人不适-类似于空的被遗忘的杯子气味。让我们称这款香水为“ muggy” ...

3

我认为结对编程因社会和实际原因而失败。从本质上讲,您是在要求一个人在不断的监视下工作,而另一个则无所事事。

一段时间后不可避免地发生的是,两人分裂为“检查电子邮件”或“您对该现场问题进行了不良检查”等

而不是提高代码输出,而是减少了体积。出于实际原因(“我需要去吃午餐/与您不同步”)和社交活动(生病,我只是想等鲍勃完成他的所作所为,然后再要求再次配对,所以我不想被人as住他)

至于自吹自advantages的优势,有许多常用的方法可以更简单有效地实现这些优势


2

告诉两名高级开发人员是否有信心可以完成工作是“痛苦的编程”,这是最大的缺点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.