一般来说,一个系统可以用5年,10年,甚至20+年。但是特定的一行代码和特定的设计往往更短:当我们使用不同的解决方案时,它的生命周期可能只有几个月、几天甚至几秒钟。有些代码比其他代码更重要通过研究代码如何随时间变化,MichaelFeathers确定了代码库的功率曲线。每个系统都有代码,通常里面有很多代码,一旦写好,就永远不会改变。但仍有少量代码,包括最重要、最有用的代码,会一遍又一遍地更改、重构甚至重写。随着您在系统、问题域和架构方法方面的经验的增长,了解和预测哪些代码将始终更改以及哪些代码永远不会更改变得更加容易:一些代码比其他代码更重要。我们应该写***代码吗?我们知道我们应该编写干净的代码、一致的、可理解的并且尽可能简单。有些人因此走上了极端,强迫自己写出尽可能漂亮优雅的代码,执着于重构,却在每一个细节上苦苦挣扎。有些代码只需要编写一次,永远不需要再更改。但是有些代码不是这样的。试想一下,这些需要不断修改的代码,写得这么辛苦,下一秒又马上删掉,岂不是太浪费了?而且没有必要。“你不必写所谓的黑客软件。不是禁止你,只是真的没有必要。考虑一下并接受这一点。你需要明白黑客软件实际上并不存在。没有人写出最好的软件。难道你不认为你应该是第一个吗?除非你接受这个事实,否则如果你追求不可能的事情,你最终会浪费你的时间和精力。梦想成真。”——AndrewHunt,《The Pragmatic Programmer: from Journeyman to Master》的作者一次就能解决的代码,不需要漂亮优雅,只要正确易懂即可——因为这些不变的代码以后可能会解决,以便多次阅读。它也不必既干净又紧——只要干净就行。此类代码允许使用复制和粘贴等快捷方式,至少在一定程度上是这样。这段代码不需要重构(除非你需要改变它),即使它周围的其他代码不断变化。总之,代码不值得我们花额外的时间在上面。至于不断变化的代码?试图找出最优雅的解决方案是浪费时间,因为代码很可能在几天或几周内被重写,甚至重写。所以我们需要重点关注的是:这段代码是否按预期工作——是否正确、实用、高效?异常数据能否在不崩溃的情况下处理?——或者至少可以毫无问题地完成吗?容易调试吗?它可以轻松安全地更改吗?这些有形的措施是成功与失败的区别。编码和重构要务实精益开发的核心思想是:不要把时间浪费在不重要的事情上,包括写代码、重构、代码审查、代码测试。只重构真正需要的部分就足够了——这也被MartinFlower称为机会主义重构和准备重构。关于代码审查,你只需要关注重要的部分。这些代码是否正确?安全吗?它有效吗?不要关心风格(除非风格本身妨碍了我们的理解)。让IDE做主,格式化会被处理。我们不必讨论代码是否可以更OO,也不必遵循某种风格,喜不喜欢无所谓,能不能以一种方式解决也无所谓。更好的方法——除非你在教新手并且需要做一些指导作为代码审查的一部分。测试也应该选择关键的。测试应涵盖主要路径和重要异常。不管是大测试还是小而集中的测试,不管是写在代码之前还是之后,只要能用就行。这不仅仅是关于代码。软件开发总是在不断迭代中。即使它的设计和代码现在是正确的,过一段时间后,它也会被要求改变或直接被其他更好的替代。我们需要编写好的代码:易于理解、正确且安全。当我们重构和审查代码,编写有用的测试时,我们还需要牢记一些代码,甚至全部代码,在不久的将来将被丢弃,或者永远不会被再次阅读,或者永远不会被再次使用。我们必须认识到,我们现在所做的一些工作将付之东流。做需要做的事,仅此就足够了。不要浪费时间写所谓的***代码。英文原文:Don'tWasteTimeWritingPerfectCode
