首页 › programming › 过早优化:一句名言52年考古

过早优化:一句名言52年历史考古——Casey Muratori 近期爆火演讲深度解读

概述

“过早优化是万恶之源”(Premature optimization is the root of all evil)大概是程序员被引用最多的一句话,被写进无数代码规范,用来劝阻一切性能上的“提前操心”。但这句话到底从哪来、原本指什么、有没有被断章取义?2026年8月26日,性能领域老兵 Casey Muratori 在 Better Software Conference 2026 上发布了近3小时的考证演讲《The Root of the Root of All Evil》,把这句名言的源头一路挖回1974年高德纳(Donald Knuth)的原论文、1968年 Dijkstra 的抑郁岁月、以及 Tony Hoare 早年一场“编译器每秒只能编译2个字符”的项目灾难。视频发布仅5天播放突破22万,并于8月31日登上 Hacker News 首页(156分、54条讨论)。这篇文章带你完整吸收这条视频的知识精华:不看视频也能懂,看过视频能懂得更深一层。

视频基本信息

项目 内容
标题 Casey Muratori – The Root of The Root of All Evil – BSC 2026
中译 万恶之源的根源——2026更好软件大会
频道 Better Software Conference(据视频页面;主持人/出品人为 Odin 语言作者 Ginger Bill)
发布日期 2026-08-26
时长 2小时50分34秒(正约2小时 + 约40分钟 Q&A)
播放量 约222,560 次(据视频页面数据,发布5天)
点赞 约5,296(据视频页面数据)
热度佐证 2026-08-31 登上 Hacker News 首页第4位(156 points / 54 comments)

一、核心主张拆解:一条名言的三层“案卷”

1. 名言只是40页论文里的一小节

Casey 开场的方式极具仪式感:他展示1974年12月 ACM 一期刊物的目录——Ivan Sutherland(Sketchpad 之父)、“龙书”作者 Aho、Pascal 之父 Wirth、K&R 里的 Kernighan 都在同一期发文。但今天仍被反复引用的,只有 Donald Knuth 的《Structured Programming with go to Statements》。更戏剧的是:这篇40页的论文,后人几乎只引用其中“效率”一节里的一句话——“过早优化是万恶之源”。Casey 的第一个论点由此立住:这句名言本身就是一个被反复压缩的抽象,压缩掉的信息恰恰是正确使用它的关键。

2. 出处本身就是一桩悬案

1989年,Knuth 在《The Errors of TeX》中再次使用这句话,并称之为"dictum"(格言),语境暗示出自 Tony Hoare。于是社区开始流传“其实这话是 Hoare 说的”。Casey 翻出的证据链非常有意思:

结论:可确证的最早书面出处就是 Knuth 1974,其余皆属传闻。但 Casey 指出,这场考据并非八卦——因为理解1974年那篇文章的诞生过程,这三位当事人(Dijkstra、Hoare、Dahl)全都不可或缺。

3. Dijkstra 线:抑郁、被解散的团队与“软件危机”

1967年,Dijkstra 在 SOSP 报告了 THE 多道程序系统——Butler Lampson(图灵奖得主)后来评价它“引入了顺序进程、互斥、生产者-消费者同步,至今仍是并发编程的基础”。1968年,他在会间闲聊中即兴谈了 goto 的问题,被怂恿写成《A Case Against the Go To Statement》投给 CACM。时任编辑 Niklaus Wirth 为了快速刊出,把它改成“读者来信”,并擅自把标题改成了耸动的 《Go To Statement Considered Harmful》——用今天的话说,是编辑亲手制造了标题党,Dijkstra 为此收到大量攻击信件,他本人反而抱怨“人们把这事搞成了宗教”。

同年,Dijkstra 陷入深度抑郁:原因一是做出开创性工作的团队被数学系解散(“你们这不是数学”);原因二是他目睹“软件危机”——硬件狂奔、软件能力跟不上,而他当时觉得自己是唯一看到问题的人(“谈论软件危机在当时是亵渎”)。他举的例子是 IBM 1968年广告里虚构的程序员“Susie Mayer”,宣称改用 PL/I 后一切编程问题都解决了。Casey 特地翻出《Datamation》1968年过刊找到原版广告,并展示同期 PL/I 的真实代码:声明一个“1位判别+5/8位数据”的联合体需要满屏冗长声明——所谓“零经验也能上手”与今天 AI 编程营销的话术何其相似。转机是1968年 NATO 加尔米施软件工程会议:Dijkstra 第一次发现一群聪明人承认“软件确实有问题”,他说“承认缺点是改进的首要前提”。1969年8月,他写出 EWD249《Notes on Structured Programming》,标志他走出抑郁——这份手稿像今天的编程直播,逐层展示高手如何思考。

4. Hoare 线:一场“每秒2个字符”的项目灾难

Tony Hoare(Tony Hoare)这边:1963年他在 Elliot Brothers 成功交付 ALGOL 60 编译器,随后接手 Elliot 503 Mark II 软件套件——30人团队、两年烂尾,砍需求后6个月赶出第一个 ALGOL 编译器,结果编译速度只有每秒2个字符(旧版是500–1000)。团队花了几个月优化到每秒8个字符(“4倍提速!”——然而绝对值依然灾难),项目随即取消。事后复盘的根因:没人统筹主存分配,所有人都以为“会有魔法般的分配器”,最终系统陷入换页抖动(thrashing)。Hoare 在1980年图灵奖演讲《The Emperor's Old Clothes》中亲述此事,并称这次灾难换来了此后软件质量的显著提升。另一个关键节点:1972年 IFIP 会议上 Hoare 初遇 Dijkstra 与 Dahl,三人决定把各自的讲稿合成一本书——《Structured Programming》(1972):Dijkstra 讲控制结构(代码)、Hoare 讲记录与数据、Dahl 讲 Simula 与面向对象。Casey 的评价很妙:这本书的理念“赢得太彻底,以至于被遗忘”——今天没人说自己“在做结构化编程”,因为那就是编程本身。

5. Knuth 线:从三封公开信到“97%”的诞生

1969年,Knuth 与 Robert Floyd 打包加入斯坦福,两人新开的方向章程里白纸黑字写着要解决“software problem”、要统计“用户用语言做什么”。Knuth 老实承认自己一开始也不会结构化编程,常去 Floyd 办公室“求救”,两人还在1971年合写论文证明某些结构无法在不改变语义的前提下去除 goto。1972年收到 Dahl 赠书后,Knuth 写了三封公开评论信(分别致 Dijkstra、Hoare、Dahl),一边盛赞“读这本书会改变你的人生”,一边逐条辩驳。1974年那篇论文由此而来——它名义上讨论“高级语言是否需要 goto”,全篇却在 Example 2 上做文章:把“先搜索、找不到再追加”改成“先追加哨兵、搜到即知是否新增”,内存访问从 6n+10 降到 4n+4,省33%;再手工展开循环(doubling up),再省12%。

正是在讨论“12%的改进值不值得做”时,那句名言登场了,而且被引用时几乎总是被腰斩。原文的完整逻辑是三段:程序员浪费大量时间担心非关键路径的速度;“约97%的时间里,我们应该忘记小效率:过早优化是万恶之源”;“但我们不应放过那关键3%的机会”。而且 Knuth 紧接着写下了他一生最坚定的信念之一(在1971、1973、1974三篇论文里反复重申):对哪段代码是热点做先验判断往往是错的,因为所有使用过测量工具的程序员的直觉猜测都失败过;因此所有编译器都应默认输出性能剖析反馈。

6. 数学拆弹与档案反转

Casey 做了一件全场最“硬核”的事:他把 Knuth 的两个论断联立——"3%的源码集中了大部分运行时间”与“内层循环提速10%,全程序几乎提速10%"——用初等数学解出隐含前提:3%的源码必须占约90%的运行时间,这才可能两句话同时成立。然后他去追 Knuth 的两处引文:一处是 Dan Ingalls《The Execution Time Profile as a Programming Tool》——数字化时代找不到,Casey 竟然在 eBay 上买到了实体书;另一处是 Knuth 自己1971年的《An Empirical Study of Fortran Programs》(1970年夏与学生的三个月研究:分析25万张打孔卡、440个程序,来源包括翻垃圾箱失败、蹲点询问失败,最后直接扫描“半保护”磁盘文件,外加洛克希德公司的产业代码)。

反转在这里:Ingalls 论文里的真实数据是 3%的源码只对应约50%的运行时间,远达不到90%;书中完整剖析示例里最热例程占66.7%,整体更像65/35而非90/10。另外,440个程序平均只有178条赋值语句——以今天的标准小得不可思议,样本的代表性存疑。换句话说:名言的数据地基与其修辞强度不匹配。

7. 最反直觉的结尾:拒绝给出“正确解读”

按常规演讲套路,结尾应给出“所以这句话应该这样理解”。Casey 明确拒绝。他说这句话和“goto considered harmful”一样,本身就是一个丢失了全部关键细节的坏抽象,他不想再叠一层抽象上去:“这个演讲的 takeaway 就是历史本身。”Q&A 里主持人 Ginger Bill(Odin 语言作者)补充的细节同样精彩:1969年 Stockton Gaines 的论文已经在画“指令指针随周期变化的可视化曲线”(今天火焰图的老祖宗);Knuth 在论文里畅想的“终极语言”是高层代码+程序员手动指定变换(几乎没有优化开关的 LLVM);Hoare 在1970年代的手稿里甚至提前15年描述了 SSA 形式。

二、知识与理论溯源

视频涉及的真实文献与事件均可核查:

三、批判性审查:哪些站得住,哪些被夸大

证据充分的部分。 名言出自 Knuth 1974 论文、标题党式的“considered harmful”出自编辑之手、NATO 会议确立软件危机话语、Elliot 503 项目灾难——这些都有原始文献支撑,且视频给出了可直接核查的页面(Casey 将全部参考资料公开在 ComputerEnhance.com/theroot)。历史脉络的还原度极高,这一点连 HN 评论区以挑剔著称的性能工程师群体也大体认可。

被夸大或值得商榷的部分。 其一,“3%源码≈90%运行时间”的隐含断言被 Ingalls 原始数据(约50%)直接反驳,Casey 的推导在数学上无懈可击(他还在现场请 Demetri Spanos 复核过),但要注意:Ingalls 的测量方法本身也是“静态计数+粗略成本估计”(他自己称之为 extremely crude),且 Knuth 样本里的程序极小,双方都受时代测量手段所限——这是“用粗糙数据反驳粗糙断言”,结论方向可信、精度有限。其二,Knuth 论文的成本模型只数内存访问次数、假设无缓存,而 IBM 360 Model 91 早在1967年就有循环缓冲与分支预测——Casey 以此说明即便是高德纳,其抽象成本模型也会被硬件演进击穿,这恰是“不要用静态直觉判断性能”的又一佐证。其三,全篇论文没有任何真实机器计时(Casey 全文只找到一句无引用的"empirical tests"),以今天的实证标准看确实薄弱。最后,Q&A 中提到的 Hoare 于2026年3月去世一说出自现场主持人之口,属视频内信息,未做独立核实,请注意甄别。

四、认知提升与实用启示

  1. 名言是压缩包,引用前先解压。 “过早优化是万恶之源”的完整语境是“97%的时间忘记小效率,但绝不放过关键的3%”——它从来不是“性能不重要”,而是“先测量、后优化”。任何被你用来停止思考的格言,都值得花一次原典考古:找到它诞生的具体问题场景,判断你的场景是否同构。这个方法可迁移到所有“ considered harmful”式断言。

  2. 把“直觉猜测热点”列入个人禁手清单。 视频最有生命力的洞见其实是 Knuth 那条被引用最少的信念:直觉定位热点的失败是“程序员的普遍经验”,因此测量必须成为默认动作。落到实践:性能问题先用 profiler(perf、VTune、火焰图),改完用基准复测;code review 中有人断言“这里肯定是瓶颈”时,第一反应应该是“数据呢?”——这比争论名言字面意思有用一百倍。

  3. 学习“档案馆式”的问题处理法。 Casey 的方法论值得偷师:不满足于二手转述,追引文链、翻过刊、甚至买绝版书扫描;对每个关键数字做量纲与逻辑复核(他现场联立方程拆出"3%≈90%"的隐含前提);最后诚实地呈现不确定性,而不是硬造一个爽快结论。在 AI 生成内容泛滥、引用以讹传讹的2026年,这套“一手史料+数学复核+拒绝过度概括”的组合,是普通开发者对抗信息熵最低成本的武器。

五、视频论证结构图

flowchart TD
    A[名言: 过早优化是万恶之源<br>被断章取义52年] --> B[出处考据]
    B --> B1[Knuth 1974 论文<br>最早可证书面出处]
    B --> B2[1989 Knuth 称其为 dictum<br>指向 Hoare → 悬案]
    A --> C[三个当事人的历史语境]
    C --> C1[Dijkstra 线<br>1968 标题党事件 + 团队解散<br>软件危机 → EWD249]
    C --> C2[Hoare 线<br>Elliot 503 灾难<br>2字符/秒 → 统筹分配的教训]
    C --> C3[Knuth 线<br>斯坦福系章程 + 三封公开信<br>→ 1974 论文]
    C1 & C2 --> D[1972 合著《Structured Programming》]
    D --> C3
    C3 --> E[原典还原<br>97% 忘记小效率 + 3% 决不放过<br>+ 编译器默认输出 profile]
    E --> F[数学复核<br>3%源码 + 10%提速→10%全程序<br>隐含 3%≈90%运行时间]
    F --> G[档案反转<br>Ingalls 原始数据: 3%≈50%<br>修辞强度 &gt; 数据地基]
    G --> H[结论: 拒绝再造抽象<br>takeaway 就是历史本身]

延伸阅读

  1. Casey Muratori – The Big Oops: Anatomy of a Thirty-Five-Year Mistake — 本篇的“前传”:拆解 C 风格函数原型35年历史误用,与本讲构成“计算机史学方法”上下篇。
  2. The Root — 参考资料与图片出处(ComputerEnhance) — Casey 公开的本演讲全部论文链接与图片版权说明,想读原典从这里出发。

参考来源

  1. Casey Muratori – The Root of The Root of All Evil – BSC 2026 (YouTube) — 本文解读的视频本体,2026-08-26发布,时长2:50:34。
  2. Hacker News 首页(2026-08-31快照) — 该视频当日以156分、54条讨论登上首页第4位。
  3. The Root — References and Picture Credits (ComputerEnhance.com) — 演讲者公布的全部参考资料与图片出处。
  4. Better Software Conference — 演讲所在会议官网(据视频页面信息)。
  5. Hacker News RSS: "Casey Muratori" 检索 — 该视频及前作 The Big Oops 在 HN 的讨论时间线。

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入