最近我在整理我的 Obsidian 笔记库时,发现了一个有趣的现象。
回想几年前,我刚开始搭建个人知识库的时候,恨不得把所有的插件都装上。DataView、Templater、QuickAdd……各种自动化脚本写了一堆,试图构建一个”完美”的第二大脑。结果呢?维护这些系统的精力甚至超过了记笔记本身。每当我想快速记录一个想法时,复杂的流程反而成了阻碍。
这让我不禁陷入深思:我们是不是总是习惯性地把简单的问题复杂化?
在折腾了一圈之后,我最终删掉了大部分不常用的插件,回归到了最朴素的 Markdown 写作。那一刻,我感到了一种久违的轻松和高效。这让我想起了一个古老而充满智慧的原则——奥卡姆剃刀(Occam’s Razor)。
今天,我想和大家聊聊这个”剃刀”,以及它如何帮助我们在技术和生活中做出更好的选择。
什么是奥卡姆剃刀?
可能很多朋友都听过这个词,但它的确切含义往往被误解。
奥卡姆剃刀原理是由 14 世纪的逻辑学家奥卡姆的威廉(William of Ockham)提出的。它的核心表述是:”如无必要,勿增实体“(Entities should not be multiplied without necessity)。
简单来说,就是在其他条件相同的情况下,越简单的解释或方案往往越好。
请注意,这里有一个关键的前提——”其他条件相同”。它并不是说”简单就是好”,而是说如果两个理论都能解释同一个现象,或者两个方案都能解决同一个问题,那么那个假设更少、步骤更简练的,通常是更优的选择。
在软件工程领域,我们经常把它和 KISS 原则(Keep It Simple, Stupid)联系在一起;在科学领域,它是理论构建的基石;而在我们的日常生活中,它其实是一种极其高效的决策工具。
理解「实体」的概念
很多人看到「实体」这个词,第一反应可能是具体的物体。但在奥卡姆剃刀的语境下,「实体」(Entities)是一个非常广泛的概念,它指的是任何存在于你的系统、理论或流程中的组成部分。
如果回到奥卡姆的威廉所在的 14 世纪,这里的「实体」其实有着更具体的哲学含义。作为唯名论(Nominalism)的代表人物,奥卡姆反对当时主流的实在论(Realism)。当时的哲学家喜欢假设各种抽象的「共相」(Universals)是独立存在的实体,而奥卡姆认为这些只是头脑中的概念和名称,并非真实存在的客体。对他而言,剔除这些不必要的形而上学假设,就是「勿增实体」。
而在现代语境下,我们可以把这个概念对应到更具体的场景中:
- 在逻辑与科学中:实体是假设(Assumptions)。如果你需要假设这世界上存在外星人、且外星人正好昨天来过、且正好帮你修好了电脑,才能解释为什么电脑突然好了,那这些假设就是多余的实体。相比之下,”电脑自己重启解决了故障”这个解释需要的假设(实体)就少得多。
- 在软件开发中:实体是变量、函数、类、数据库表、微服务、第三方库。每引入一个第三方库,你就引入了一个新的实体,随之而来的是维护成本、兼容性问题和潜在的安全漏洞。
- 在日常生活中:实体是步骤、规则、物品、APP。为了喝一杯水,如果你规定必须先拿出特定的杯子、测量特定的水温、按照特定的姿势倒水,那这些步骤就是实体。
所以,”勿增实体”不仅仅是让你少买东西,更是让你少做假设、少写代码、少定规矩。每一个被引入的实体,都应该有它存在的绝对必要性。
为什么我们总是倾向于复杂?
在使用奥卡姆剃刀之前,通过自我观察,我发现”把事情搞复杂”似乎是人类的一种本能。
1. 安全感的幻觉 在写代码时,我们经常会为了”以后的扩展性”而设计复杂的架构。我们告诉自己:”万一将来需要这个功能呢?”于是引入了多余的抽象层和接口。这种过度设计(Over-engineering)本质上是源于对未来的不确定性和恐惧。我们试图通过增加复杂度来覆盖所有可能的情况,结果往往是制造了当下的混乱,而那些预想的”未来”可能永远不会到来。
2. 显得”专业” 有时候,复杂度被当作了能力的象征。使用一个极其复杂的工具链,配置繁琐的服务器环境,似乎比直接用现成的 SaaS 服务显得更”硬核”。但实际上,真正的专业往往体现在能用最简单的方式解决最核心的问题。
3. 沉没成本谬误 当我们已经在一个复杂的系统上投入了大量时间后,即使发现它并不好用,也很难下决心去精简它。我们会想:”我都花了两周配置这个 Vim 插件了,不用岂不是亏了?”
深度分析:剃刀的价值
奥卡姆剃刀的真正威力,在于它能帮助我们剔除噪音,直击本质。
在技术选型中
我现在越来越倾向于使用”无聊”的技术。当我要为一个新项目选择技术栈时,除非有非常强烈的理由,否则我不会去碰那些刚出来、概念很酷但还没经过验证的新框架。
比如,以前我也热衷于尝试各种 NoSQL 数据库,觉得它们灵活、高性能。但后来发现,对于绝大多数中小型应用,一个传统的 PostgreSQL 就能完美覆盖 99% 的需求。用最成熟、最简单的技术,意味着更少的 Bug,更丰富的社区支持,以及更低的维护成本。这就是奥卡姆剃刀在技术决策中的体现。
在产品设计中
做产品的朋友应该深有体会,增加功能很容易,做减法却很难。一个界面上堆砌了太多按钮,用户反而不知道该点哪里。
我非常喜欢 Google 首页的设计,几十年来几乎没有变过,就是一个搜索框。它完美地诠释了奥卡姆剃刀:用户的核心需求是搜索,其他的一切如果不是为了辅助这个核心需求,就是多余的实体,应该被剃除。
在思维模型中
当我们试图解释一件事情时,奥卡姆剃刀也是一个强有力的工具。比如,当程序出现 Bug 时,我们是先怀疑是操作系统内核出了问题,还是先检查自己是不是少写了一个分号?
大概率是后者。虽然内核 Bug 也是可能的,但它的概率极低,需要引入更多的假设。而”我犯了个低级错误”这个解释不需要引入任何额外的假设,往往就是真相。
实践经验:如何举起剃刀?
知道了原理,具体该怎么做呢?这是我在实践中的一些心得。
也是最重要的:YAGNI 原则
在写代码或做计划时,时刻提醒自己:You Ain’t Gonna Need It(你不会需要它)。
不要为了以后可能出现的需求而编写代码。只解决当前最紧迫的问题。如果未来真的有了新需求,那时候再重构通常也来得及,而且那时你对问题的理解会比现在深刻得多。
定期进行”数字大扫除”
我给自己定了一个规矩,每个季度审查一次我的数字生活:
- 订阅服务:有哪些是我这就几个月没打开过的?取消订阅。
- APP:手机上有哪些应用是”僵尸应用”?卸载。
- 工作流:我的笔记流程、发布流程有没有可以合并的步骤?
就像文章开头提到的,我精简了 Obsidian 的插件。现在的原则是:如果一个需求不通过插件也能勉强实现,那就不装插件。只有当痛点足够痛时,才引入新的工具。
追求”足够好”而非”完美”
完美往往意味着极度的复杂。为了解决最后 1% 的边缘情况,我们可能需要付出 200% 的努力来增加系统复杂度。
在很多时候,一个能解决 80% 问题但结构简单的方案,优于一个能解决 100% 问题但结构极其复杂的方案。剩下的 20%,可以通过人工干预或者其他低成本的方式来解决。
这里的”简单”不是简陋
必须强调的是,奥卡姆剃刀不是让你偷懒,也不是让你因噎废食。
如果是为了造一辆车,轮子是必要的实体,不能剃掉。但给轮子镶金边,或者给家用车装 F1 的尾翼,就是由于”非必要”而增加的实体了。
我们在做减法的时候,要始终问自己:去掉这个部分,核心功能还受影响吗? 如果不受影响,那就毫不犹豫地剪掉。
一个小小的哲学补充:唯名论与实在论
既然在文章中多次提到了奥卡姆的哲学背景,这里不妨简单解释一下唯名论(Nominalism)和实在论(Realism)这对哲学上的“老冤家”。
它们争论的核心是“共相”(Universals)是否存在。共相是什么呢?比如“红色”、“人类”、“美”这些概念,它们不是具体的某个苹果或某个人,而是指代一类事物或属性的普遍概念。
- 实在论(Realism):认为这些“共相”是真实存在的,独立于我们的思维之外,甚至在某种意义上比具体的个体事物更真实、更根本。比如,真的存在一个“人类性”在那里,而张三、李四都是这种“人类性”的具体体现。
- 唯名论(Nominalism):则认为“共相”不是独立存在的实体。真实存在的只有个别的、具体的事物(比如张三、李四)。“人类”、“红色”这些,只是我们为了方便思考、交流而赋予这些具体事物的一个“名字”或“标签”,它们只存在于我们的语言和头脑中。
奥卡姆的威廉正是唯名论的坚定支持者,他认为假设这些抽象的“共相”具有独立存在,就是不必要的“实体增殖”,也是他提出奥卡姆剃刀的一个重要哲学基石。理解这一点,能帮助我们更好地把握“勿增实体”的深层含义。
最后
在这个信息爆炸、工具泛滥的时代,保持简单反而成了一种稀缺的能力。
奥卡姆剃刀不仅仅是一条逻辑原则,它更像是一种生活态度。它提醒我们不要被表面的繁华所迷惑,要敢于对冗余说”不”。
我发现,当我开始有意识地运用这把剃刀时,我的生活并没有变得简陋,反而变得更加清晰和可控了。代码更容易维护了,笔记更容易回顾了,决策也做得更快了。
最后的最后,我想说:简单本身就是一种美,也是一种力量。
如果你也觉得自己被各种工具、框架、理论压得喘不过气,不妨试着拿起奥卡姆剃刀,给自己做一次”瘦身”。也许你会惊讶地发现,原来你真正需要的,其实很少。