我想了解关于过早优化的知识，请写一篇详细的介绍
user
过早优化(Knuth'soptimizationprinciple)又称“克努特优化原则”最早由计算机科学家高德纳提出。在《goto语句的结构化编程》论文中，他写到：
“程序员们浪费大量时间去思考或者担心他们程序中非关键部分速度。而在考虑调试和维护时，这些所谓提高效率做法实际上十分不妥。我们应该放弃小效率点，并且要在97%时间提醒自己，过早优化是万恶之源，而且连那关键3%也不能够放过。”
优化是一个褒义词，涵义积极正面。甚至于，很多人不加思考地追求最优化。但“差之毫厘，谬以千里”，将优化绝对化，不管何时何地都追求最优化，会反受其害。
例如，前置思考中提到，恐龙等顶级掠食者，为高居食物链顶端，演化方向较为单一，追求长得更大、更有力量、跑得更快、爪牙更锋利，让少数几个性状逼近生理极限，使自己没有天敌。
如此一来，其他多数性状都丧失发展机会。这在生物学界，被称为“演化单行道”，甚至是“演化死胡同”。表面上看起来很强大，但实际上很脆弱。
也就是说，最优是最优，但环境一变却因为无法适应，导致种族灭绝。可以说，片面追求最优化，是“捡了芝麻，丢了西瓜”。凡事利弊兼具，过早片面优化，可能带来灾难。#### 过早优化的启示

避免过早优化，不是说不要优化，仅仅是说“不要过早”优化。也就是说，优化之前要判断是否是优化时机。
做一个类比，就好像我们画画，先画轮廓、草图，然后填入细节，一步步臻于完美。这有严格优先级顺序。
如果刚画几笔，就开始优化细节，很可能这个局部画得很好，达到局部最优，但整体结构编排不当，产生结构性缺陷，最后画作质量平平，可能就沦为平庸之作。
类似的，写一篇文章，首先考虑的是中心思想、整体框架，其次是段落编排、起承转合，最后才是文字润色、咬文嚼字，如果颠倒这个顺序，也属于过早优化。
要优化，不要过早优化，核心在于优化目标设定。
过早优化，其实是在追求“局部最优解”，意即：把其中一部分做到极致，再做另一部分。陷阱在于，划分部分方法可能失之随意、整体失当，容易导致局部优化对整体影响不可控。
适时优化，其实是在追求“全局最优解”，意即：优化整体表现。划分方式往往是，从整体到部分、从抽象到具体，先验证逻辑，再补充细节，这样就不容易锁死在局部高峰，更有条件登上整体高峰。
换一种说法是，在没有找到影响整体最优最重要几个因素前，不要过早把资源投放到次要甚至完全不重要因素优化上。
高德纳最早提出过早优化概念，就是因为洞察到，程序员在错误方向和时间点浪费太多时间。对此，有一个类比说，还没有写完程序，你就开始考虑它的性能问题，这样的软件好比姑娘还没有成年却已经嫁人了。
事实上，只有通过测量并找出真正存在问题地方，才需要开启优化。
类似的，在商业领域、管理领域等，先推出最小可用品，获得真实数据反馈，明确自己所开发产品或者解决方案，真正符合市场需要，才不会在错误开发方向浪费过多资源。
值得注意的是，分辨什么是局部高峰、什么是整体高峰，富有挑战。
也就意味着，可能要反复试错，常走下坡路，这需要科学方法和足够耐心。如果一个人不能延迟满足，只能接受走上坡路有序愉悦，不能接受走下坡路混乱痛苦，就容易掉入过早优化陷阱。
assistant