Casey Muratori谈万恶之源:软件性能危机的深层根因

引言:一场直指行业软肋的演讲
在即将到来的 BSC 2026(Better Software Conference)上,知名软件工程师、性能优化专家 Casey Muratori 带来了一场名为《The Root of The Root of All Evil》(万恶之根源的根源)的演讲。这个标题化用了计算机科学界流传已久的名言——"过早优化是万恶之源"(Premature optimization is the root of all evil),通常被归功于 Donald Knuth。
这句名言出自 Knuth 1974年发表的论文《Structured Programming with go to Statements》。Knuth 本人是计算机科学的泰斗级人物,《计算机程序设计艺术》(The Art of Computer Programming)的作者,TeX 排版系统的创造者。值得注意的是,这句话的思想渊源可以追溯到 Tony Hoare,Knuth 在论文中也提到了这一点。Knuth 写作这段话的背景是1970年代结构化编程运动的高潮期,当时的争论焦点是 goto 语句的使用。他的核心论点是:程序员不应在无关紧要的地方做微优化(比如为了省几个时钟周期而使用 goto 破坏代码结构),但同时必须对程序中真正的性能瓶颈保持警觉。这个语境在后来的传播中几乎完全丢失了。
Casey Muratori 长期以来以"反主流"的技术观点著称。他是《Handmade Hero》项目的作者,也是软件性能与底层工程领域极具影响力的布道者。《Handmade Hero》是 Casey 从2014年开始的一个大型直播编程项目,目标是从零开始、不使用任何第三方库(甚至不用标准库的大部分功能),完全手写一个完整的游戏引擎和游戏。整个过程通过直播和录像公开,每一行代码都有解释。这个项目不仅是一个技术展示,更是一种哲学宣言——它证明了一个人在理解底层机制的前提下,可以写出比大量依赖框架和引擎的团队更高效的代码。该项目累计超过600集,成为了底层编程教育的重要资源,也让 Casey 成为了"反抽象膨胀"运动的代表人物。
这次演讲的标题暗示,他要探讨的不仅是"万恶之源"本身,而是追溯到"根源的根源"——整个行业对性能问题认知偏差的深层原因。

"过早优化是万恶之源":一句被严重误用的格言
断章取义如何扭曲了Knuth的本意
在软件工程界,"过早优化是万恶之源"几乎成了一句免死金牌。无数开发者用它来为忽视性能、编写低效代码辩护。然而 Casey Muratori 长期以来的核心批判正在于此:这句话被严重误用了。
Knuth 的原话完整版本是:"我们应当忘记那些微小的效率提升,大约 97% 的情况下:过早优化是万恶之源。然而我们不应放过那关键的 3%。"换句话说,Knuth 从未主张开发者可以完全无视性能,他强调的是要在正确的地方投入优化精力,而非在所有细枝末节上过度纠结。
更重要的是,Knuth 紧接着还写道:"一个好的程序员不会因为这一理由而沾沾自喜,他会明智地仔细审视关键代码;但只有在这些代码被识别出来之后。"这段话清楚表明,Knuth 的立场是一种有策略的性能意识,而绝非对性能的漠视。然而在数十年的传播过程中,只有那句"过早优化是万恶之源"被广为引用,完整的上下文和限定条件被系统性地遗忘了。
从"万恶之源"到"根源的根源"
Casey 此次演讲标题中"根源的根源"的表述,正是要挖掘更深一层的问题:为什么整个行业会普遍陷入这种认知误区?他一贯的观点是,现代软件开发文化系统性地贬低了对硬件、对性能、对底层机制的理解,导致了大量本可避免的性能浪费。
这种浪费并非空穴来风,有大量量化证据支撑。Nikita Prokopov 在其著名文章《Software Disenchantment》中列举了大量案例:Windows 95 在 30MB 内存上流畅运行,而现代操作系统需要数 GB;一个简单的聊天应用占用数百 MB 内存;网页加载的 JavaScript 代码动辄数 MB。Jonathan Blow(游戏《Braid》和《The Witness》的开发者)也多次指出,如果按照硬件性能的提升比例,现代软件应该比实际表现快10到100倍。这种"性能负债"不仅浪费用户时间和电力,还直接影响碳排放——据估计,低效软件每年造成的额外电力消耗相当于数百万吨碳排放。
Casey Muratori 的性能优化哲学
性能不是可选项,而是工程底线
作为性能优化领域的坚定倡导者,Casey 反复强调:现代计算机硬件的能力远超大多数软件所能发挥的水平。今天的 CPU 每秒可以执行数十亿条指令,但许多应用程序却因为糟糕的架构设计和对硬件的无知而变得异常缓慢。
以2024年的高端处理器为例,单核每秒可执行数十亿条指令,拥有多级缓存(L1缓存访问延迟约1纳秒,L2约3-5纳秒,L3约10-20纳秒),支持超标量执行、乱序执行、分支预测、SIMD 向量指令等复杂优化机制。然而,要充分利用这些特性,程序员需要理解缓存行(cache line,通常64字节)、内存对齐、分支预测失败的代价(通常10-20个时钟周期的流水线冲刷)等底层概念。当软件通过多层抽象、虚函数调用、随机内存访问模式等方式运行时,CPU 的这些优化机制往往无法发挥作用,导致实际吞吐量可能只有理论峰值的百分之几。
他曾多次指出,很多开发者以"可维护性"、"抽象"、"开发效率"为名,构建了层层叠叠的抽象层,最终让软件运行得比几十年前的程序还慢。这种现象在他看来,正是"过早优化是万恶之源"这句话被滥用的直接后果。
面向数据设计:回归硬件现实
Casey 是面向数据设计(Data-Oriented Design)理念的重要推动者之一。这一理念主张,程序员应当从数据在内存中如何布局、如何被 CPU 缓存和访问的角度来思考代码结构,而非仅仅从面向对象的抽象层面出发。
面向数据设计的核心洞见是:现代计算机的性能瓶颈往往不在计算本身,而在内存访问。CPU 从主内存(DRAM)读取数据的延迟约为100纳秒,而从 L1 缓存读取仅需约1纳秒——差距达到100倍。DOD 主张使用结构体数组(Structure of Arrays, SoA)而非数组结构体(Array of Structures, AoS),确保同一操作需要的数据在内存中连续存储,从而最大化缓存命中率。在游戏开发领域,这一理念通过 ECS(Entity Component System)架构得到广泛应用。Mike Acton(前 Insomniac Games 引擎总监,后来加入 Unity)的著名演讲"Data-Oriented Design and C++"是这一领域的另一经典参考。
这种思路与主流软件工程教育中强调的封装、继承、多态形成了鲜明对比。面向对象编程(OOP)自1990年代起主导了软件工程教育和工业实践。其核心概念为大型软件系统的组织提供了心智模型,但从性能角度看,OOP 的典型实现存在固有缺陷:对象通常分散在堆内存中(导致缓存不友好的随机访问模式)、虚函数调用引入间接跳转(破坏分支预测和指令缓存)、深层继承树增加数据冗余。有趣的是,Alan Kay(OOP 概念的提出者之一)曾表示,他对 OOP 的设想是关于消息传递的,而非关于类和继承的。当前的 OOP 实践在很多方面偏离了最初的设计意图,却造成了显著的性能开销。
Casey 认为,正是主流范式对硬件现实的漠视,构成了性能问题的"根源"。
为什么这场演讲值得每位工程师关注
对软件行业文化的深层反思
BSC(Better Software Conference)本身就是一个聚焦于"如何写出更好软件"的技术会议。与侧重于特定技术栈的会议不同,BSC 更关注跨越具体语言和框架的工程原则,通常涵盖测试、架构、性能、团队协作等议题,吸引的是关注软件工程基本功的从业者群体。Casey Muratori 选择在这样一个场合发表演讲,暗示他的批判对象不仅是特定技术社区,而是整个软件工程文化。在这样的场合探讨"万恶之根源的根源",意味着 Casey 要触及的是行业文化层面的深层问题,而不只是具体的技术技巧。
这类讨论在当前尤其有现实意义。随着 AI 辅助编程、低代码平台的兴起,越来越多的代码在开发者甚至不理解其底层运作机制的情况下被生成。以 GitHub Copilot、GPT-4、Claude 等为代表的 AI 编程助手正在深刻改变代码的生产方式。这些工具能快速生成功能正确的代码,但它们的训练数据主要来自互联网上已有的代码库——这些代码库本身往往充满了性能反模式。AI 生成的代码倾向于使用最"常见"而非最"高效"的解决方案,优先考虑可读性和通用性而非性能。更关键的是,当开发者不理解 AI 生成代码的底层行为时,他们失去了识别和修复性能问题的能力。这形成了一个恶性循环:低效代码被生成、被接受、被纳入训练数据,进而影响下一代 AI 工具的输出质量。
当抽象层进一步增厚,性能问题很可能被进一步掩盖。Casey 的批判在这个时代显得更加尖锐和必要。
快速迭代时代中一种稀缺的技术清醒
在软件行业普遍追求"快速迭代"、"先跑起来再说"的今天,Casey Muratori 代表了一种稀缺的声音——他坚持认为,理解你所使用的机器、尊重性能、写出高效的代码,不仅是一种工程美德,更是一种职业责任。
他要追问的"根源的根源",或许正是:我们究竟是从什么时候开始,把对计算机本质的理解当作了可以外包给"框架"和"工具"的东西?这个问题的答案或许可以追溯到软件工程教育的转变——从早期强调算法、数据结构和计算机体系结构的课程设置,逐渐转向强调设计模式、框架使用和敏捷方法论。当计算机科学专业的毕业生可以在不理解指针、内存管理甚至基本数据结构在物理层面如何运作的情况下进入行业,性能意识的缺失就不再是个人选择,而是系统性教育失败的结果。
结语
虽然这场演讲的完整内容有待 BSC 2026 正式呈现,但从标题和 Casey Muratori 一贯的技术立场来看,这无疑将是一次对软件行业主流认知的深刻挑战。它提醒我们,那些被奉为圭臬的格言,往往在被简化和传播的过程中丢失了最重要的语境。
对于每一位关心软件质量与性能的工程师而言,重新审视"过早优化是万恶之源"这句话的完整含义,也许正是理解现代软件性能危机的第一步。而 Casey 要我们思考的是更进一步的问题:当一个行业的主流文化系统性地回避对机器本质的理解时,我们失去的不仅是性能,还有作为工程师的基本判断力。
相关推荐

Claude Code Skills实战:从写代码到写技能的AI编程进阶指南
深入解析Claude Code Skills开发实战,涵盖Skill三层进阶路径、Codex与Claude Code选型策略,以及企业级二次开发技巧。掌握AI编程从直接写代码到构建可复用Skill体系的工程化转型方法。

MCP-Builder.ai:用自然语言几分钟搭建AI数据连接器的托管平台
MCP-Builder.ai 让开发者用自然语言描述即可自动构建、托管和保护MCP Server,几分钟内将数据库、API、第三方应用连接到Claude、ChatGPT、Cursor等AI工具,无需处理部署和安全配置。

PostHog Desktop深度解析:AI Agent驱动的产品协作工作台
PostHog Desktop是一款将产品数据、AI智能体和代码构建整合到统一工作台的桌面应用。本文深度解析其核心功能、多Agent协作模式及与GitHub的深度整合,探讨AI原生开发平台如何重塑产品迭代流程。