如何说服同事代码重复是坏的?

时间:2010-11-19 15:08:35

标签: refactoring coding-style copy-paste code-duplication

我的一位同事正在我们共同合作的项目中实现一项新功能,他通过从同一项目中获取包含类似功能实现的文件来创建它,创建一个重命名所有全局声明的副本略微修改实现。所以我们最终得到了两个大文件,除了重命名之外几乎完全相同。

我试图解释它使我们的项目更难维护,但他不想改变任何说他更容易以这种方式编程并且如果它没有理由修复代码“没有打破“。

我怎样才能说服他这样的代码重复是件坏事?

它与this questions有关,但我对针对技术人员(另一位程序员)的答案更感兴趣,例如,对书籍这样的权威来源的引用会很棒。 我已经尝试过简单的参数并且没有成功。

14 个答案:

答案 0 :(得分:26)

问他在他的代码中发现错误时他会做什么。他现在需要在多少个地方修理它?

你也可以向他展示this question的答案(为什么“复制和粘贴”代码很危险?)。

答案 1 :(得分:11)

当他想要咖啡时,让他一次从咖啡壶中啜一口,而不是整杯。如果他添加奶油和糖,这将是必须以微小的部分打扮出来,这是特别有效的。 这应该说明重复性任务是如何非常麻烦和累人的(比如纠正20个代码而不是一个代码)。

然后,向他发送一个链接到这个帖子,这样他就可以看到所有其他有你背影的人。

答案 2 :(得分:10)

这里有两个选项:

  1. 他是一个理性的人,根本没有太多的经验。在这种情况下,您可以合理化您的论点,也许可以通过向您展示代码中其他人的代码重复的更清晰的示例。你也可以在原始副本中找到一个错误(甚至更好,一些错误),并告诉他现在他的代码被破坏了,他必须修复它。

  2. 他是一个顽固的屁股:那你不应该浪费精力在他身上。去找他的老板让老板照顾好。有些人就是这样。

  3. 虽然第一种选择显然要好得多,但有时你却没有选择。如果你最终需要在凌晨3点维护他的代码,因为一些重要的客户开始在地球的另一边喊叫 - 那么这绝对是你的问题,你的老板应该处理它。

    最后,如果你的老板认为你错了,你可能在错误的地方。

答案 3 :(得分:8)

给他一份重构

答案 4 :(得分:5)

改进你的代码版本以至于他对嫉妒感到沮丧,然后说 - 如果你刚刚链接到我的代码......

答案 5 :(得分:3)

因为当您发现错误时,您需要在两个地方进行更改。因为当您想要添加新功能时,需要将其添加到两个位置。

答案 6 :(得分:3)

你的同事通过牺牲更长时间来优化他的短期效果 组织的有效期(例如,他的其他同事) 作为他自己)。第一个文件中需要进行任何更改 可能需要在第二个,但没有人会记得......和 这将导致2个循环的查找和修复,而不是一个。

您可以在代码上运行克隆检测器,只需将结果展示给他的经理。

请参阅Wikipedia on duplicate code以获取列表。

您可以使用我们的CloneDR检测器查看各种语言的克隆检测样本。它是专门设计的 找到一个具有一致重命名的大块代码,它可以 准确地说明发生了什么。

答案 7 :(得分:2)

出于技术原因向你的老板提出上诉。如果老板同意你的同事的方法/和/或没有让他解决它,那么如果对理性的诉求不起作用,你就可以做很多事情。

答案 8 :(得分:2)

这不是让你的朋友现在解决这个问题。这是关于发展你的团队。

让他意识到他对团队不公平。该项目。如果他仍然不同意,请给他一杯咖啡,让他坐下来啜饮它,同时你可以拿起他的键盘,然后将代码固定在他面前。

他可能会感到羞耻,而不是下次(大赢)。我已经使用过4次了,它一直都有效!

祝你好运。

答案 9 :(得分:2)

有很多正当理由不重复代码,但只是问......您的团队是否希望维护100K行代码(带代码重复)或50K行代码?在这一点上,代码重复可能看起来很小,这就是为什么你的同事没有看到DRY概念的重要性,但想象一下他/她是否会在接下来的5年内复制越来越多的代码。谁将维护该代码?你的团队?如果他/她有一天离开工作怎么办?你的团队想要保持这种废话吗? :)如果没有,那么你已经提出了一个非常有说服力的案例,不要复制代码,更不用说“更多重复”=“将来更容易出现更多错误”。

答案 10 :(得分:1)

告诉他你永远不知道一个应用程序可以在一个企业中运行...一个简单的测试应用程序有时可以反复修改,最后会被大量使用...我经常在小公司。然后,你可以简单地完成现在,简短而甜蜜的工作,而不是开始每一次并且浪费时间在以前可以解决的事情上,而不是一件事......而是可以... ...

答案 11 :(得分:1)

他可能认为它不会破坏,也不会。而且,完美是善的敌人。我认为他不会忘记复制/粘贴的危险,他只是对错误的可能性进行了不同的评估。

也许你可以为他打破它,表明它是多么容易。如果你做不到,也许他是对的。

答案 12 :(得分:1)

如果他是你的上级(或主管),请提出更多解释 - 可能更多地了解上下文...也许不值得重构代码(可能是一个小项目)。

如果他与你相同,你可以通过提出这个解决方案(这是一个更好的解决方案)向你的上级报告。

如果你优于他,只要“问”他按你的方式行事......

答案 13 :(得分:0)

首先,承认他是对的:复制粘贴确实更快现在

然后,说从长远来看问题是成本,并且由于复制,成本会增加,因此系统的有序性不是很高。他正在引入混乱,混乱,你的紊乱越多,使用系统就越困难。现在应用一些努力来更好地组织它将(通常)长期回报。这就像保持桌面或房间井井有条。

这是Ivar Jakobson关于software entropy

的想法