本节摘要:
What I cannot create, I do not understand.——这是物理学家费曼写在黑板上的话,也是本书全部内容的总纲。这一节要厘清「造轮子」背后那个核心理念:为什么「会用」不等于「懂」,为什么「能从零造出来」才是「真懂」的唯一可靠证明。我们会用一个例子(Git)讲透——你会用git commit不代表你懂 Git,只有当你能从零写出init/add/commit,你才真正理解「内容寻址存储」「对象模型」这些词的分量。
内容来源:基于「Build your own X」索引的费曼卷首语与方法论整理的导读。
阅读完本节,你应当能够:
本书正文九章,带你造 Shell、正则引擎、Git、Web 服务器、数据库……但在动手之前,必须先立一个心法:你为什么要造这些已经有的东西?
答案就藏在费曼那句话里。费曼是 20 世纪最伟大的物理学家之一,他在研究量子电动力学时,坚持「必须能从最基本的原理重建整个理论」,否则就不算真懂。这套方法论搬到工程领域,就是「你必须能从零造出一个东西,才算真正理解它」。
这不是玄学,而是有具体含义的工程方法论——下面展开。
很多工程师对常用工具的理解,停留在「会用」层面:你敲 git commit,知道它会「保存一个版本」;你敲 grep foo,知道它会「找含 foo 的行」;你启动一个 Web 服务,知道它「能响应请求」。
但「会用」与「真懂」之间有一道鸿沟。试着回答这些问题:
git commit 之后,数据到底以什么形式存在磁盘上?为什么 Git 切分支这么快?grep foo 是怎么在一百万行里找到匹配的?为什么有的正则快、有的慢?如果你只能含糊地说「它存了」「它搜了」「它处理了」,那你还停留在「会用」。「真懂」要求你能讲清每一步的机制——而检验你是否真懂的唯一可靠方法,就是亲手从零造一遍。
以 Git 为例(本书第 6 章会带你造一个)。天天用 Git 的工程师,大多会说「我懂 Git」。但问几个问题:
.git 目录里那堆文件是什么?objects/ 下的文件名为什么是一串十六进制?如果你答不出(或答错——很多人会答「存差异」,其实 Git 存的是完整快照),说明你对 Git 的「懂」是假懂。而当你按照本书第 6 章,亲手写出 init(建对象库)、add(把文件存成 blob 对象)、commit(把索引建成 tree、加父指针),那一刻你才真正理解:「啊,分支只是个指针,所以切分支才这么快」「commit 存的是完整 tree 的快照,所以历史是快照链而非差异链」。
这就是「造轮子」的价值:它逼你回答每一个你以前能含糊过去的问题。
把费曼的这句话,变成你学习的检验标准:
本书的结构正是按这个标准组织的:每章带你从零造一个工具的简化版,不追求功能完整,追求「让你回答出每个为什么」。
下一节厘清一个常见误解:造轮子与用轮子并不冲突——成熟工具照用,造轮子是学习手段。