本节摘要:有人一听说「造轮子」就警惕:「你是让我不用 Bash 自己造个 Shell?你是让我不用 Git 自己写个版本控制?生产怎么办?」这是对造轮子最大的误解。本节要破除这个误解:造轮子是学习手段,用轮子是生产手段,两者不仅不冲突,反而互相促进。你造一个 Shell 是为了理解 Shell,造完之后日常仍用 Bash——但从此你看 Bash 的眼神不一样了:每个设计决策你都能说清来由。
内容来源:基于「Build your own X」索引的方法论整理。
阅读完本节,你应当能够:
「造轮子」(reinventing the wheel)在工程语境里常带贬义——「别重复造轮子」是名言,意思是「有现成的成熟工具就用,别自己重写」。这句话在生产环境完全正确。
但本书讲的「造轮子」是另一个语境——学习。学习的造轮子,与生产的「别造轮子」,是两件不冲突的事。它们的分工是:
混淆这两者,要么会「学习时不敢造,怕重复」(错过理解原理的机会),要么会「生产时沉迷自造,不用成熟工具」(重复劳动、踩坑)。本书针对的是前者——鼓励你在学习时大胆造,理解之后再回到生产用成熟工具。
造轮子有个反直觉的好处:造完之后,你用成熟工具反而更得心应手。
以 Shell 为例(本书第 2 章)。你日常用 Bash,但可能从没真正想过「为什么 ls | grep | wc 能串起来」「为什么 cd 是内建命令而非外部程序」。当你亲手造一个 Shell,实现 fork+exec、管道、重定向之后,再回到 Bash:
A | B,脑中浮现「A 的 stdout 接到 B 的 stdin,通过 pipe 系统调用」。cd,明白它必须是内建(否则改的是子进程的目录,Shell 自己不变)。「懂原理」让你从「记忆命令」升级为「推导命令」——忘了某个选项,你能从原理推出来;遇到陌生命令,你能从机制猜出它的行为。这种能力,只有「造过一遍」才能获得。
既然你能造,为什么生产还要用成熟的?因为成熟工具凝聚了你造简化版时会跳过的无数细节:
ls 没问题,但跑复杂的命令组合、处理各种引号转义、兼容不同终端……Bash 处理了几十年积累的所有边界。成熟工具的「重」不是缺点,而是「这些细节都帮你处理了」的代价。学习时造简化版理解原理,生产时用成熟工具享受这些细节——两者各得其所。
本书每章带你造一个简化版,造完之后,做这个练习:
这个「造 → 用 → 对比」的循环,能让你对成熟工具的理解指数级加深。你不再是「盲信工具」,而是「理解后选择」——知道每个工具为什么这样设计、它的能力边界在哪。
ls | grep | wc)。下一节讲怎么挑一个「造得起」的项目——本书的难度梯度与时间预算。