为什么说“过早优化是万恶之源”?

作者:亿网科技  来源:亿网科技  发布时间:2023-04-04

23.png

Donald Knuth(高德纳)是一位计算机科学界的闻名学者和计算机程序设计的前驱之一。他被誉为计算机科学的“圣经”《计算机程序设计艺术》的作者,提出了闻名的“大O符号”来描绘算法的时刻杂乱度和空间杂乱度,开发了TeX系统用于排版科技文献,获得过图灵奖、冯·诺伊曼奖、美国国家科学奖章等多项荣誉。今日要说的便是他所提出的一条软件设计重要原则 Premature optimization is the root of all evil 过早优化是万恶之源。

  为什么说“过早优化是万恶之源”? 我以为过早优化代码会让人堕入到过错的方针中去,然后忽视掉了最重要的方针。举个很简单的比方,你需求快速构建一个产品来抢占用户,你当下最重要的方针是让这个产品快速上线,而不是把这个产品打造的好用(在我国互联网下,这样的事数不胜数),假如你只重视到后者体会、功能问题而忽视了速度,在当下高度竞争的商场之下,你底子毫无机会。

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

添加代码的杂乱性:过度优化或许会导致代码的杂乱性添加,然后下降代码的可读性和可保护性。假如代码过于杂乱,或许会导致开发人员难以理解和保护代码,然后添加开发本钱和时刻。

消耗开发时刻和资源:过度优化或许会导致开发人员花费很多时刻和资源在代码的功能优化上,而疏忽了其他重要的开发任务。这或许会导致项目进度延误和开发本钱添加。

下降代码的可移植性:过度优化或许会导致代码的可移植性下降。假如代码过于依赖于特定的硬件或操作系统,或许会导致代码无法在其他环境中运行。

下降代码的可扩展性:过度优化或许会下降代码的可扩展性。假如代码过于依赖于特定的算法或数据结构,或许会导致代码无法适应未来的需求变化。

过早优化的典型事例
  在软件工程史上由于过度重视软件功能导致项目终究失利的事例比比皆是,比方我下面要说的一些项目,在软件工程史上都是十分知名的项目(当然或许有些新生代程序员现已不知道了)。

IBM OS/360操作系统:在20世纪60年代,IBM公司开发了OS/360操作系统,这是其时最大的软件工程项目之一。在开发过程中,IBM公司过于重视代码的功能问题,导致代码的杂乱性添加,开发时刻延误,终究导致项目的失利。我知晓这个项目仍是在我最近在阅览的一本软件工程经典书籍《人月神话》中,也引荐咱们阅览下,这个项目虽然终究失利了,但也给整个软件工程范畴留下了宝贵的经验。

Netscape Navigator浏览器:在20世纪90年代,Netscape公司开发了Navigator浏览器,这是其时最盛行的浏览器之一。在开发过程中,Netscape公司过于重视代码的功能问题,导致代码的杂乱性添加,开发时刻延误,终究导致浏览器商场份额严峻下降。

Windows Vista操作系统:在21世纪初,微软公司开发了Windows Vista操作系统,这是其时最大的软件工程项目之一。在开发过程中,微软公司过于重视代码的功能问题,导致代码的杂乱性添加,开发时刻延误,终究导致操作系统的用户体会不佳,商场反响不佳。话说这个操作系统我还用过呢,用户界面仍是很漂亮的,很多UI设计也被沿袭到了Window7中。

怎么辨认过早优化
  在软件开发过程中,怎么判别是否过早优化呢?这里有一些概括性的判别标准,能够简单参考下:

是否存在功能问题:假如代码还没有功能问题,那么过早优化便是不必要的。因而,在进行优化之前,应该先测试代码的功能,确认是否存在功能问题。

是否优化了未来或许发生的问题:假如优化的是未来或许发生的问题,而不是当时存在的问题,那么就或许是过早优化。在进行优化之前,应该优先考虑当时存在的问题,而不是未来或许发生的问题。

是否牺牲了代码的可读性和可保护性:假如优化代码会导致代码的杂乱性添加,下降代码的可读性和可保护性,那么就或许是过早优化。在进行优化之前,应该优先考虑代码的可读性、可保护性和可扩展性。

是否糟蹋了很多的开发时刻和资源:假如优化代码会糟蹋很多的开发时刻和资源,而不是进步代码的功能和效率,那么就或许是过早优化。在进行优化之前,应该评估优化的本钱和收益,确认是否值得进行优化。

  判别是否过早优化需求根据具体情况进行评估。在进行优化之前,应该先测试代码的功能,确认是否存在功能问题。同时,也应该优先考虑代码的可读性、可保护性和可扩展性,防止过度优化。

总结
  作为一名在IT范畴摸爬滚打多年的工程师,我深有体会地认识到过早优化是软件开发中的一大陷阱。在软件开发的初期,咱们或许会过于重视代码的功能问题,而疏忽了代码的可读性、可保护性和可扩展性。这种做法或许会导致代码的杂乱性添加,下降代码的可读性和可保护性,甚至或许会糟蹋很多的开发时刻和资源。

  在软件开发过程中,咱们应该防止过早优化,而是优先考虑代码的可读性、可保护性和可扩展性。当需求进行功能优化时,应该在代码的基础上进行优化,通过分析功能瓶颈、优化算法和数据结构等方法来进步代码的功能和效率。同时,咱们也应该意识到,功能优化并不是软件开发的仅有方针,咱们还应该注重代码的可读性、可保护性和可扩展性,以便保证代码的质量和可靠性。