跳到主要内容

回头看 — 人不擅长什么,就发明什么

这一章讲三件事: 前面十七章其实是同一件事的十七个样子; 作者自己给这套解题法起的名字,以及它长什么样; 还有一份账——这本书刻意没讲的东西,以及我们补进来的每一句书外内容。

它在全书链条里的位置: 这是收口。原书第 9 章只有三千多字,是一篇回顾; 我们在它后面加了一节账单,因为读者有权知道哪些话不是这本书说的。 需要的基础: 读过前面任意几章。

1. 先看现象:九个话题,还是一件事

把前面十七章的题目摆在一起:0、逻辑、余数、归纳、计数、递归、爆炸、不可解。 看起来是八九个互不相干的数学话题。

但原书最后那段师生对话点破了一件事:书里有不少相同的话题被反复提及—— 「遗漏」和「重复」、先试小的数、认清结构、抽象化1

这一章要做的就是把那条线抽出来。

全章的主走查:第 06 章那道题「今天星期日,100 天后是星期几」
────────────────────────────────────────────────────────
§4 它示范的正是全书唯一的那套动作 —— 换个世界解,再换回来
────────────────────────────────────────────────────────

图说:这一章不引入任何新东西。走查用的是一道你已经会做的题,
目的是看清「你当时到底做了什么」。

2. 一条线:每一章都在把「人做不动」变成「机器照做就行」

这一节把九章各压成一句,请连着读下来2:

原书章我们的章它把什么变成了什么
0 的故事01给「没有」一个位子,规则就不必分情况;一句话:做出简单的规则
逻辑02–05把一件事切成「条件成立」和「不成立」两半,而不是眉毛胡子一把抓
余数06–07把分散的东西同等看待、加以分类;分完之后,原本要反复试的问题轻松解决
数学归纳法08把大问题分解成 n 个同类同规模的小问题,于是能依次机械地解答
排列组合09–10先缩小规模找出本质,再抽象化,于是数不清的东西算得出来
递归11–12分解成同类但不同规模的问题——注意和归纳法那一行的差别
指数爆炸13–14认出「规模稍一扩大就棘手」的形状;反过来利用它,复杂问题也能简化
不可解问题15–17划出原理上的界:能解决的问题是无穷的,但那个无穷只是可数的

第 4 行和第 6 行值得并排看,原书专门对比过: 归纳法分解出来的是「同类同规模」的小问题,递归分解出来的是「同类不同规模」的3

3. 全书反复用的两个动作

这一节回答:如果只带走两个动作,该带哪两个。

动作一:先用较小的数试算4

第 06 章找星期数的周期、第 10 章配药先做 5 粒、第 11 章汉诺塔先解 3 层、 第 12 章繁殖先数 5 天——全都是这一招。 原书给的理由是:用小数试一试,才能发现规律、性质、结构、循环; 否则即使解决了问题,也只是一知半解5

动作二:把得到的结果抽象化6

第 09 章从「10 米 11 棵树」抽象成「n 米 n+1 棵树」、 第 08 章从「1 加到 100」抽象成断言 G(n)——都是这一步。 原书给的理由更狠:如果一个解法只能用在当前这道题上,那它名不副实; 只有同样能用在其他类似问题上的方法,才配叫解法7

两个动作合起来是一条完整的路:先蹲下来看小的,再站起来看一般的。

4. 主走查:幻想法则

这一节是全章的主走查,它给上面那两个动作起了个名字。

作者给自己这套解题法起了个名字,叫幻想法则8:

【幻想法则】
① 把问题从「现实世界」带到「幻想世界」
② 在幻想世界里解决它
③ 把答案带回「现实世界」

拿第 06 章那道题走一遍:

现实世界 幻想世界(余数的世界)
────────── ────────────────────
今天星期日,100 天后星期几? ──→ 100 ÷ 7 = 14 …… 余 2


答案:星期二 ←────── 余数 2 对应星期二

图说:三步里每一步都能照着做,难的是第 ① 步 —— 想到「这道题可以搬进余数的世界」。
整本书教的其实就是「有哪些世界可以搬」。

原书说这也可以叫高速公路法则:要去很远的地方,先开上高速、 高速跑到离目的地最近的出口、再下高速开过去9

而作者提醒了一句:这本书里频繁出现了幻想法则——书中到处都是这种图10回头看确实如此:

现实世界幻想世界
01一个大数难比较指数表示法(只看 0 的个数)
03–05一堆缠在一起的条件真值表 / 卡诺图
0610 的 100 次方天除以 7 的余数
07一张一张试铺法黑白格的个数差
07一条一条试路线顶点的度数是单是双
14一个 68 位的大数它的对数(一个两位数)

5. 为什么会有这些工具:因为人不擅长

这一节是原书最后一段真正的判断,它把全书的动机翻了出来。

作者说,回顾全书会浮现出「人类不擅长某事」的印象, 而正是这些「不擅长」,催生出了各种闪耀的智慧11:

人不擅长什么于是发明了什么
处理庞大的数字计数法:单元、按位、指数表示法
毫无差错地进行复杂判断逻辑:逻辑表达式、卡诺图
管理大量事物分组:同一组的东西当同类看待
处理无穷用有限的步骤对付无穷(归纳法、递归)

这四行合起来是一句话:想方设法缩小问题规模、降低复杂程度, 让问题达到「可以机械式地解决」的状态12

而到了那个状态,就可以把接力棒交给下一位赛跑运动员——计算机13

最后作者留了一句给读者:你有不擅长的地方吗?那里或许会让你产生新的智慧14

6. 这本书刻意没讲什么,以及我们补了什么

这一节是我们加的,原书没有。它分两半:书的边界,和我们的账。

书刻意没讲的

没讲什么依据
大 O 记号、算法效率分析全书搜不到这套记号;作者的方针是尽量不用算式(第 01 章那条自我设限)
概率与统计附录小结自己写明「完全没有涉及概率统计等知识」(见第 19 章)
极限、微积分全书没有
成批处理数的那套数学附录里出现了「把一排数当成一个整体来算」的做法,但只够用到那一步为止
具体编程语言只有几段 C 语言示例,而且作者说不懂 C 也不妨碍理解
证明的形式系统反证法、归纳法都是「怎么用」,没有讲它们本身为什么成立

我们补进来的每一句(书外内容账单)

规矩:凡是书里没有、而我们写进正文的,全部列在这里。 ② 类是查过一手页面的外部来源,③ 类是通用背景知识。

在哪一章补了什么类别
07 §8欧拉 1735 年提交、1736 年的证明奠定图论、论文 1741 年发表(Wikipedia,查阅于 2026-08-25)
14 §5「复杂度 / 时间复杂度」的说法,以及二分法查找写作 O(log n)(Wikipedia,查阅于 2026-08-25)
17 §9图灵那篇论文的刊物、卷期、收稿日期与页码(Wikipedia,查阅于 2026-08-25)
17 §9图灵机长什么样、邱奇—图灵论题是什么、为什么它是「论题」 通用知识
13 §6「八位合起来叫一个字节」;把「一个不漏地试」叫作枚举 通用知识
21 §8《Attention Is All You Need》的题目、八位作者、2017 年 6 月 12 日提交(arXiv,查阅于 2026-08-25)
21 §8「这篇论文开出的那一支,今天被叫作什么」 通用知识
13 §7把「好多台机器同时算」叫作并行 通用知识
16 §4「一串字符就是字符串」这句解释 通用知识
19 §1给「能同时算很多数的那种硬件」补上它在市面上的名字 通用知识
19 §9给「排成方阵的那一片数」补上它的名字(原书用了这个词,没解释) 通用知识
20 §3那个运算除了原书用的名字,我们又补了一个同样常见的叫法 通用知识
20 §8给「四周都比这里高、却不是整张地图最低处」补上它的名字 通用知识
20 §6「为什么必须省掉最后那道闸门」那段解释(原文只说「简单起见」)我们补的台阶
20 §7「哪个方向下降最快」那个词的解释(原书一个字都没解释)我们补的台阶
21 §4「只吐 0 和 1 的闸门问不出『动一点点会变多少』」这句(原书把两件事分写两处)我们补的台阶
09 §742.9 亿与全世界人口(约 81 亿)的对照我们加的对照
12 §4「六天涨到近 18 倍」这个倍数我们算的
07 §5「同时翻两枚棋子就骗过去了」我们从书里那张表推的
15 §6编者指出的漏洞该怎么补(质因数必定不在列表中那一级)我们补的台阶
05 §7check() 检查磁盘空间那个例子我们编的场景
14 §10「监控面板上的对数坐标按钮」我们加的例子
07 §1、08 §7、15 §4、20 §1、§5、§7、21 §3、§4走查里那些书里没给的具体数值(棋子摆法、数组、质数,第 20 章那三个数,以及第 21 章两层连线上各挂的那些数和那个目标值)每一处都在当场声明过是为演示编的

这份账的用处是:你如果要引用这本书,查一下这张表, 就知道哪句话是结城浩说的、哪句话是我们加的。

7. 我们的判断,以及这一章的边界

说法书里给了什么
九章其实是一条线给了逐章回顾,每章一段
先试小的、再抽象给了理由:否则只是一知半解;解法要能用在别的题上
幻想法则是作者自己命名的,原文写明「我自己命名的问题解决法」
「人不擅长催生智慧」是作者的主张,不是推导
程序员需要什么数学给了态度:一般编程不需要很深奥的数学,但认清结构、简化问题是家常便饭

判断(我们的,不是书里的):这本书的真正读法,是把它当成一本「换世界的目录」。 它教的八件工具,每一件都对应一个「幻想世界」:余数的世界、真假的世界、 图的世界、对数的世界。你真正要练的不是在某个世界里算得多快, 而是看见一道题时,能想起来「它可以搬进哪个世界」。 如果错,会错在: 这条读法把书读得太写意了—— 如果你要的是能直接用在工作里的算法能力,这本书给不了, 它连大 O 记号都没有。判据是:读完之后, 你在下一道难题上有没有真的想起「先试个小的」。

这一章的边界:

  • 原书第 9 章只有三千多字,是一篇回顾,没有新内容;
  • 「幻想法则」是作者自造的名字,不是通行术语——引用时要说明这一点;
  • 这一章的第 6 节整节是我们加的,原书没有账单;
  • 原书没有给「接下来读什么」的建议,只在附录末尾列了五条机器学习的参考文献。

8. 可带走的

  1. 九章是一条线,不是九个话题:每一章都在把「人做不动」变成「机器照做就行」;
  2. 归纳法分解出同类同规模的小问题,递归分解出同类不同规模的——这是两者的分界;
  3. 全书反复用的动作只有两个:先用小数试算,再把结果抽象成变量;
  4. 试小的是为了看见结构,不试就算解出来了也是一知半解;
  5. 抽象是为了让解法能用在别的题上——只能用在这一题上的解法,名不副实;
  6. 幻想法则:把问题搬到另一个世界解掉,再把答案搬回来;三步里最难的是第一步;
  7. 每件工具都对着人的一处短板:记不住大数、判断易错、管不了大量事物、处理不了无穷;
  8. 目标始终是「让问题可以机械式地解决」,到了那一步就交给计算机;
  9. 这本书刻意没讲大 O、概率统计、微积分;
  10. 我们补进正文的每一句书外内容,都列在第 6 节那张账单上。

9. 原文地图

主题原书章原文位置
逐章回顾第9章 总结篇text/14-ch09.txt:16(搜「0 明确表现了」) · :23(搜「逻辑基本上被分为 true 和 false 两个世界」) · :34(搜「只要发现其规」) · :43(搜「数学归纳法只需要通过基底和归纳 2 个步骤」) · :58(搜「递归也是分解问题的方法」)
反复出现的两个动作第9章 总结篇text/14-ch09.txt:92(搜「先用较小的数试算」) · :95(搜「对目前得到的结果进行抽象化」) · :96(搜「到当前问题以外的其他问题中」)
由不擅长催生的智慧第9章 总结篇text/14-ch09.txt:101(搜「人类不擅长某事」) · :103(搜「人类不擅长处理庞大的数字」) · :111(搜「想方设法缩小问题规模」) · :113(搜「就能将接力棒传至下一位赛跑运动员」)
幻想法则第9章 总结篇text/14-ch09.txt:118(搜「幻想法则」) · :121(搜「【幻想法则】」) · :145(搜「高速公路法则」) · :155(搜「本书中频繁出现了」)
程序员的数学第9章 总结篇text/14-ch09.txt:160(搜「程序员通常不需要掌握很深奥的数学知识」) · :183(搜「你或许已经发现书中隐含的模式了吧」)

Footnotes

  1. 出处:「第9章 什么是程序员的数学——总结篇」第 177 段(text/14-ch09.txt:177,搜「像「遗漏」和「重复」、尝试较小的数」)与第 183 段(text/14-ch09.txt:183,搜「你或许已经发现书中隐含的模式了吧」)。这是原书最后一段师生对话。

  2. 出处:「第9章 什么是程序员的数学——总结篇」第 16 段(text/14-ch09.txt:16,搜「0 明确表现了」)起,原书逐章各写了一小段。表里每一行都取自对应的那一段。

  3. 出处:「第9章 什么是程序员的数学——总结篇」第 45 段(text/14-ch09.txt:45,搜「这如同将大问题分解为 n 个」)与第 58 段(text/14-ch09.txt:58,搜「递归也是分解问题的方法」)。原文的原话是:递归不是分解成同类同规模的问题,而是分解成同类不同规模的问题。

  4. 出处:「第9章 什么是程序员的数学——总结篇」第 92 段(text/14-ch09.txt:92,搜「先用较小的数试算」)。

  5. 出处:「第9章 什么是程序员的数学——总结篇」第 93 段(text/14-ch09.txt:93,搜「可以发现规律、性质、结构、循环」)。原文的原话是:否则,即使解决了问题,也只是一知半解。

  6. 出处:「第9章 什么是程序员的数学——总结篇」第 95 段(text/14-ch09.txt:95,搜「对目前得到的结果进行抽象化」)。

  7. 出处:「第9章 什么是程序员的数学——总结篇」第 96 段(text/14-ch09.txt:96,搜「到当前问题以外的其他问题中」)。原文的原话是:如果问题的解法只能够运用于当前问题,那么这个解法就名不副实。

  8. 出处:「第9章 什么是程序员的数学——总结篇」第 118 段(text/14-ch09.txt:118,搜「幻想法则」)与第 121 段(text/14-ch09.txt:121,搜「【幻想法则】」)。原文写明这是作者自己命名的问题解决法,不是通行术语。

  9. 出处:「第9章 什么是程序员的数学——总结篇」第 145 段(text/14-ch09.txt:145,搜「高速公路法则」)与第 147 段(text/14-ch09.txt:147,搜「【高速公路法则】」)。

  10. 出处:「第9章 什么是程序员的数学——总结篇」第 156 段(text/14-ch09.txt:156,搜「本书中频繁出现了」)。下面那张「现实世界 / 幻想世界」对照表是我们逐章整理的,书里没有这张表。

  11. 出处:「第9章 什么是程序员的数学——总结篇」第 101 段(text/14-ch09.txt:101,搜「人类不擅长某事」)与第 103 段(text/14-ch09.txt:103,搜「人类不擅长处理庞大的数字」)起的四段。

  12. 出处:「第9章 什么是程序员的数学——总结篇」第 111 段(text/14-ch09.txt:111,搜「想方设法缩小问题规模」)。

  13. 出处:「第9章 什么是程序员的数学——总结篇」第 113 段(text/14-ch09.txt:113,搜「就能将接力棒传至下一位赛跑运动员」)。

  14. 出处:「第9章 什么是程序员的数学——总结篇」第 114 段(text/14-ch09.txt:114,搜「你有不擅长的地方吗」)。