稳定的系统与更好的设计

时间:2009-09-28 11:24:33

标签: optimization stability

在每日工作中,我遇到了这个困境:

“稳定的系统与更好的设计”

在我修理某些模块的日常工作中,当我看到糟糕的设计时

- >写得不好的代码

- >写得不好的算法

- >可以优化

我更愿意修复这些以及我正在修复的问题

但很多人反对我的改变一些支持,反对的人会说

“如果系统稳定,你应该以业务为导向,如果你改变某些东西可能会导致回归,因此不喜欢业务”

一段时间:

6个月后你会看到你自己的书面代码,总是你会看到一些改进的机会

虽然谁支持会说:

这是持续改进,系统将更加稳定

所以我想知道你们的想法

9 个答案:

答案 0 :(得分:7)

如果适用,请编写单元测试(或几个,以覆盖边缘情况)。这让你有信心重构并知道你没有破坏任何东西。

当然,如果代码紧密耦合(或意大利面条!),那将是一个问题。

答案 1 :(得分:5)

如果没有损坏,请不要修理它 - 包装它。尽可能多地隔离模块而不改变其实现;当真正需要出现时,应该触及(固定,改进)它们。

答案 2 :(得分:2)

我的意见是,如果旧代码看起来不完美,除非它的编写方式干扰你当前的任务,否则不会修复它。

大多数代码写得很糟糕。这是事实。如果您不是一个完美的团队,对质量价值的完美理解以及对实现和保持质量水平的方法的一致意见,那么您的优化不会改变整体情况。你现在可以解决一些事情,但下一个人会把事情搞得一团糟。

答案 3 :(得分:1)

我得出的结论是,在这个行业中如果没有破坏,除非有充分的理由,否则不要修理它。

答案 4 :(得分:1)

如果您完全了解该应用程序,或者拥有全面的单元测试和时间来在非生产环境中测试应用程序,那就去吧。否则,只在必要时进行。

答案 5 :(得分:1)

两者都是正确的,没有简单的方法。

如果您在遇到问题时没有解决问题,则不会解决所有问题。

如果您使用与目前正在处理的问题没有100%相关的修复方法进行破解,那么人们会讨厌您。

另一方面,如果你修复了一些无辜的代码(或者代码看起来很无辜)并且它以意想不到的方式破坏了,你就会发现一些有价值的东西:脆弱的代码。脆弱的代码通常是没有人敢触摸的东西。但是为了让你的产品更稳定,你必须摆脱这样的代码。这条路的第一步就是找到它。

我不得不承认,这样的修复会导致团队中出现很多“不必要的”摩擦。当你触摸脆弱的代码时,人们会对你大喊大叫,因为他们害怕。通常,这些代码会吹到客户面前,因此您将从各个方向获得热量。

所以这真的取决于你想要引起多少痛苦以及你愿意忍受多少痛苦。如果你在遇到它时修复了所有内容,那么到今年年底代码会更好。但到今天结束时往往会更糟。

答案 6 :(得分:1)

我希望将所有“如果它没有破坏,不修复它”的答案排在第二位,但需要相关链接......

Things You Should Never Do, Part 1 - Joel Spolsky

实质上 - 有时候难以理解的代码实际上是一个你无法理解的必要的错误修正。

答案 7 :(得分:1)

一方面,改变已经或多或少工作的代码可能会有破坏事物的风险,并且很容易成为一项耗费大量的任务。

另一方面,由于担心维护错误代码的负担,因为担心破坏事物而单独留下不良代码会扼杀新的开发。

有时代码看起来很糟糕,因为它必须处理复杂的极端情况,如Joel Spolsky points out,并且重写它会因为未能覆盖那些极端情况而产生错误。有时代码看起来很糟糕,因为它确实很糟糕,重写它可以修复你甚至不知道的错误。使用代码库的经验可以帮助您确定哪个代码是哪个。

Boy Scout Check-Ins中,杰夫·莫泽(Jeff Moser)讨论了“总是让露营地比你发现它更清洁”的想法。即使你无法解决所有问题,也要始终让代码库比你找到的更干净;随着时间的推移,这些微小的改进会增加。

正如在this answer中所说的,单元测试是一件好事。 Michael Feathers的Working Effectively with Legacy Code是这个主题的重要资源。

答案 8 :(得分:0)

我个人倾向于花时间修理东西,而不是继续完成所需的任务。不幸的是,很容易开始修复看起来像一个容易出问题的问题,并解开你当时希望没有的大混乱。

我还与那些反过来的人一起工作,只要完成工作就可以忍受坏事。

通常情况下,您可以花费多年时间“正确地做些事情”,以便将来更轻松地使用,并且您会发现代码在将来不会被重复使用。

我认为最重要的是要对您的团队保持平衡,与他人定期讨论并最终满足您项目的要求,因为这是客户支付账单。

对于您发现的任何问题都要有建设性 - 不要只是为了它而挑选漏洞!团队代码审查有助于改善不良代码,因为糟糕的程序员将开始了解如何制作出良好的代码。

我建议用“TODO”评论标记坏代码,然后在稍后/预算允许的情况下返回修复它。至少你有一个潜在问题区域的标志,而不必(可能)浪费时间在那里不需要的修复上。