中文:吉姆伯德翻译:Linux中国/极客pi

https://linux.cn/article-8916-1.html

该系统可以连续运行5年、10年甚至20年或更长时间。然而,一个特定代码行的生命,即使在设计之后,通常也要短得多:当你以各种方式迭代地寻找解决方案时,它将有几个月、几天甚至几分钟的生命。

有些代码比其他代码更重要

通过研究代码如何随时间变化,迈克尔·费哲确定了代码库的幽灵曲线。每个系统都有代码,通常很多都是写一次就永远不会变的。但是少量的代码,包括最重要最有用的代码,都会被一次又一次的修改,被重构几次或者从头重写。

当你对一个系统、问题领域和架构方法有了更多的经验,就更容易理解和预测什么代码永远会变,什么代码永远不会变:什么代码重要,什么代码不重要。

是否应该尝试写出完美的代码?

我们知道要写干净的代码,代码要一致,清晰,尽可能简单。

有些人把这看得很极端。他们强迫自己写出优美、优雅、近乎完美的代码,痴迷于重构,纠结于每一个细节。

但是,如果代码只写了一次,从来没有修改过,或者在另一个极端,不断的修改,就像努力写出完美的需求,努力完成漂亮的预设计,写完美的代码不是很浪费,没有必要吗?

“你不可能写出完美的软件。你受伤了吗?不是。把它当成生活的公理,接受它,拥抱它,庆祝它。因为完美的软件是不存在的。在计算机的短暂历史中,从来没有人写出过完美的软件。你不可能是第一个。除非你接受这个事实,否则你最终会浪费时间和精力去追逐不可能实现的梦想。”

安德鲁·亨特,务实的程序员:从技术工人到大师

一次写出来的代码不需要漂亮优雅。但必须是正确的,可以理解的——因为永远不会改变的代码,在系统的整个生命周期中,仍然可能被多次读取。不需要干净紧凑——只要干净就好。至少在某种程度上,允许复制粘贴和代码中的其他小剪切。这些都是永远不需要打磨的代码。即使你周围的其他代码在改变,这些代码也不需要重构。这是不值得多花时间的代码。

你一直在修改的代码呢?纠结于代码风格并提出最优雅的解决方案是浪费时间,因为这段代码可能会被再次修改,甚至可能在几天或几周内被重写。所以,每当你做修改的时候,你都会痴迷于重构代码,或者你不会重构没有修改过的代码,因为这样可能会更好。代码永远可以更好。不过没关系。

重要的是:代码做了它应该做的事情吗——它是正确的、可用的和有效的吗?它可以处理错误和坏数据而不崩溃,或者至少安全地失败?调试容易吗?换衣服方便安全吗?这些都不是美的主观方面。这些是成功和失败的实际措施之间的区别。

语用编码与重构

精益开发的核心思想是:不要把时间浪费在不重要的事情上。这应该提醒我们如何编写代码,以及如何重构、审查和测试代码。

为了完成工作,只重构你需要的东西——马丁·福勒称之为机会重构和预备重构。足以让改变变得更容易、更安全,而不是更多。如果不修改代码,就不会像看起来那么重要。

在代码审查中,只关注重要的事情。代码是否正确?有防御机制吗?安全吗?你能理解吗?换衣服安全吗?

忘记代码风格。让您的集成开发环境处理代码格式。不要争论代码是否应该“更OO”。只要有意义,遵循这个模式还是那个模式都无所谓。喜欢不喜欢无所谓。如果你有更好的方法来做到这一点并不重要——除非你教的是对这个平台或语言不熟悉的人,并且你需要在做代码审查时给出一些指导。

笔试很重要。测试涵盖主要流程和重要的意外情况。测试可以让你用最少的工作量获得最多的信息和信心。不管你是大覆盖测试还是小目标测试。只要你坚持做这项工作,不管你是在写代码之前还是之后写测试都没有关系。

代码无关

建筑和工程中的隐喻对软件来说从来都不是有效的。我们不是在设计和建造桥梁或摩天大楼,它们将在几年或几代人的时间里保持基本不变。我们构建的是更灵活、更抽象、更短暂的东西。代码是为了修改而写的——这就是它被称为“软件”的原因。

“经过五年的使用和修改,一个成功的软件程序的源代码通常是认不出它的原貌的,一个成功的建筑在五年之后几乎没有改变。”

凯文·泰特,可持续软件开发

我们需要将代码视为我们工作的临时产物:

有时候面对更重要的事情,我们会迷信代码。我们常常会产生错觉,认为让产品卖得有价值的是代码,但实际上可能是对问题领域的了解,设计问题的进展,甚至是客户的反馈。

丹·格罗弗,《代码与创造性破坏》

迭代开发教会我们去体验和测试我们工作的结果——这个问题我们解决了吗,如果没有,我们学到了什么,如何改进?构建软件没有止境。即使设计和代码是正确的,它们也可能只在一段时间内是正确的,直到环境要求再次改变或被更好的东西取代。

我们需要写好代码:代码易懂、正确、安全、可靠。我们需要重构和审查它,并编写好的和有用的测试,知道这些代码的一部分或全部可能很快被丢弃,或者可能永远不会被再次查看,或者可能根本不会被使用。我们需要意识到我们的一些工作必然会被浪费,并为此进行优化。做该做的,就这样。不要浪费时间试图写出完美的代码。

作者简介:

吉姆·伯德

我是一名经验丰富的软件开发经理、项目经理、CTO,专注于软件开发与维护、软件质量与安全方面的难题。在过去的15年里,我一直在管理建立全球证券交易所和投资银行电子交易平台的团队。我特别感兴趣的是小团队在构建真正的软件时有多高效:在可靠性、性能和适应性的限制下的高质量和安全的系统。

1.《完美代码 不要浪费时间写完美代码(你认同么?)》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《完美代码 不要浪费时间写完美代码(你认同么?)》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/tiyu/1675459.html