过早优化是罪恶之源

Premature optimization is the root of all evil

Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.

In established engineering disciplines a 12 % improvement, easily obtained, is never considered marginal;

—Donald Knuth 1974 《使用 goto 语句的结构化编程》

保持简单

简单化(避免复杂)永远都应该是你的头等目标。简单的程序让你写起来容易,bug更少,更容易维护修改,不要开发你当前用不到的功能。

用最简单的办法让程序跑起来,这是你需要常常问自己的,也是第一点的实践保证

避免过早的优化

  • 只有当你的程序没有其它问题,只是比你预期要慢时,你才能去考虑优化工作。

  • 只有当你的其它工作都做完之后,你才能去考虑优化问题。

  • 而且你只能根据经验做法来优化。对于小幅的性能优化都不应该去考虑,在成熟的工程学科中,能轻易获得12%的改进。

效率的圣杯滥用导致程序员浪费大量时间去思考或担心程序中非关键部分的速度,而在考虑调试和维护时,这些提高效率的尝试实际上会产生强烈的负面影响。

简略剖析

1. 程序员多属于盲目乐观派,违反圣经KISS原则,可维护性维度定下降

2. 过早优化容易让系统丧失扩展性

需求发展总是动态的,优化是一种架构需求稳定后基于经验的静态思维的行动,过早做

  1. 可能是浪费

  2. 扩展性易受损

应该在正确抽象层级进行优化

3. 容易关注不重要的部分,而忽略行动和目标本身,造成项目进度失控