全球专业中文经管百科,由121,994位网友共同编写而成,共计435,843个条目

过早优化

用手机看条目

出自 MBA智库百科(https://wiki.mbalib.com/)

目录

什么是过早优化

  过早优化 (Knuth's optimization principle)又称“克努特优化原则”最早由计算机科学家高德纳提出。在《goto语句的结构化编程》论文中,他写到[1]

  “程序员们浪费大量时间去思考或者担心他们程序中非关键部分速度。而在考虑调试和维护时,这些所谓提高效率做法实际上十分不妥。我们应该放弃小效率点,并且要在97%时间提醒自己,过早优化是万恶之源,而且连那关键3%也不能够放过。”

  优化是一个褒义词,涵义积极正面。甚至于,很多人不加思考地追求最优化。但“差之毫厘,谬以千里”,将优化绝对化,不管何时何地都追求最优化,会反受其害。

  例如,前置思考中提到,恐龙等顶级掠食者,为高居食物链顶端,演化方向较为单一,追求长得更大、更有力量、跑得更快、爪牙更锋利,让少数几个性状逼近生理极限,使自己没有天敌。

  如此一来,其他多数性状都丧失发展机会。这在生物学界,被称为“演化单行道”,甚至是“演化死胡同”。表面上看起来很强大,但实际上很脆弱。

  也就是说,最优是最优,但环境一变却因为无法适应,导致种族灭绝。可以说,片面追求最优化,是“捡了芝麻,丢了西瓜”。凡事利弊兼具,过早片面优化,可能带来灾难。

过早优化的启示[1]

  避免过早优化,不是说不要优化,仅仅是说“不要过早”优化。也就是说,优化之前要判断是否是优化时机。

  做一个类比,就好像我们画画,先画轮廓、草图,然后填入细节,一步步臻于完美。这有严格优先级顺序。

  如果刚画几笔,就开始优化细节,很可能这个局部画得很好,达到局部最优,但整体结构编排不当,产生结构性缺陷,最后画作质量平平,可能就沦为平庸之作。

  类似的,写一篇文章,首先考虑的是中心思想、整体框架,其次是段落编排、起承转合,最后才是文字润色、咬文嚼字,如果颠倒这个顺序,也属于过早优化。

  要优化,不要过早优化,核心在于优化目标设定。

  过早优化,其实是在追求“局部最优解”,意即:把其中一部分做到极致,再做另一部分。陷阱在于,划分部分方法可能失之随意、整体失当,容易导致局部优化对整体影响不可控。

  适时优化,其实是在追求“全局最优解”,意即:优化整体表现。划分方式往往是,从整体到部分、从抽象到具体,先验证逻辑,再补充细节,这样就不容易锁死在局部高峰,更有条件登上整体高峰。

  换一种说法是,在没有找到影响整体最优最重要几个因素前,不要过早把资源投放到次要甚至完全不重要因素优化上。

  高德纳最早提出过早优化概念,就是因为洞察到,程序员在错误方向和时间点浪费太多时间。对此,有一个类比说,还没有写完程序,你就开始考虑它的性能问题,这样的软件好比姑娘还没有成年却已经嫁人了。

  事实上,只有通过测量并找出真正存在问题地方,才需要开启优化。

  类似的,在商业领域、管理领域等,先推出最小可用品,获得真实数据反馈,明确自己所开发产品或者解决方案,真正符合市场需要,才不会在错误开发方向浪费过多资源。

  值得注意的是,分辨什么是局部高峰、什么是整体高峰,富有挑战。

  也就意味着,可能要反复试错,常走下坡路,这需要科学方法和足够耐心。如果一个人不能延迟满足,只能接受走上坡路有序愉悦,不能接受走下坡路混乱痛苦,就容易掉入过早优化陷阱。

参考文献

  1. 1.0 1.1 Donald E Knuth, 苏运霖. 带goto语句的结构程序设计(续)[J]. 计算机科学, 1982(3):36-52.
本条目对我有帮助1
MBA智库APP

扫一扫,下载MBA智库APP

分享到:
  如果您认为本条目还有待完善,需要补充新内容或修改错误内容,请编辑条目投诉举报

本条目由以下用户参与贡献

上任鹅陈.

评论(共0条)

提示:评论内容为网友针对条目"过早优化"展开的讨论,与本站观点立场无关。

发表评论请文明上网,理性发言并遵守有关规定。

打开APP

以上内容根据网友推荐自动排序生成

下载APP

闽公网安备 35020302032707号