乐趣区

关于软件设计:为什么说过早优化是万恶之源

  Donald Knuth(高德纳)是一位计算机科学界的驰名学者和计算机程序设计的先驱之一。他被誉为计算机科学的“圣经”《计算机程序设计艺术》的作者,提出了驰名的“大 O 符号”来形容算法的工夫复杂度和空间复杂度,开发了 TeX 零碎用于排版科技文献,取得过图灵奖、冯·诺伊曼奖、美国国家迷信奖章等多项荣誉。明天要说的就是他所提出的一条软件设计重要准则 Premature optimization is the root of all evil 过早优化是万恶之源

  为什么说“过早优化是万恶之源”?我认为过早优化代码会让人陷入到谬误的指标中去,从而漠视掉了最重要的指标。举个很简略的例子,你须要疾速构建一个产品来抢占用户,你当下最重要的指标是让这个产品疾速上线,而不是把这个产品打造的好用 (在中国互联网下,这样的事不可胜数),如果你只关注到后者体验、性能问题而漠视了速度,在当下高度竞争的市场之下,你基本毫无机会。

  当然下面这个例子是从理性的层面说的,对很多程序猿来说也可能波及不到产品层面的内容。咱们从软件设计的层面,感性的来说,过早优化可能会导致以下的一些问题:

  1. 减少代码的复杂性 :适度优化可能会导致代码的复杂性减少,从而升高代码的可读性和可维护性。如果代码过于简单,可能会导致开发人员难以了解和保护代码,从而减少开发成本和工夫。
  2. 消耗开发工夫和资源 :适度优化可能会导致开发人员破费大量工夫和资源在代码的性能优化上,而疏忽了其余重要的开发工作。这可能会导致我的项目进度延误和开发成本减少。
  3. 升高代码的可移植性 :适度优化可能会导致代码的可移植性升高。如果代码过于依赖于特定的硬件或操作系统,可能会导致代码无奈在其余环境中运行。
  4. 升高代码的可扩展性 :适度优化可能会升高代码的可扩展性。如果代码过于依赖于特定的算法或数据结构,可能会导致代码无奈适应将来的需要变动。

过早优化的典型案例

  在软件工程史上因为适度关注软件性能导致我的项目最终失败的案例亘古未有,比方我上面要说的一些我的项目,在软件工程史上都是十分出名的我的项目(当然可能有些新生代程序员曾经不晓得了)。

  1. IBM OS/360 操作系统 :在 20 世纪 60 年代,IBM 公司开发了 OS/360 操作系统,这是过后最大的软件工程我的项目之一。在开发过程中,IBM 公司过于关注代码的性能问题,导致代码的复杂性减少,开发工夫延误,最终导致我的项目的失败。我通晓这个我的项目还是在我最近在浏览的一本软件工程经典书籍《人月神话》中,也举荐大家浏览下,这个我的项目尽管最终失败了,但也给整个软件工程畛域留下了贵重的教训。
  2. Netscape Navigator 浏览器 :在 20 世纪 90 年代,Netscape 公司开发了 Navigator 浏览器,这是过后最风行的浏览器之一。在开发过程中,Netscape 公司过于关注代码的性能问题,导致代码的复杂性减少,开发工夫延误,最终导致浏览器市场份额重大降落。
  3. Windows Vista 操作系统 :在 21 世纪初,微软公司开发了 Windows Vista 操作系统,这是过后最大的软件工程我的项目之一。在开发过程中,微软公司过于关注代码的性能问题,导致代码的复杂性减少,开发工夫延误,最终导致操作系统的用户体验不佳,市场反应不佳。话说这个操作系统我还用过呢,用户界面还是很漂亮的,很多 UI 设计也被沿用到了 Window7 中。

如何辨认过早优化

  在软件开发过程中,如何判断是否过早优化呢?这里有一些概括性的判断规范,能够简略参考下:

  1. 是否存在性能问题 :如果代码还没有性能问题,那么过早优化就是不必要的。因而,在进行优化之前,应该先测试代码的性能,确定是否存在性能问题。
  2. 是否优化了将来可能产生的问题 :如果优化的是将来可能产生的问题,而不是以后存在的问题,那么就可能是过早优化。在进行优化之前,应该优先思考以后存在的问题,而不是将来可能产生的问题。
  3. 是否就义了代码的可读性和可维护性 :如果优化代码会导致代码的复杂性减少,升高代码的可读性和可维护性,那么就可能是过早优化。在进行优化之前,应该优先思考代码的可读性、可维护性和可扩展性。
  4. 是否节约了大量的开发工夫和资源 :如果优化代码会节约大量的开发工夫和资源,而不是进步代码的性能和效率,那么就可能是过早优化。在进行优化之前,应该评估优化的老本和收益,确定是否值得进行优化。

  判断是否过早优化须要依据具体情况进行评估。在进行优化之前,应该先测试代码的性能,确定是否存在性能问题。同时,也应该优先思考代码的可读性、可维护性和可扩展性,防止适度优化。

总结

  作为一名在 IT 畛域摸爬滚打多年的工程师,我深有体会地意识到过早优化是软件开发中的一大陷阱。在软件开发的初期,咱们可能会过于关注代码的性能问题,而疏忽了代码的可读性、可维护性和可扩展性。这种做法可能会导致代码的复杂性减少,升高代码的可读性和可维护性,甚至可能会节约大量的开发工夫和资源。

  在软件开发过程中,咱们应该防止过早优化,而是优先思考代码的可读性、可维护性和可扩展性。当须要进行性能优化时,应该在代码的根底上进行优化,通过剖析性能瓶颈、优化算法和数据结构等办法来进步代码的性能和效率。同时,咱们也应该意识到, 性能优化并不是软件开发的惟一指标,咱们还应该重视代码的可读性、可维护性和可扩展性,以便保障代码的品质和可靠性

退出移动版