致知录
第 XI 卷 · 第 10 篇 · Bonus Models · 1970.01.01

奥卡姆剃刀与汉隆剃刀:两个最锋利的思维简化器

额外模型 · 1970.01.01 · 12 分钟阅读 · 3,005 字
目录 · 18
世界已经够复杂了——不要用不必要的假设和恶意归因让它更复杂。这两个"剃刀"帮你砍掉那些不必要的、让你误入歧途的解释。

预计时间:20 分钟读完 + 25 分钟做练习 = 45 分钟。

本课核心论点
奥卡姆剃刀(Occam's Razor)和汉隆剃刀(Hanlon's Razor)是两个互补的思维工具。奥卡姆说:"最简单的解释往往是最好的。" 汉隆说:"能用愚蠢解释的,不要归咎于恶意。"它们共同的本质是:在多个可能的解释中,优先选择那个假设最少、最不依赖特殊条件的。不是因为你懒惰——而是因为复杂的解释通常比简单的解释更容易出错。

一、奥卡姆剃刀:如无必要,勿增实体

1.1 核心是什么

奥卡姆剃刀(Ockham’s Razor)是 14 世纪逻辑学家奥卡姆的威廉提出的方法论原则:「Entities should not be multiplied without necessity.」(如无必要,勿增实体。)

放在今天的工作情境中就是:如果你有两个都能解释同样现象的理论,选择假设更少的那个。

1.2 常见误解

误解真相
「最简单的解释总是正确的」奥卡姆剃刀没说「总是正确」——它说「如果不是必要,不要增加额外的假设」。简单的解释可能错,但复杂的解释需要更多的假设来支持
「奥卡姆剃刀反对复杂性」不是反对复杂性——是反对不必要的复杂性。当证据需要时,复杂的解释完全合理
「奥卡姆剃刀在科学和工程中不适用」恰恰相反——它是科学研究的基本原则(在足够多的证据前,先假设最简单的模型)

1.3 工作中的奥卡姆剃刀

  • 架构设计:能不引入新框架就别引入。「这个功能用现有的工具就能实现」 vs 「我们再引入一个消息队列」——优先选择假设更少的方案
  • Bug 排查:排查 Bug 时,先排除最简单的可能(配置错误、缓存未清理、网络问题),再往复杂的推测(框架 Bug、编译器问题、硬件故障)
  • 需求分析:用户说「需要一个导出功能」——最简单的解释是「用户想导出数据」;复杂的解释是「用户的数据管理工作流程出了问题,导出只是他想到的解决方案之一」

二、汉隆剃刀:能用愚蠢解释的,不要归咎于恶意

2.1 核心是什么

汉隆剃刀(Hanlon’s Razor)的常见表述是:「Never attribute to malice that which is adequately explained by stupidity.」(能用愚蠢解释的,不要归咎于恶意。)

更温和的表述是:如果一个人做了对你不利的事,先不要假设他是恶意的——更可能的是他疏忽了、没考虑到、或者信息不全面。

2.2 更新版:汉隆剃刀 2.0

现代版本把「stupidity」替换为「ignorance / error / oversight」: 大多数时候,别人不是故意伤害你——他们只是没注意到、没想到、或者犯了个常见的错误。

2.3 工作中的汉隆剃刀

  • 同事 delay 了给 your 的接口 → 先假设他太忙了(不是故意卡你)
  • 需求文档有歧义 → 先假设 PM 没写清楚(不是故意坑你)
  • 业务方临时改需求 → 先假设他们自己也刚意识到问题(不是故意折腾你)
  • 用户用错了功能 → 先假设 UI 不够直观(不是用户蠢)
汉隆剃刀的边界
汉隆剃刀不是让你当"老好人"。它只是建议你:在做出"对方是恶意的"这个判断之前——先排除其他更常见的可能性。如果收集了足够多的证据后,对方确实就是恶意的——那就按恶意处理。先用汉隆剃刀排除"无心之失",再用证据判断"有意之过"。

三、两个剃刀的协同使用

场景奥卡姆剃刀汉隆剃刀
同事没回邮件最简单的解释:他太忙/漏看了不是故意忽略你
线上出了 Bug先查配置错误/缓存问题(最简单的可能性),再查更复杂的代码逻辑先假设是疏忽,不是有人故意破坏
竞品推出了相似功能最简单的解释:用户需求相同,他们做了同样的事先假设是正常竞争,不是专门针对你
业务方提出不合理需求最简单的解释:他们没理解技术成本先假设是认知差距,不是存心刁难

四、实战案例

4.1 案例 1:奥卡姆剃刀在系统设计中的应用

团队在设计一个文件处理服务。初步方案是「用消息队列解耦 + 分布式文件存储 + 微服务架构」。用奥卡姆剃刀审视:

  • 核心功能只是「接收文件 → 处理 → 存储结果」
  • 真的需要消息队列吗?如果目前每小时只有 100 个请求——不需要。一个简单的同步处理+异步回调就够了
  • 真的需要分布式文件存储吗?单个 MySQL 存储 + 本地文件就够了(未来不够再迁移)
  • 结果:减少了一个消息队列和分布式存储系统的维护负担——用最简单的架构上线,等需要时再进化

4.2 案例 2:汉隆剃刀解决团队冲突

A 团队上线了一个功能,破坏了 B 团队的接口。B 团队很生气:「A 团队就是不顾别人死活!」

用汉隆剃刀:先假设 A 团队不是故意的——他们可能:

  • 不知道这个接口被 B 团队使用(信息差)
  • 上线流程中没有通知相关方的步骤(流程遗漏)
  • 测试环境没有覆盖到这个场景(测试覆盖不足)

解法:建立跨团队接口变更通知机制 + 上线前影响范围检查。问题不在于「恶意」,而在于「流程遗漏」。

4.3 案例 3:奥卡姆 + 汉隆 联合使用

用户反馈:上传 Excel 文件后一直显示「正在处理」——没有结果也没有错误提示。

  • 奥卡姆:最简单的可能原因是什么?文件太大处理超时了。上服务器看看日志——果然是 30 秒超时,文件处理需要 45 秒
  • 汉隆:不是前端开发故意不做错误提示——最可能是「他们没想到文件会处理这么久」——即超时场景没有在产品/设计阶段被考虑到

修复:(1) 增加超时时间;(2) 增加前端进度提示(让用户知道系统还在处理);(3) 在流程中增加「长耗时操作」的 UX 规范(后续预防)。

五、测验(12 题)

1

奥卡姆剃刀的核心主张是?

2

汉隆剃刀的核心主张是?

3

排 Bug 时,为什么奥卡姆剃刀有用?

4

汉隆剃刀的现代版本把「stupidity「替换为?

5

同事突然改了一个接口签名,没有通知你——汉隆剃刀下的正确反应是?

6

「用户反馈说 App 无法登录「——奥卡姆剃刀下第一步查什么?

7

汉隆剃刀的正确使用边界是?

8

奥卡姆剃刀在架构设计中的正确使用方式是?

9

「竞品上线了这个功能 → 他们是故意抄我们的!「——奥卡姆+汉隆下分析?

10

两个剃刀的共同本质是?

场景题

R1

R1. 场景:你发现生产环境某个接口的响应时间突然从 100ms 变成了 5s。奥卡姆剃刀下你的排查顺序是?

R2

R2. 场景:跨部门合作项目中,对方部门一直拖延交付。你的团队有些人认为「他们就是不想做这个项目「。汉隆剃刀下你怎么分析?

六、答题提示

展开提示

  • Q1-3 两个剃刀都是「假设管理」工具——不是绝对真理。
  • Q4-5 汉隆剃刀的核心是「排除无心之失」——这是沟通中的巨大时间节省器。
  • Q6-7 排错和排查从最简单的可能性开始(也是一种奥卡姆)。
  • Q8-10 架构设计中的奥卡姆 = 「你当前真的需要这个复杂度吗?」
  • R1-R2 两个场景都展示了「先排除简单原因,再考虑复杂/恶意原因」的价值。

七、本课行动清单

  1. 今天起,每次遇到「别人为什么这么做」的问题,先用汉隆剃刀过滤——「有没有可能是他疏忽了/没考虑到?」
  2. 做技术方案时,写完第一版后过一个「奥卡姆审查」:每个组件和抽象是不是都是必要的?有没有能删掉的?
  3. 排 Bug 时,强制自己先列 3 个「最简单的可能原因」并排除它们——再深入复杂的排查。
  4. 在团队里推广这两个剃刀:减少「阴谋论」和「过度设计」。

八、参考来源

  • ② 经典:Occam’s Razor(奥卡姆的威廉,14 世纪)——中世纪哲学原则,至今仍是科学方法论基石
  • ③ 严肃著作:Robert Heinlein,《The Moon is a Harsh Mistress》——汉隆剃刀的常见出处之一
  • ③ 严肃著作:John Z. Sadler,《On Hanlon’s Razor》——关于汉隆剃刀的现代哲学分析
  • ④ 实用读物:Carl Sagan,《The Demon-Haunted World》——科学思维中的「剃刀」原则

下一步:Lesson 0011 · 康威定律(进入 Part 3)。