# 詹姆斯·高斯林：Java、JVM、Emacs 与计算的早期岁月

> Java 之父回顾语言设计的初衷、JVM 的演化，以及早年编程工具与计算环境的往事。

- 原标题：#126 – James Gosling: Java, JVM, Emacs, and the Early Days of Computing
- 期数：第 126 期
- 发布日期：2020-09-24
- 嘉宾 / 主题：詹姆斯·高斯林
- 网页版：https://lexfridman-cn.pages.dev/ep/james-gosling/
- 官方页面：https://lexfridman.com/james-gosling/
- 精读字数：约 9469 字（阅读约 21 分钟）

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

2020 年，Chrome 团队统计了一遍自家修过的高危漏洞。六到七成属于同一类：指针指到了不该指的地方。

詹姆斯·高斯林（James Gosling）看到这条新闻时的反应是拍额头。三十年前，1990 年，他和 Sun 的几个同事启动 Java 项目，最重要的设计目标之一就是让这类 bug 在语言层面写不出来。

三十年过去，指针还在惹事。

这个细节差不多能概括整期访谈的气质。他不讲宏大叙事，讲的是具体的机器、具体的 bug、会议室里几个人怎么吵架。这些细节把五十年计算的脉络串了起来：从 PDP-8 到 Emacs，从 ARPANET 到 Java 虚拟机，从柯达的倒下到 Android 的官司。

## 他看代码的方式和大多数人不一样

访谈开始，Lex 问了一个奇怪的问题：你最喜欢的无理数是什么。

他说没有这回事，不知道这个说法从哪来的。顺口讲了一段少年往事。十几岁读到一本《好奇与有趣数字词典》（The Dictionary of Curious and Interesting Numbers），几乎背了下来。后来养成一个怪癖，刷卡、填支票时会想办法让收据总额凑成一个有意思的数字。

Lex 追问 √2 有没有故事。他的回答有味道：那是唯一一个摧毁过宗教的数字。毕达哥拉斯学派相信一切数都能写成整数之比，直到有人证明 √2 不能。世界的不完美从那一天起有了数学证明。

接着聊到哥德尔不完备定理。他的读法挺别致。这条定理常被理解成"有些事你永远无法知道"，他从中读到的教训是另一件事。人们想要非黑即白的答案，想要真或假。只要允许第三种状态，真、假、也许，日子就能过下去。

这段闲谈里藏着理解他整个职业生涯的钥匙。他相信二进制之外还有别的层次，同时又极度厌恶模糊。他喜欢把复杂的东西收拢成一眼能看懂的形状。

Lex 问：想一个程序的时候Lex 问：想一个程序的时候，你脑子里看到的是什么。

他的回答是：图片。

代码落在纸上，很快会变成一张图。它更像一台机器，这个连着那个，齿轮咬合在一起。他看到的是那个，字母拼出来的词法结构并不在他的视野里。

这解释了他为什么坚持一种在很多人看来不健康的代码风格：**极度密集，最少留白，一个函数最好能完整放在一屏里。**

他说因为这事被工程团队约谈过好几次。场景挺戏剧化，所有人提前到场坐好，等他进门，然后集体开口："詹姆斯，关于你的代码风格。"

他的理由纯粹是视觉上的。滚动屏幕意味着失忆，意味着要把刚才看到的东西从脑子里重新捞一遍。整个函数摊在同一屏上，他一眼就能看到输入什么、输出什么、这东西到底在干嘛。代码在纸上会直接跳出来，像一台机器的透视图。

自称视觉思考者、自认口语表达不好的人，写出了 Emacs 和 Java，两个都需要极强抽象表达能力的东西。抽象未必靠语言完成。

## 从 PDP-8 到用高压电搭井字棋

让他上手的第一个机器，是卡尔加里大学的 PDP-8。

规格他记得一清二楚：**4K 内存，12 位字长，主频大约三分之一兆赫兹。**他顺手算了一下，今天随便一台机器都比它快一万倍以上。

那台机器藏在计算中心的角落，原本是一个网络项目买来的，买来之后基本没人碰。他注意到它闲置，就开始折腾，没人管，于是一直折腾下去。输入设备是一台电传打字机，纸带那种，屏幕还没有进入人们的视野。

这是历史上第一台用集成电路造的计算机。所谓集成电路，也不过是把十到十二个晶体管刻在一片硅上。今天一颗芯片上有上百亿个。

Lex 问：那个年代你有没有感受到摩尔定律的魔力，感觉到未来在指尖。

他把这种浪漫打了个稀碎：那时候它就是个玩具。

但这个玩具解释了一件重要的事。他从小就喜欢动手做东西，做东西的麻烦在于需要材料，木头、电线、开关，样样要钱。写程序不需要任何物理材料，你能构造任意复杂的东西，成本为零。对一个没什么钱的少年来说，这是一扇突然打开的门。

那时候他确实很穷。做电子项目靠翻垃圾桶捡零件，最大的收获是电话公司交换中心后面扔掉的继电器架。他用这些继电器搭了一台会下井字棋的机器。

麻烦在于继电器的驱动电压有讲究，他没有合适的电源。他从一堆废弃电视机里拆零件，拼出一个不对但能用的东西，**最后让继电器跑在 300 伏电压下，接头全部裸露，没有任何绝缘。**

Lex 说我很惊讶你活下来了。他回，原因有很多。他还顺口提了一句，十几岁的极客发现铝热剂很容易自制，是件很常见的事。

在 PDP-8 上，他最初用的语言叫 FOCAL-5，可以理解成极度精简版的 Fortran。写的东西包括二十一点、纸牌接龙，还有一类他特别喜欢的：画函数图像。输入一个函数或者一组数据，让电传打字机把它打出来。没有屏幕，图像由字符一行一行堆出来。

他就看着，觉得，哦，漂亮的图。

## Emacs 是一次顺手做出来的东西

1985 到 1986 年，他在卡内基梅隆。Unix 已经在研究圈站稳，Unix 上却没有 Emacs。当时的主流编辑器叫 TECO，全称文本编辑器与校正器（Text Editor and Corrector）。

TECO 的宏语言公认晦涩。他的原话是，把一段 TECO 程序打在纸上，你会以为那是一页随机字符，比 LaTeX 还难读。

用惯了就明白它的逻辑。TECO 为高速盲打做了优化，几乎每个键就是一个命令，加上 Shift 和 Control，一个键能对应两三个命令，编码密度极高。用它编辑文档，你要在脑子里维护一个游标位置的心智模型：光标在 A 和 E 之间，要交换这两个字母，那就执行这样几个动作。

他给了一个绝妙的比喻：**用 TECO，相当于闭着眼睛用 Emacs。**

最早的 Emacs 就是一堆 TECO 宏。这个名字的意思是编辑器宏（Editor MACroS），最初是麻省理工的理查德·斯托曼（Richard Stallman）等人写的一套宏集合。后来 MIT 之外出现了好几个实现，代码完全不同，继承了那套哲学。

Emacs 加进来的东西里，最关键的是看得见。你编辑的东西以符合文档本来面貌的方式呈现在屏幕上，不需要靠记忆在脑子里画图。再加上它可编程，能自由扩展命令。

他第一次用 Emacs 是某个暑假去 Multics 项目写 Pascal 编译器，那套 Emacs 是伯纳德·格林伯格（Bernard Greenberg）用 Maclisp 写的。他在那台机器上住了三个月，基本上住在 Emacs 里。回到 CMU 之后，他发现校园里什么机器都有，Unix 偏偏没有 Emacs，决定顺手补上这个洞。

**用 C 写，因为当时 Unix 上能用的只有 C。**一两个月之后，这个编辑器已经好用到能编辑自己的源码。接着它占领了 CMU，然后越过校园围墙。原因也简单，Unix 拿下了 ARPANET 上的研究社区，Emacs 是当时最好的编辑器。

那段时间他曾经在 ARPANET 上每一个非军方主机都有登录账号，因为总有人发邮件过来说能不能给我们装一下。那是安全性还没人关心的年代，没人管。

## 八零年代的 ARPANET，就是他眼里的社交媒体

Lex 问他，当年能想象今天的互联网吗。

他的回答有点出人意料：很多东西其实没怎么变。

在 CMU 的时候，社交生活已经高度依赖 ARPANET。那时候没有手机，人们坐在终端前打字，邮件和一行短消息是最主要的沟通方式。约午饭、约约会，全部在网络上完成。

所以他个人的时间线是这样的：**从 1980 年代初到中期，他已经在社交媒体上生活了。**等到 1990 年代互联网爆发、社交媒体成为大众现象，他的感受是这有什么大惊小怪的。变的只是规模。规模的变化确实惊人，底层的东西几乎没动。

真正变了的是网络之外的那些利益格局。

## 为什么有线电视公司恨互联网

1990 年代初，Sun 内部写过一个提案，核心意思是：有了互联网技术，任何人都可以成为内容提供者。你可以把家庭录像发给远方的父母，可以传孩子的作文，街角的小店或者餐馆可以直接向外发布信息。

听起来很正常。在当时，这个提案在另一些人眼里是灾难。

他讲了一个特别精准的观察。有线电视公司的大部分员工，真心认为自己的工作是把好内容送到用户手上，用户为此付费。这是他们在组织金字塔底层看到的世界。

往上走，看法会变。**有线电视公司真正的生意，从来都是把观众的眼球卖给广告主。**这个认知在基层员工那里几乎不存在，在高层是默认设置。对他们来说，互联网是抢眼球的人，并非新机会。互联网上的内容越多，他们的观众越分散，广告价值越低。

他说他们和好几家有线电视公司正面冲突过，就是在这件事上。公司内部分层很清楚：底层在为用户服务，高层在卖用户。

## 柯达知道自己在往墙上撞，但它停不下来

柯达的故事他讲得最细，因为 Sun 当年是柯达的重要供应商，他和柯达的人打过很多交道。

柯达有一个规模不小的数码相机和数字影像研究团队。他们非常清楚趋势线长什么样。数码相机今天的画质确实不如胶片，改善速度是一条陡峭的曲线。两条线迟早会交叉，交叉的那天就是胶片业务的崩塌。**这件事他们知道得太清楚了。**

问题在于，在撞墙之前，他们赚得盆满钵满。

他把这类困境讲成了一个结构性难题。要跨过这道坎，你必须主动做一次转型，转型期必然是一段低谷：收入下滑，利润变负，几个季度报表难看。上市公司的铁律是，CEO 不能让某个季度的报表出现大坑。

他把特斯拉和亚马逊拿出来做对照。这两家公司在早期都敢承受巨大的账面亏损，因为它们有耐心资本：创始人手里握着一大块股票，可以不管华尔街怎么想。亚马逊长期在亏损中运营，本质上是在投资未来。这种做法在一般公司里几乎不可能，因为没有一个持股足够多、说话足够算数的人去顶住季报压力。

他顺带评价了这几个创始人。贝索斯有愿景，而且有能力一直照着愿景走。愿景人人都有，绝大多数愿景是彻头彻尾的蠢主意，然后公司就烧掉了。硅谷的失败率很高，很多失败的原因在于时机不对、运气不好，想法蠢只是其中一小部分。

说到特斯拉，他提了一个很有意思的细节。Model X 的鹰翼门，从工程角度看是彻底的荒唐，他的原话是那是一种对工程的亵渎。说这话的时候他带着欣赏。

因为那对门恰好是伟大领导力的符号：你有愿景，你就一头扎进去。**如果你要做一件蠢事，那就把它做得彻底蠢，然后全力以赴。**

## 聪明地工作是句毒鸡汤

聊到乔布斯，他的态度很坦诚。乔布斯和他有过几次面试和谈判，他个人其实是喜欢乔布斯的，从来没想过给乔布斯干活。

Lex 追问为什么。

他说，乔布斯对技术的部分并不懂，对人的感受、对人与物之间的关系，眼光极准。同时乔布斯会吼人、会骂人。

> 我不认为你需要那样做。有推动人做到最好，也有推过头。我认为他站在了那条线的错误一侧。（James Gosling 谈乔布斯）

他接着说了一段批评硅谷的话，说得挺重。硅谷当下的一个问题是，很多飞得很高的公司由彻头彻尾的混蛋在管。乔布斯的神话在这里起了坏作用：他成功了，因为他狠，所以想成功就得狠。这个推论在他看来完全不成立。

他认识很多成功的人，人都很好，只是不在公众视野里。媒体把混蛋抬成了英雄，因为混蛋做的事容易上新闻。

Lex 在这段里做了个漂亮的反弹。他说自己更担心另一种硅谷文化：对努力工作的抵制。聪明地工作而不是努力地工作，这句话听起来像是给懒惰找的借口。追求效率没有错，发现那条高效路径本身需要大量的笨功夫。

他完全同意，而且说得更狠。**那些说聪明地工作而不是努力地工作的人，基本上都失败了。**聪明和努力有先后顺序，先有大量的努力，才有资格谈哪条路更聪明。

他举了谷歌作为反例。谷歌历史上的领导层，拉里·佩奇和谢尔盖·布林，都是很好的人。桑达尔·皮查伊也是。而这是一家工作极其拼命的公司。

## Lisp 的伟大与括号的原罪

Lex 提到一个大家都同意的事：Lisp 是史上最伟大的语言之一。他同意它在自己清单上，不愿意把它排第一。

理由朴素得让人发笑：**括号实在太多了。**

他也说，这些多到夸张的括号里，确实藏着一种有趣的语言结构。他一直觉得应该有一个更友好的 Lisp 版本藏在某个地方，只是他从没花时间去找。

他的清单上，Lisp 之上还有 Simula。这个名字今天很少有人提，它是第一个面向对象的编程语言，1967 年就有了 Simula 67。面向对象和语言真正结合，从这里开始。协程（coroutine）也是第一次作为语言的一部分出现在这里。

协程接近线程，没有真正的并发。好处是不需要复杂的加锁就能写出像多线程一样的代码，心智模型是并行的，你能用完全不同的方式组织很多问题。坏处是它用不上多核。真要在多核机器上跑协程，要么享受不到多核，要么就得掉进信号量和锁的世界。

## Java 不是被设计出来的，是被憋出来的

1990 年，Sun 内部有一小撮人觉得，计算行业漏掉了什么。

起因很模糊：**有些事正在计算机行业之外发生。**电梯、机车、工厂的过程控制系统、音频设备、视频设备，里面都塞了处理器，都在用处理器做事。手机刚露出一点雏形。这些领域的处理器用量，比传统计算机行业大得多。

当时 C 和 C++ 已经完全统治了世界。问题不在于语言没人用，问题在于有一群人正在用 C 和 C++ 重新发明计算机网络，并且在重犯计算机行业二十年前犯过的所有错误。

于是几个人开始了真正的公路旅行。飞到日本，拜访东芝、夏普、三菱、索尼；去韩国见三星；去欧洲见飞利浦、西门子、汤姆逊。因为他们在 Sun 工作，对方愿意接待。

拜访中的发现，一部分在技术上，一部分在文化上。

技术上的发现是，这些消费电子公司造出来的网络方案，一眼就能看出二十五个必然翻车的地方。文化上的发现更深：**这些公司把和用户的关系当作神圣不可侵犯的东西。**他们在可靠性和性能之间不做交易。

这一点让他印象极深，计算机行业不是这样的。计算机行业习惯用可靠性换性能。他举了克雷超级计算机的例子，当年克雷为了让除法变快，用了牛顿迭代近似，结果是一个浮点数的低若干位本质上是随机数。这在跑分上是胜利，在烤面包机上就是灾难。如果一台烤箱的控制芯片算错了温度，后果不是重启，是房子着火。

回到 Sun 之后，他们决定用一个最土的办法去理解这些市场：做一个原型。做一个家庭电子设备的控制系统，电视、录像机那一类。

写的还是 C 和 C++，写着写着，麻烦就暴露出来了。

团队里有一位做商业计划的同事，MBA 出身。日常讨论里他反复问一些外行问题，这些问题逼着工程师把一些习以为常的东西重新审视一遍。安全性的要求、可靠性的要求、内存管理的细节，一条一条浮上来。

最刺眼的是裸指针。1990 年代初，行业里已经有共识：**安全漏洞的第一大来源就是指针 bug，占全部漏洞的五到七成，其中绝大多数是缓冲区溢出。**

他在这段里放了一句自嘲。他年轻时做过一个 Pascal 到 VAX 汇编的翻译器，那个项目是为了把一批跑在 PERQ 工作站上的软件搬到 VAX 上，PERQ 是 Three Rivers 计算机公司造的教育用机器。他本来以为那是个偷懒的权宜之计，结果生成的代码质量比 C 编译器还好，快得惊人。他当时想把这个做成博士论文题目，没人觉得有意思。

好几年后，当 Java 团队需要解决同一份软件如何跨不同指令集的机器运行这个问题时，那段经验回来了。

于是他想到，为什么不做一台抽象机器。写一个指令集，让代码编译成这台抽象机器的指令，然后为每一台真实机器写一个翻译器。既可以解释执行，也可以编译执行。解释器容易写，编译器跑得快，两条路都留着。

他的总结带着一贯的自嘲：**我大部分好主意都是懒出来的。有些人的蠢主意，是因为他们不够懒，非要把东西做得特别复杂。**

## 虚拟机的两次胜利

Java 虚拟机是一个被刻意设计成可以从多个角度理解的东西。

一个角度很少被提及：你可以把它看成语法树的逆波兰记法编码。另一个角度是它对外呈现的样子，一台抽象机器的指令集，而这台抽象机器可以被翻译成任何一台物理机器。

为什么这件事重要，要回到 1990 年代初和消费电子公司打交道的场景。

采购部门的痛苦非常具体。一台设备由钣金、齿轮、电路板、电容、电阻拼起来，除了 CPU，几乎所有零件都有多个来源，可以比价，可以谈判，能拿到合理价格。

CPU 是专有的，而且每一代都不同。一旦选了某家的芯片，你从今往后就是它的客户，没有退路。因为你的软件已经焊死在这台机器上。C 语言在这件事上特别糟，它把底层机器的太多特性直接漏给了程序员。字长、字节序、浮点行为，全都写在代码里。

最荒谬的地方在于时间的错位：**这个不可逆的决定，必须在第一行软件写出来之前做出。**采购部门被这个逻辑逼疯了很多年。

虚拟机解决的正是这件事。芯片之上的那一层被抹平，软件的生命周期和芯片的生命周期脱钩了。你想换供应商，换就是了。

他还讲了另一半痛苦：跨代迁移。Sun 当年从摩托罗拉的 68010 换到 68020，两代芯片之间有一堆差异，其中一条把他们坑得极惨。他因此成了这个案子的主要负责人，整整一年的人生被这件事吃掉。

在所有差异里，最要命的是浮点。

早年的机器不全是补码表示整数。CDC 的机器用反码，偶尔还有用十进制的。他觉得这已经够荒唐了，干脆就定死：整数就用补码，别再折腾。

浮点更乱。各家机器对浮点的处理方式差异巨大，后果是整个软件行业没法写出一个通用的数值计算库。在 CDC 上能跑的代码，搬到 IBM 上就不对，再搬到另一台机器上又是另一回事。

行业里为此积累了大量工作，最后沉淀出一个标准，也就是后来的 IEEE 754。他做 Java 的时候，这个标准已经基本统一了天下，只剩几个角落还有钉子户。他的态度强硬：**必须能说清楚二加二等于什么。**

这场仗打得很不体面。有几台机器没有正确实现 754，主要对手是英特尔。英特尔在舍入上做了奇怪的处理，在超越函数上做了更奇怪的处理，名义是优化。

他提到一个至今让人无话可说的细节：英特尔的三角函数在做范围约简时，用的圆周率值略有偏差。正弦和余弦的计算，建立在一个错的 π 上。

## Android 那笔账，本来可以便宜很多

访谈快结束时，Lex 问了 Android。

他的回答被时间限制压得很紧，信息量不小。他说他很高兴谷歌做了这件事。Java 在手机上已经跑了很多年，跑得很好。

问题出在怎么做的这一部分。他点名了当年主导 Android 的安迪·鲁宾（Andy Rubin），越了很多条线。这些越界后来滚成了巨额诉讼。在他看来，这些线本来完全没必要越，**不越线的成本要低得多。**

Lex 追问，是不是当时没人预料到 Android 会这么成功。

他的回答很有意思。他觉得这件事跟安迪做了什么关系不大，它注定会爆炸。他形容安迪像是一个炸弹制造商。有些最好的东西和有些最坏的东西，都出自这种爆炸性。

至于骄傲这件事，他给了一个更早的答案。Android 出现之前，Java 已经在几十亿部手机里了。比手机更让他骄傲的是智能卡标准采纳了 Java。那个项目里所有参与者都做得很扎实，SIM 卡就是其中之一。你口袋里那张卡，跑的是 Java。

## 开源、斯托曼，和软件工程师必须发誓贫穷

Lex 问了一个不太好答的问题：你做过一些很棒但没成为主流的工作，部分原因是许可问题。回头看开源这件事，你怎么想。

他先给了立场：整体上他是开源的大粉丝。开源能建社区、能推动协作、能加速开发，这些都很了不起。

他对一件事有意见：**当开源变成宗教，开始主张一切都必须开源的时候。**在他的理解里，这个版本的极端主张等价于要求所有以生产信息为生的人发誓贫穷，包括写软件的、拍电影的。这条他接受不了。

他承认自己心里有一小块是认同那种冲动的。有人靠一个专利赚了几十亿，那个专利来自半夜半睡半醒时劈下来的一道闪电。那是运气，运气好没什么可说的。当这种运气膨胀成他眼中的剥削时，问题就出现了。他举了制药业的例子：一种药一天要一百美元，这不对劲。

他真正在意的有一个更具体的判断标准：**如果一样东西因为不开源而变成了更差的产品，那就是坏事。**

他自己就是受害者。Lex 说，我用 Emacs，我很抱歉，我本来可能用你写的那个版本。他说，其实你现在用的那个，血统上可以追溯到他写的那一份。Linux 上的默认实现，源头绕了一圈是他的代码。

为什么没继续做下去，他讲得很实在。研究生最后两年，有一件事变得很清楚：要么当一辈子 Emacs 先生，要么毕业。两件事他做不到同时。

他去找了 ARPANET 上所有可能接手的人，几乎每个人都回了一句：我有正职工作。最后找到新泽西一个车库里的两个人，还带着一条狗，他们愿意接手，但要收费。他的条件是，对大学和学校必须免费。对方答应了。这个安排得罪了一些人。

他也承认，如果当年当了 Emacs 先生，今天可能非常有钱，Emacs 也许会膨胀成一整套文本处理产品线。他的原话是：**自己在财务上有一长串次优决策的历史，因为他不想要那种生活。**

谈到理查德·斯托曼，他试着把分歧讲清楚。他的立场是，当信息必须自由被推到极端，结果就是所有以生产信息为业的人都要发誓贫穷。他不想暴富，他也不是暴富的人，但他得养孩子。

他也承认平衡的另一面。有些软件闭源之后，官僚体系开始生长，产品反而变差了，这让他难过。这是双向的。

他举了一个很少被提到的现实机制。很多国家的会计和审计标准，包括萨班斯法案的各种解读，会有这样的逻辑：如果一家公司的业务依赖某个软件，你没有为它买支持合同，这在审计上是一个风险项。于是你必须买支持合同。这就给开源软件公司提供了一条活路，卖服务和支持。

这里也有分寸。开源数据库厂商收的支持费，和甲骨文那种收法，是两回事。他用的词是贪婪。**平衡是存在的，问题在于太多现代商业变成了赢家通吃。**

## 他留下的东西，不是语言

访谈最后两个问题，一个关于遗产，一个关于给年轻人的建议。

Lex 问，五百年后人们写到你，你希望他们记住什么。

他的回答是：**希望人们不害怕做出信仰之跃。**

他说自己有一份很怪的历史，做了一堆奇怪的事，结果还不错。最怪的那些，往往是最酷的。当然也有烧掉的。他估了一下，自己做过的事里，超过一半是烧掉的，偶尔让人极其恼火。

但还是要继续做。即使烧掉，你至少学到了东西。

给年轻工程师的建议很短：不要害怕风险。做蠢事一两次是可以的，社会会给你一两次豁免。第三次第四次就不太行了。

他还讲了一件我觉得是整期访谈里最值得抄下来的一段。

他很早就在思考技术决策里的伦理问题。因为他是科幻小说的大粉丝，他会把每一个技术决定放进一个框架里问：你是在造《银翼杀手》，还是在造《星际迷航》。你更愿意住在哪一个未来里。

他的答案毫不含糊：《星际迷航》。

Lex 顺着说，那最喜欢的 AI 就是《星际迷航》里的 Data，最不喜欢的当然是天网。他同意，谈话就此结束。

这个结尾看着轻松，其实很硬。一个写了全世界最流行语言之一的人，衡量技术的方式，是这东西把人带向哪个未来，性能、市场份额、融资额都不在这个位置上。他一生做的很多选择都笨拙、不最优、财务上说不通，这条标准一直在。

最后他留给节目一句话：生活里最难的事之一，是做选择。

从 PDP-8 后面那个没人管的角落，到 300 伏裸线搭出来的井字棋机器，到用一个月的晚上写出改变整个研究社区工作方式的编辑器，到因为讨厌指针 bug 而做出的那台虚拟机，这条线索其实一直都在。他一直在做的，是把世界收拾得让人能一眼看明白。

- 翻出最近写的一段代码，试着把其中一个函数压到一屏之内。看不到全局的时候，你其实是在靠记忆写程序，而记忆会漏。
- 下一次技术选型，先问一句：这东西三年后要换掉，成本是多少。绑死在供应商身上之前，想清楚退路在哪。
- 查一下自己项目的代码库里有多少裸指针、多少手动内存管理。三十年过去了，这一条仍然是最常见的漏洞来源。
- 如果你在带团队，把推人一把和把人推下悬崖分开。前者能让人做出这辈子最好的工作，后者只会让人记住你是个混蛋。
- 给自己留一两次信仰之跃的额度。前两次搞砸是可以的，把它算进学费。第三次开始，先复盘。
- 做一个技术决定之前，花两分钟问自己：这东西是在把世界推向《星际迷航》，还是《银翼杀手》。答案不一定要改变决定，但值得你知道。
- 别信聪明地工作而不是努力工作。那句话的完整版本应该是：先努力到有资格谈聪明。
