# 吉多·范罗苏姆：Python

> Python 之父讲述语言的设计取舍、社区治理的演变，以及编程语言的品味。

- 原标题：Guido van Rossum: Python
- 期数：特别节目
- 发布日期：2018-11-22
- 嘉宾 / 主题：吉多·范罗苏姆
- 网页版：https://lexfridman-cn.pages.dev/ep/guido-van-rossum/
- 官方页面：https://lexfridman.com/guido-van-rossum/
- 精读字数：约 9583 字（阅读约 21 分钟）

> 本文为 lex.qiaomu.ai 基于原始访谈的 AI 改写中文精读，非官方翻译；引用请注明出处并链接网页版。

2018年7月的一个周四早上，7点钟。吉多·范罗苏姆（Guido van Rossum）醒来，脑子里冒出一句话：昨晚那场 PEP 572 的争论，是我最后一次让自己为这类事情紧张成这样。于是他打开电脑，用15到20分钟写完一封邮件，宣布辞去 Python 社区"终身仁慈独裁者"（BDFL，Benevolent Dictator For Life）的职位。

邮件发出去5分钟，他在 Twitter 上看到人们已经在讨论：吉多辞去 BDFL 了。他本以为那封邮件只发在核心开发者才读的内部论坛上，至少能给自己留一天缓冲时间。

邮件里有一句话后来被反复引用：**你们将自谋出路。**他没有指定继承人，没有说要建立民主制、无政府状态、独裁还是联邦，把这个开放性问题整个扔回给社区。

这场对话发生在辞职三个月后。Lex 问他，Python 生涯里最艰难的决定是哪一个。是 Python 3 不向后兼容吗？

> 最艰难的决定大概是辞职。（吉多·范罗苏姆）

## 从电子积木到生命游戏

1956年，吉多出生在荷兰。父母那一代人被二战深深地刻过一遍。Lex 开场就问了个大问题：人性本善还是本恶？

吉多的回答很朴素：我们每个人身上都有善和恶的潜能，很大程度上取决于环境和情境。

他青少年时期最喜欢的荷兰作家是威廉·弗雷德里克·赫尔曼斯（Willem Frederik Hermans）。这位作家的早期小说写的全是二战期间那些说不清的事：抵抗组织和德国间谍之间的界限，你永远搞不清某个人是真的抵抗者还是告密者，有些角色跨过了那条线，读者到最后也不知道究竟发生了什么。主角往往是反英雄，常常在某个层面上没能实现自己的宏大目标。

然后是童年爱好：搭电子电路，拼机械模型。

他讲得很老实。头几年纯粹是照说明书组装，他对电子学的理解浅到可笑，连线圈和电容是干什么的都不知道。这个无知后来惹了麻烦。做复杂一点的数字电路时，电路图看起来完美无缺，就是不工作。他没想到两根线靠得太近、或者开关做工太糙，会产生兆赫级的振荡，把整个电路搞乱。

他能调试，能极其仔细地照说明书操作，这个习惯保持了一辈子。但他脑子里那套"晶体管怎么工作"的模型是错的。

这段经历后来有回声。他自己承认：

> 我一直非常专注于编程这项活动本身，而不是你写出来的程序拿去干什么。（吉多·范罗苏姆）

所以他从没把计算机看成"能创造人工生命的弗兰肯斯坦"，也没把它看成写作工具或者游戏机。他最后造出一门给程序员用的工具语言，回头看不算巧合。

18岁那年，他去东欧参加数学奥林匹克，是荷兰队成员。队里另一个极客小孩跟他讲了一种叫"计算机"的玩意儿。他之前从没听过这个词。

更早的时候，父母用打孔卡付杂志订阅费，他完全不知道背后有台计算机在读取这些卡片、在账户之间转账。他不感兴趣。

直到上大学读数学，才发现学校有一台计算机，学生可以用。用法是：把程序打在打孔卡上，交给操作员，一小时后取回打印结果。那台机器不连接真实世界，你能做的只有写点抽象的东西。

大二或者大三，有人给他看了一篇两页的影印文章。《科学美国人》上的一个专栏，作者每月写一篇数学趣题，那一期讲的是康威的生命游戏（Conway's Game of Life）。文章列出了全部规则，还暗示这件事在哲学上很有意思，这也正是康威给它起这个名字的原因。

他用 Pascal 写了个实现。值得说的是他怎么写的。

他先在纸上设计了一个由逻辑门构成的电路，九个比特输入，也就是一个细胞加上它周围八个邻居，输出这个细胞下一代的值。那是个全加器加上一些截断逻辑。然后他把这个电路翻译成 Pascal 整数上的一系列布尔运算，把整数当位串用。这样大约八条指令就能算出一代里的60个比特。

他得意的那个点很有意思：整段回忆的重点落在"我把它优化得很好"上，对图形本身的美一个字没提。

原因很实际。学生机时预算极小，而且是计量的。他曾经因为超支被教授找麻烦。他想跑更大的棋盘、更多的代。实现必须快，他才有余力去喂不同的图案进去，看看会跑出什么，比如滑翔机，那个几代之后整体平移一两格的经典图案，还有滑翔机枪。

滑翔机枪这种图案是他跑出来的。规则是他写的，输出不在他预期之内。

这就碰到了生命游戏真正的谜题：**底层规则简单到可以手算，跑出来的东西却没人能用数学描述。**

Lex 提到斯蒂芬·沃尔夫勒姆（Stephen Wolfram）为这事着迷，因为数学工具不够用，你唯一能做的就是跑一遍看结果。吉多的回应比较克制，他不认为这类问题适合经典数学分析。

这里岔出了一条很有意思的思路。如果我们想造出真正的智能，是不是也得造一个宇宙然后让它跑起来？手工用 Python 一行行码出一个完整智能体，可能根本没戏。需要的可能是先找到一套规则，让它在演进过程中不会迅速退化成无意义的重复。

沃尔夫勒姆的经验是：你发现能产生有趣现象的规则，快得令人意外。理论上不该这么容易，但事实就是这样。所以也许我们这个宇宙装载的规则本身就容易长出有趣的东西，而长出有趣东西的难度，比我们以为的低。

年轻的吉多对"计算机会思考"这件事基本无感。他那时几乎不读科幻，顶多读过一本科幻小说集。真正让他开眼的是二十出头读的《哥德尔、埃舍尔、巴赫》（Gödel, Escher, Bach），一本讲意识的书。

他说得很直接：

> 我完全相信大脑在某种意义上就是计算机。我不相信有什么额外的东西给我们注入智能或意识。没有灵魂这种东西。我大概十岁就是无神论者了，就是稍微想了想数学和宇宙。（吉多·范罗苏姆）

但同一段话里他又说，他十几岁的时候，知道那台计算机有多少位内存、知道给它编程有多难，他完全不信能从这么个东西里造出满足他定义的那种智能。

这两种说法并不矛盾。**他知道大脑是计算机，也知道当时的计算机差得太远，远到他看不出这段距离怎么填。**

## 编程语言是攒出来的，不是想出来的

Lex 问了一个假设：如果给你三个月，从零设计一门语言，你怎么把"Python 好用的那些特质"变成语法规则和语言特性？

吉多的回答把这个问题直接推翻了。

他说 Python 一开始他就给自己定了规矩：**我可不想什么都从零设计，我要从别的语言里借我喜欢的东西。**

所以设计的第一步是观察：我自己喜欢什么。

这也是为什么17岁造不出一门好语言。你还没有足够多的语言使用经验，根本不知道自己讨厌什么、舍不得什么。

他造 Python 的时候三十五六岁。他写过解析器，参与过 ABC 语言的实现，跟 ABC 的设计者争论了好几年设计问题，虽然 ABC 的最终设计他一点没参与，他加入团队时语言已经设计完并实现了。

然后他开始借。缩进和一部分语法特征来自 ABC，字符串字面量和数字的工作方式来自 C，还有各种零零碎碎的局部规则从各处拿来。Python 的好东西大部分是借的。

这个回答解释了 Python 的长相。它来自一个有品味、有经验的中年工程师做的大规模策展，跟天才式的设计推演没什么关系。

## Python 3：那些绕不过去的老坑

从"终身仁慈独裁者"这个称呼说起，Lex 问了 Python 3 的决策过程。不向后兼容，这个决定怎么做的？

吉多说那其实是群体过程。当时他名义上是 BDFL，所有人都尊重他作为创造者和语言设计拥有者的位置，但他在看所有人的反馈。

Python 3.0 的起点是社区里的人反复指出：有几个问题一遍又一遍地咬到用户，能不能动一动？

那些问题当时被叫"Python 疣"（Python warts）。团队过去的做法一直是死守向后兼容，所以很多疣在早年的版本里已经解决了，办法是兼容地解决，或者用非常渐进的演化路径绕过去。剩下这些，是公认的问题，谈不上路障，但总有人在这里绊倒，而且每次绊倒都是同一个地方。

团队想不出向后兼容的解法。

但也一直有个选项摆在那里：不解决。很长一段时间，他们就是这么自我安慰的：好吧，这门语言在这个地方、那个地方就是不完美。有些细节在 Java 里更好，在 R 里更好，在 Visual Basic 里更好，我们认了，反正改不动。也没那么糟，可以做点用户教育，可以加静态分析器，可以让解析器报个警告。

但有一部分疣，他们的判断是：这些问题不会消失，而且未来会越来越糟，得动手。

于是有了 Python 3。

## 2018年7月那个周四

PEP 572 是赋值表达式，也就是那个 `:=` 海象运算符。一个小特性。

争论大得离谱。很多人声称自己知道什么是 Pythonic 什么不是，声称这会毁掉这门语言，是对 Python 最根本设计哲学的侵犯。

吉多的原话是：我觉得这全是扯淡，因为我支持它，而关于 Python 的设计哲学，我大概还是知道一点的。

他为此累了很久，也紧张了很久。那个周三晚上他终于发出邮件：接受了，我可以去实现了。然后上床睡觉，感觉很解脱，这事过去了。

周四早上7点醒来，他想的是：这是最后一次让我为 PEP 决策紧张成这样的争论了，我应该辞职。

他想了退休这件事已经有五年，一直在开玩笑、在暗示，告诉社区未来某天我会退休，别把称呼里"终身"那部分太当真。这次他想，就是现在了。

那天他休假，本来打算和妻子去附近一个小海滨镇子好好过一天。他花了15到20分钟写完那封辞职信。

他说自己当时甚至没意识到那是个多么重大的决定。

Lex 说那封信读起来几乎有莎士比亚的味道。不指定继承人，把"你们将自谋出路"这种不确定性直接交出去，这个开放式的姿态把创造未来的责任还给了社区。

吉多的判断是：**他敢这么干，是因为他知道 Python 处在很好的位置。**

核心开发者是50到100人的群体，写或者审了绝大部分进入 Python 的代码。这些人大部分时候相处得很好，专业领域分布广，经验层次从 Python 核心到嵌入式系统都有。他放心，因为这群人能照顾好自己。

辞职信发出后，社区开始起草宪法。到这次对话时，已经有五六个互相竞争的提案。

他对此非常自信。辩论整体上健康且有产出。

## 关于程序员之间的战争

Lex 提了个观察。他弹吉他，随便弹点什么，周围人都是"太棒了""真好听"。但他以旁观者身份进编程社区，发现但凡一个话题，往往会分成阵营，阵营之间互相批评起来相当狠。

他问得挺小心：作为旁观者我可能完全错了，但你怎么看这件事？

吉多先承认了这个现象：圣战是编程社区最喜欢的活动之一。

然后他给了个平衡的看法。如果所有人互相拍肩膀、从不说真话，那不是好事。但确实存在一个中间地带：**对人刻薄不行，但持续健康的批评和反馈非常有用。**

这个中间地带在每一层都能看到。有人提了个改动很小的修复，很可能有 reviewer 回一句：其实换个做法更好。

## Python 不打算变成高并发语言

Lex 把所有热门话题打包扔过来：并发、并行计算、async IO、GIL、打包工具、函数式编程。请吉多挑着说。

吉多把 GIL、并行、async IO 合成一个话题回答，结论明确：

> 我对 Python 发展成一门高并发、高并行的语言不太抱希望。语言的设计方式、大多数用户的用法、语言的实现方式，都让这个未来相当不可能。（吉多·范罗苏姆）

但他把 async IO 单拎出来了。async IO 是个特例，它只做一件事：让 IO 重叠起来，仅限 IO。这恰好是支撑高吞吐 IO、每秒大量连接的最佳实践。这块他不担心，async IO 会继续演进，有几个互相竞争的包，有些非常聪明的人在推着他们改进。

并行计算他说得更干脆：**Python 不是干这个的语言。**

有绕过去的办法，但你不能指望写一段 Python 算法，编译器自动把它并行化。你能做的是用 NumPy 这类包，告诉它数据在哪、要对数据做什么抽象操作，它把能用的 CPU 全用上，然后你其实已经回到 C++ 的世界了。这些包本身通常就是 C++ 写的。TensorFlow 这些也一样，跨 GPU 的并行它们替你处理。

打包是另一个故事。吉多第一句话就是：**打包一直是我最不喜欢的话题。**

他说这问题真的难，因为操作系统和平台想拥有打包权，但它们的打包方案不针对任何特定语言。Linux 就有两套互相竞争的方案，全都跨语言工作。而 Node、Ruby、Python 各自有只在自家生态内工作的方案。

他自己怎么办？用系统包管理器装 Python，用 Python 的包管理器装第三方 Python 包。大多数人也是这么干的。

他给了个时间线：**十年前的 Python 打包是灾难，现在 pip 就是未来。**数值计算和科学计算另有一个基于 Anaconda 的生态，两者能共存。他看不出有再多搞几套的必要。

## 他养大了这个孩子

Lex 看过那部五个半小时的口述史，说它因为线性叙事，给人一种"一生过得很充实"的感觉。他问：除了家庭，回头看这段旅程，你真正骄傲的是什么？

吉多的回答值得抄下来：

> Python 肯定是我做过的最好的事。但我不会只说创造 Python，而是我养育 Python 的方式，像养一个孩子。我不只是怀了一个孩子，我把他养大了，现在我要把他放进世界，我已经让他能够照顾自己。我为此非常骄傲。（吉多·范罗苏姆）

然后是蒙提·派森。Lex 说你可以随时给我放"死鹦鹉"那一段。吉多说那也是他最喜欢的。

"它已经蹬腿了。""不，它只是在休息。""它已经寿终正寝、魂归西天了。"这就是那场对话。

## 意识是一条光谱

话题转向意识。吉多强调，这跟他的日常工作完全是两条线。他写编程语言，不涉及任何朝智能或意识方向走的东西。但作为科普读物的 avid 读者，他有些想法。

他的核心判断是：把意识当成开关来看，方向就错了。猫、狗、老鼠有某种形式的智能，鱼也有某种形式的智能。演化花了很多时间。他认为，越来越多智能的演化，特别是通向人类这种智能的路径，是跟着感官的演化走的，尤其是视觉。

解释一个场景需要的计算量巨大，人类至今比计算机做得更好。他的猜想是：哺乳动物发展出它们那个层次的意识，从智能到自我意识到意识，跟"这台机器人有高度发达的感官"有关。大量丰富的感官信息涌进来，一层层堆上去，某种类似意识的东西就出现了。

然后是自动驾驶。这段是他自己主动延伸的，而且说得相当具体。

他说自己开车的时候不只是注意交通规则。他会看周围，从里面读线索：这片是商业区；有个老太太过马路；有人抱着一大堆邮件，前面有个邮筒，这人八成是要过街去投信。**然后他就减速了，他完全没意识到自己在做这个判断。**

把观察转成"另一个意识打算干什么""世界上另一个系统会怎么动"的理解，这个过程无处不在。比如判断那棵树要倒了。

所以他说：

> 如果有什么东西会变得有意识，我预期会是自动驾驶汽车，而不是 Google 或 Amazon 数据中心里那堆网络互联的、数以亿计的计算机。（吉多·范罗苏姆）

这个判断的标准很实用。意识在这里成了一个工程指标：**一个系统为了跟人类互动而必须具备的东西。**你得能共情，能恐惧，能理解什么是怕死，才能处理好跟行人的关系，才能基于人的欲望和想法做基本计算。

狗就是证据。狗明显知道周围的人要干什么，或者说至少有一个关于人类行为的模型，而且它会学。有些狗知道你要出门，它想跟着；你把它单独留下它会难过、会叫；小时候被虐待过的狗会害怕。我们不认为狗有多少意识，但也不认为它一点没有。

## 从笛卡尔到模式匹配

17世纪有一批人，莱布尼茨、霍布斯、笛卡尔，他们有种感觉：所有思考、所有推理，那些我们觉得大脑里最特殊的东西，都可以转换成逻辑。一旦形式化了全部知识，你就能计算。**我们的大脑在做的，就是计算。**

吉多的反驳切在很具体的地方：他们没有"模式匹配"这个概念。

他们以为自己发现了不起的数学工具，牛顿的微积分之类，于是顺着那条线推演逻辑能走多远。他们没意识到，认出人脸靠的是另一套机制：**海量数据，加上一个能解读视觉线索和上下文的电路，对着存储的规则做大规模并行模式匹配。**

他自己举了个生动的例子。如果明天在 Dropbox 办公室楼下见到 Lex，他能认出来，就算 Lex 换了件衬衫也能。但如果明天在贝尔蒙特某家咖啡馆、或者海滩上碰见，他可能完全认不出来。他经常犯这种错：只在"我妻子的同事"这个语境里认识的人，在电影院里撞见就认不出。

Lex 追问：你说模式匹配，你觉得规则无法编码这个？看看这个房间，我是黑衬衫、这个身高、是个人，你每一刻都在拾取上万条关于场景的事实，把它们聚合成对场景的理解。你不觉得这些全都能编码，最后摆到桌上计算吗？

吉多的回答分两层。

第一层：是的，这里没有魔法。第二层：但从眼睛耳朵进来的原始事实，到"我理解了这一幕"，中间隔着的抽象层级太多，他不认为 AI 真的走完了这段距离。

他给了个类比。人体由原子构成，这是个毫无用处的还原论视角。人体由器官构成，器官由细胞构成，细胞由蛋白质构成，蛋白质由氨基酸构成，氨基酸由原子构成，再往下是量子力学。每层都对，但你不能拿量子力学去理解身体。

他还有一段关于编译器的推演，我觉得是这次对话里最有信息量的部分。

一个编译器解析程序，它的输入例程在某种意义上就是一个感觉器官。它构建起一个极其复杂的内部表示：不再是线性的字节序列，而是一棵抽象语法树。编译器用这棵树生成输出，比如翻译成能在硬件上跑的机器码，然后这棵树被扔掉。

鱼或者苍蝇接收到视觉信号，他相信它也在构建某种数据结构。苍蝇脑子里的抽象层级可能少到只有"这边比那边暗""有东西在动"，所以你的手一挥它就跑了。但那已经是对运动的抽象。

我们脑子里有类似的东西，只是复杂得多。**你要是没有对运动的极好的抽象，你根本没法开车。**

再往上，人类在运动抽象之上建了更复杂的数据结构，其中一部分持久保存下来，变成记忆，可以调取。记电话号码是很"有意识"的记忆方式：十个数字，重复几遍，能复述出来。但"我怎么认出你的脸"，他完全不知道。大脑里有一堆专用硬件会干这件事，他不知道自己脑子里这套东西有多少写在 DNA 里，有多少是零到三岁之间反复训练出来的。

所以日常生活里，我们运行在抽象的最高层，完全不感知底下那些细节。**编译器叠着编译器，一路往下。**

## 软件 2.0 不该叫编程

Lex 提到 Andrej Karpathy 的说法"软件 2.0"：神经网络用一堆输入输出的例子学出映射，你看不见里面，也没法分析，只能训练。他问吉多：这种模糊的、引号里的"编程"，应该叫编程吗？

吉多的回答很干脆：**我不会把那叫编程。那是另一种活动。**

就像用细胞搭器官不叫化学。

他给了个观察：AI 史上处理过的每一个任务，一旦我们搞清楚了它是怎么做到的，它就不再被算作人工智能了。那时你不需要这个词了，那就是"哦，现在我们知道怎么做了"，然后一个新的科学或工程领域长出来。

他承认自己可能太执着于术语。但他预期，未来就是会有不同的概念，由受教育背景不同、对"我在干什么"的模型不同的人去发展。

他对"算法"这个词有一处抱怨，挺有意思。他说每次在报纸上读到关于 Facebook 的软文，说"算法"如何如何，他就来气，因为那是同一个词完全不同的用法。他八岁十岁学到的是：**算法是一套你完全理解的规则，可以被数学分析，可以被证明。**你可以证明埃拉托斯特尼筛法只产生素数，且产生所有素数。

而今天那些系统，你只能说在所有测试过的东西上它99.9%的情况下有效，但你没法保证，它会以意想不到的方式失败，你甚至连它怎么失败的例子都举不出来。

但这里有个转折，是吉多自己提出来的：**软件 1.0 其实也早就到这一步了。**

无 bug 程序的理想，大部分软件开发者早就放弃了。我们只在 bug 频繁到烦人的时候才管它。我们接受偶尔的崩溃、宕机、错误结果，因为不可能有那么多程序员把代码写到无 bug，那活儿太枯燥，你要是上形式化方法，那就更枯燥。

用户点了个链接报错，普通人不会慌，再点一次，通常就好了，或者换个路子完成任务。这是一种端到端的恢复机制。系统内部全是重试、超时、降级。他猜生物系统里这类机制更多，否则活不下来。

## 规模改变了一切

说到编程教育，吉多的观察很准。

基础编程课上学生写的程序太小太简单，只要有 bug 你总能找出来修掉。中学的信息课是这样，大学的编程入门课也大多是"小规模编程"。很少有课程真的教软件工程，真的教你搭大型系统。

Dropbox 每年夏天招大量实习生，西海岸每家科技公司都这么干。**这些实习生总是被震到，因为这是他们有生以来第一次看见一个真正的大型软件开发环境长什么样。**大学里学的一切几乎都是小得多的尺度，而那个尺度差异会造成质的差别，改变你做事的方式和思考的方式。

Lex 追问：70年代80年代你刚开始想 Python 的时候，有没有想过会出现 Google、Facebook、Dropbox 底下那么大的系统？

吉多：计算技术的几乎每一个阶段都让我措手不及。

再往前追，他讲了自己想解决什么问题。他很高兴自己当时不知道社区里所有的"痒处"：

> 如果你试图一次解决所有问题，你什么都解决不了。（吉多·范罗苏姆）

他的问题极其聚焦：**要一门卡在 shell 脚本和 C 之间的语言。**一个在那个特定环境里能让他作为程序员更高效的工具。他还给自己定了时间预算，大约三个月，包含设计（想清楚语法和语义上所有特性）和实现（从解析源码到执行的整条流水线）。

所以他不知道自己缺什么，反而救了他。

## 为什么从 C++ 换到 Python 会觉得快

Lex 讲了自己的经历。90年代到21世纪头十年，他做机器学习和 AI 研究一直用 C++。做机械、电气的同事用 MATLAB，还有些人偏好 Java 那种强调面向对象的路子。最近十年，神经网络那些包都建在 Python 上，他切过去了，明显感觉到效率提升，但说不清为什么。

吉多说：你大概确实更快了。

然后 Lex 自己把原因说出来了，我觉得这段比任何抽象论证都好使。

他说他在 C++ 里**太享受写出高性能代码、构建漂亮结构这件事了**，尤其是新标准里那些模板编程，搭一个形式上极其优雅的结构。结果他发现自己大部分时间都花在搭那个结构上，而不是完成任务本身，比如解析一个文件、抽几个关键词。

这就是 Python 那三个月设计预算的回报。它砍掉的东西，恰好是让人沉迷、让人忘记自己在干什么的东西。

回过头看吉多那三个月：借缩进、借字符串字面量、借数字语义，不发明新范式，不追求理论上完备，把"从想法到能跑起来"的路径压到最短。他在电子爱好时期用面包板，线路一碰就散架，但能工作，他要的就是先看见它工作，然后去做下一张图。等设计定了，再考虑做 PCB、考虑焊接、考虑电压波动和机械振动。**后面那些他不懂，但写代码的那部分他懂得很透。**

面包板和 Python 是同一件事。

## 被爱者与独裁者

这场对话录于2018年11月，吉多辞职四个月后。回头看，他留下的那句话分量很足：**你们将自谋出路。**

一个创造了全世界最流行语言之一的人，在最后关头没有安排接班人，没有设计治理结构，甚至没给自己留缓冲时间。他做的是把权力交出去，然后相信那群他亲手挑进来、一起工作了二三十年的人。

而他自己给这段生涯的定性，落点在"我把它养大了，现在它能照顾自己"，至于"我发明了一门语言"这种说法，从来不是他叙述的重心。

这两句话放在一起，是一种很少见的创造者姿态。多数强人卡在"我走了它会散"，他的判断是"我走了它会自己长出宪法，而且会有五六份竞争方案，这很健康"。

## 如果你只记三条

- **别从零设计，先攒品味。**吉多造 Python 时三十五六岁，写过解析器、参与过 ABC 实现、跟设计者吵了几年架。他做的第一件事是列出自己喜欢的特性，然后从各语言里借。17岁造不出好语言，跟聪明程度无关，问题在用过的语言还不够多，不知道自己讨厌什么。
- **砍
- 砍掉让你沉迷的部分。**Lex 从 C++ 换到 Python 之后效率明显提升，原因跟语法长短没什么关系。C++ 让他把时间花在构建优雅的模板结构上，完成任务本身反而被挤到了后面。评估一门工具时问一句：它让我的时间有多少花在"手艺表演"上，多少花在把事情做完上？
- **先分清是哪一类问题，再决定用什么标准验收。**软件 1.0 追求可证明的正确性，这个理想早就被大多数团队放弃了；软件 2.0 只能追求统计意义上的可靠，99.9% 有效，但说不清失败边界在哪。把神经网络的产出当成"算法"来验收，等于把两套完全不同的工程契约混成一谈。做技术决策之前先问一句：这个模块我能给出保证，还是只能给出概率？答案不同，测试策略、发布节奏、责任划分全都不一样。
