# 戴夫·普拉默：编程、自闭症与老微软往事

> 前微软工程师回忆开发任务管理器与 Windows 的年代，也谈编程这门手艺与自闭症带来的视角。

- 原标题：#479 – Dave Plummer: Programming, Autism, and Old-School Microsoft Stories
- 期数：第 479 期
- 发布日期：2025-08-29
- 嘉宾 / 主题：戴夫·普拉默
- 网页版：https://lexfridman-cn.pages.dev/ep/dave-plummer/
- 官方页面：https://lexfridman.com/dave-plummer/
- 精读字数：约 13655 字（阅读约 30 分钟）

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

Windows 任务管理器每个月被大约 20 亿人打开。它的第一版是 87KB。

戴夫·普拉默（Dave Plummer）写它的时候，是在自己家里写的。那时候他刚进微软不久，白天在 Shell 团队改 bug，晚上回家打开编辑器，从注册表的 HKey Performance 里读性能计数器，因为他没有内部 API 的权限，而他又不愿意在家里调用内部接口。

后来这个程序被收编进 Windows NT 4.0，成了几代人的肌肉记忆：电脑卡了，Ctrl+Shift+Esc，看看谁在吃 CPU，把它杀掉。这个动作太自然了，自然到没人会想它是谁写的。

## 他想给那台机器下英文命令

1979 年，十一岁的普拉默骑着自行车去当地的 RadioShack。柜台边堆着一摞箱子，标签上写着“computer”。店员说刚进货，还没装。他说那我帮你们装。

> “我完全不知道自己在干什么。它不比一台组合音响复杂。问题在于 Tandy 公司用同一种五针 DIN 接口做电源、视频和磁带机，插错了就炸。”（戴夫·普拉默）

他照着标签接好线，机器亮了。接下来他做了一件很有代表性的事：往 BASIC 解释器里敲英文句子。PRINT 2+2 能用，别的就不行了。他不理解为什么更“正常”的英文反而不行。

那台机器是 TRS-80 Model 1，Level 1，4K 内存。同一个时期，Commodore PET 2001 和 Apple II 相继问世。普拉默今天把“史上最伟大的电脑”这一票投给 Commodore 64，理由是销量，跟设计无关。他的判断标准很朴素：一台机器影响了多少人。

## 他用十六进制手写了一个 Galaga

他的第一台 Commodore 64 是被他烧坏的，准确说是软驱。机器不是从大零售商买的，没有保修，得寄回德国修。于是他只剩一台磁带机，和一个从磁带加载的机器码监视器。那个监视器带反汇编功能，但没有汇编器。

所以他直接在十六进制里敲 6502 指令码。

他做的第一个东西是 Galaga 的克隆。敌人会随时间推进，逻辑完整，纯手工机器码。6502 的代码没法重定位，想往中间插一段，只能跳到别处执行完再跳回来，代码结构惨不忍睹。但它跑起来了。

然后他做备份。

他把空白盘复制到了数据盘上。几周的工作，一张盘，一个方向搞反的操作，没了。

> “我当时有很强的负罪感。你毁掉了几周的工作，而且你知道这是因为你着急了，或者做了个蠢决定。”（戴夫·普拉默）

这是他的第一次数据管理课。他今天还记得那种感觉，说明这堂课上得够狠。

## 辍学是一个过程，由一百个小决定累积而成

他高中辍学了。他自己强调，辍学没有“那一刻”。

> “没有哪一刻你决定辍学。你只是去得越来越少，少到有一天你意识到，现在出现会很尴尬，因为我已经很久没去了。然后很快你就彻底不去了。”（戴夫·普拉默）

他说的这个机制值得每个人警惕。你每天做的是一个小决定：“今天不去上课。”但这个决定重复足够多次，就变成了一个大决定，而这个大决定你从来没在清醒的时候做过。

然后他在 7-Eleven 上夜班，也在油漆仓库干过。7-Eleven 的夜班要做账、做行政，店长倾向于安排脑子够用的人，但这个人得有个人理由必须留在 7-Eleven。他没有高中毕业证，正好符合。

他形容那份工作里最难受的部分是量油，被持刀抢劫反倒排不上号。

一根十五到二十英尺长的木杆，刻度是英寸和英尺，没有电子传感器，你得把它捅进地下油罐再拔出来，看油面停在哪个刻度。第一次他滑手了，重新抓了一把，零下四十度，一手木刺。

> “我意识到我不想一辈子干这个。然后我想到‘下次我要换个方式拿’，三秒之后我又意识到这想法多荒唐。”（戴夫·普拉默）

二十一岁，他去找本地高中的校长，问能不能回来。校长说不行，你年龄超了，也没位置。他说，从现在到开学之间，总会有人辍学，位置就有了，那我们假设位置有了，我能回来吗。校长让他回来了。他补了三到四门课。

进了大学，第一学期他仍然没当回事。几何 90 是给没修过十二年级几何的人开的补修课，他以 1% 的差距被教授放行。因为补修课成绩不计入成绩单，他等于白捡了一个新起点。第二个学期开始，他为自己学，结果完全不同。

## 他翻遍注册卡，找微软的邮箱

大三暑假，他在电话公司做 UNet 到 TCP/IP 的迁移。听起来宏大，实际工作是换卡，然后搞清楚为什么客户的 config.sys 改完之后 Lotus 跑不起来了，因为可用内存少了 10K。他形容那是做计算机工作最糟糕的年代。

午休时他在美食广场读一本讲微软怎么诞生的书。他读得入迷，觉得那就是他想去的地方。但他在萨斯喀彻温省，能做什么？

他大学是靠一款叫 HyperCache 的软件读完的。那是 Amiga 平台的文件系统缓存，机器出厂不带，他自己写，用 C 加 68000 汇编，卖了两千多份，单价二十到四十美元。那时候买软件要寄回四乘六英寸的注册卡，上面写名字、地址、邮箱。

他把整摞注册卡翻了一遍，找微软后缀的邮箱地址。找到三四个，挨个冷邮件发过去。

其中一个人叫阿拉斯代尔·班克斯（Alasdair Banks），回信说有个人可以介绍给他。那个人叫本·斯利夫卡（Ben Slifka），电话面试之后，决定招他去做 MS-DOS 的暑期实习。

这套路径今天几乎无法复制。一个没有文凭、在加拿大中部、靠卖 shareware 为生的年轻人，通过翻注册卡找到了进入微软的门。但它背后的逻辑是通用的：**先做出可以展示的东西，再拿着这个东西去找人。**

## 他眼中微软最可怕的地方，是人

> “那是我参与过的最强的一群聪明人的集合。你在普通计算机公司上班，那个真正懂行的人，他那个更聪明的朋友，多半在微软上班。”（戴夫·普拉默）

他在访谈里讲这个感受的方式很实在。你从小地方来，是当地的大拿，觉得自己懂很多。到了那儿，第一个反应是不敢说话，怕显得蠢。

关于比尔·盖茨，他给的评价没什么神话色彩：盖茨对“每家每户桌上一台电脑”这一个念头 relentless 追逐，雇比他更聪明或至少一样聪明的人来执行，搭出一台几乎停不下来的智力机器，然后去卖非常简单的产品。

MS-DOS 按他的说法，一点都不复杂。它就是命令行启动器：你输入命令名，它去当前目录和 PATH 里找，找到就加载进内存执行。加一点环境变量，一点脚本语言，能访问硬盘和 CPU，不能多任务，没有图形界面。90% 的 DOS 就是这回事。

但这恰好是那个市场需要的。微软跟 IBM 谈成了每台 PC 都预装 DOS，收费不高，却拿到了一个用了几十年的标准位。**这里面的运气成分和眼光成分，普拉默都承认。**

## 640K 是一个责任，不是一句名言

“没人会需要超过 640K 内存”这句话不是盖茨说的。普拉默直接否掉了这个流传几十年的梗。

但 640K 这件事本身，他讲出了开发者视角的重量。x86 实模式的内存上限摆在那儿，你作为操作系统开发者，用掉的每一 K，用户就拿不到。你无谓地用掉 10K，全世界每一台机器就少 10K。这是一种很具体的责任感，跟今天动辄几十 G 的运行时环境不在一个尺度上。

他在实习期做的第一件正事，是给 SmartDrive（磁盘缓存）加上 CD-ROM 缓存。光盘刚出来，微软 Bookshelf 是少数能跑的产品，缓存做得好，速度能快几十倍。更麻烦的活是把 SmartDrive 和后来的 DoubleSpace 压缩引擎搬进高位内存。

x86 上有个 A20 地址线，控制内存指针在 1MB 处回绕还是继续往上。你可以把段寄存器和偏移组合成超过 1MB 的地址，从而多拿到 64K，把代码放在那里，低端内存只留跳转桩。他们靠这招给几个产品多榨出 64K。他当时完全不懂 HIMEM 是什么，因为他是 Amiga 程序员，来微软之前没写过一行 x86 代码。

## 移植代码像闯进别人家翻抽屉

> “这就像闯进别人家，翻他们所有东西，看到他们不想让你看的抽屉里的玩意儿。你会发现墙上的好画，也会在床头柜里发现一些让人不适的东西。”（戴夫·普拉默）

他参与把整个 Windows 95 的用户界面移植到 NT 上。核心工作之一是全部转成 Unicode，每个 8 位字符变成 16 位。他形容代码切换完之后是一片混乱。

他看到了宽度 200 字符的行，里面夹着脏话。这些东西后来几年里被清理干净了，但当时的代码水平说不上多专业。

这件事的另一面是：**你写的每一行代码，都有人要一行一行读过去。**包括五年后的你自己。普拉默说，这就是程序员的宿命，你写的时候以为没人会看，实际上会被非常多的人看到，而且是最挑剔的看法，因为他们正在找 bug。

NT 是另一套故事。微软从 DEC 挖来了戴夫·卡特勒（Dave Cutler），他在那边做过 VMS 和 RSX-11。DEC 西海岸的 Prism 和 MICA 项目被取消，整个团队一起过来了。所以 NT 是一个全新设计，起点是 OS/2，但 OS/2 是汇编写的，NT 要用 C 写，具体借鉴了多少，普拉默说他也不清楚。

他给卡特勒的定位很干脆：内核的架构师。Linux 世界里是林纳斯，Windows 世界里是戴夫·C。

> “这人聪明得可怕，但他也像个农场主。他会跟在你后面，确保活儿干完了，而且干对了，确保你没往他的操作系统里塞垃圾。他不容忍这个。”（戴夫·普拉默）

他今年八十五岁，还是微软 Fellow，据说每天仍然写代码，仍然去上班。

## 他输过一场架，至今不服

移植时他们在 MIPS 机器上干活，RISC 架构不允许非对齐地址访问。而 Windows 的 ID 列表是把 C:\、Windows、System32 这些组件拼起来的字符串表，字符数一变成奇数，后面所有数据的地址就错位了。

从非对齐地址读字符串，要么开异常处理器逐字节复制，要么付出极大代价。他在邮件列表里主张：干脆保证 ID 列表永远是偶数长度，或者用个 hack 强制对齐，这样所有引用它的代码就能全速跑。

争论升级成人身攻击级别的对吵。他输了。

> “我今天仍然知道，Windows 里那段代码比它本该有的速度慢几千倍。没人在乎，因为已经够快了。但它本可以快得多。”（戴夫·普拉默）

他讲这件事的语气里没有怨恨，更多是那种工程师特有的、对某个技术判断长期不服气的执拗。二十多年过去，他还记得。

这类争论他也见得多。两个聪明人吵到最后，技术优劣变成次要的，赢过对方变成主要目标，这时候讨论就不再产出任何东西。

## 他们那时候调试，全程看汇编

半天时间在调试，而调试的大部分时间花在纯汇编的调用栈上。没有源码级调试，你可以在旁边看源码，但屏幕上永远是机器吐出来的汇编转储。

更麻烦的是同时支持四套指令集：Intel、MIPS、Alpha、PowerPC。机器在哪套平台上崩，你面对的就是完全不同的寄存器和指令。他在 MIPS 上经验多，所以 MIPS 的活儿会流到他这儿。

这活儿在今天是难以想象的耐力消耗。他说自己职业生涯里 20% 在创造，80% 在调试和修东西。他有点修理工的名声，所以他总能接到这类活。

他讲了一个和任务管理器有关的 bug。程序偶尔会显示 CPU 总占用超过 100%，这对一个任务管理器来说非常难堪。他加了一堆断言，确保加起来之前每一项都不超 100，最后总和也不超 100，结果断言一次都没触发，用户那边照样能看到。

最后他把自己的电话号码写进了断言消息里：如果你看到这条消息，打 425-836 找 DavePL。

后来压力测试的调试器真的抓到了，问题出在内核的计数逻辑，不在任务管理器。内核那边改了。电话本该删掉，他们只是注释掉了。

> “所以它就这么发布了，现在网上泄露的 NT 源码里到处都是。我找任务管理器代码的办法，就是在谷歌搜我的电话号码。”（戴夫·普拉默）

他对断言有一套近乎宗教的态度：

> “我不去断言我希望不成立的事。我断言我知道不可能成立的事。这才是断言的本意。一旦它触发，那就是 bug，绝不能当成一条可以忽略的提醒。”（戴夫·普拉默）

他也知道很多人不敢加断言，怕它真的响。他的比喻是：你在路口转弯，觉得可能有车来，但你不往左看，因为你不希望有车。**不敢断言，本质是不想知道真相。**

他强调断言要长在代码里，不是事后补上去。写到某个函数，你知道这个指针不可能为空，那就断言它；你知道计数永远小于两倍字节宽度，那就断言它。

## 那个 87K 的程序，是从家里长出来的

任务管理器的起点是他自己想要一个东西：看清哪些程序在吃资源，哪些卡死了，然后能杀掉。他在家写了基本功能，用的注册表性能键，因为在家不能调内部 API。

收编进公司之后，他才能调 NtQuerySystemInformation 和 NtQueryProcessInformation，直接拿到真实数据，这让程序变得极快、极灵敏。

他从来没把功能多当目标。功能就是那一套，他想要的都有了。他要的是**绝对的健壮，和绝对的小**。第一版 87K。

做到这个体积的手法今天看有点硬核：完全不链接 C 运行时。他确保自己不调用任何运行时函数，也不链接它们，省下大约 96K，那几乎是程序本身的大小。代价是他得手动从分派表里调用所有对象构造函数，因为没有运行时会替他做。

不卡死的关键是不做假设。你调 Shell 去启动一个程序，那个路径可能在某台 TCP/IP 共享上，超时要等 90 秒。所以任何可能耗时的 API 调用，都得放到单独的线程里。程序因此变得多线程，复杂度上去了。

他还顺手发明了一遍汉明码。任务管理器的每一行每一列都有脏位，他通过行列两个方向的脏位反查哪些单元格需要重绘，配合 ListView 控件做到只重画变化的那一格。所以它能画得极快，缩放极其顺滑。缩放是他个人给这个程序定的最大目标：拖到任何尺寸都不崩，即使有 32 个 CPU（那个年代不可能），它会画八张图然后循环，今天还能跑。

这些代码今天大部分还在。上面叠了深色模式、XML 配置、GPU 和温度监控，体积从 87K 变成四兆。

> “这就是我们生活的世界。”（戴夫·普拉默）

## 扫雷和纸牌是鼠标教程

这两款内置游戏放进操作系统，充当的是教学工具。纸牌教你拖拽，扫雷大概率是右键，每一个都在教你一个操作。普拉默说得很直白，这是给新用户熟悉鼠标用的教具。

结果一整代人在这上面耗掉了无法统计的时间。

太空军校生弹球（Space Cadet Pinball）是他另一段经历。有人走进他办公室问他接下来三个月想干什么，他说不知道，对方问要不要移植弹球。当时 NT 需要一个视觉展示，证明它能跑高速图形或者至少是响应灵敏的图形。

麻烦在于原版大量代码是汇编。他在 MIPS 机器上，只能先全部改写成 C，才能往各平台移。游戏核心是一个巨大的状态机，他记得大概是五十个分支的巨型 switch。里面还有彩蛋。他把这块当黑盒处理，自己的代码在上面做绘制和声音。

有个细节他一直被问到：为什么移植版的物理跟 Windows 95 原版略有不同。答案是 bug。他按每秒能画多少帧就画多少帧，在现代机器上弹球能跑到五千帧，于是物理被插值了五千次，而原来只有三十次。**结果物理反而变“好”了，或者说至少不一样了。**后来这个问题被修掉了。

## 他把一栋房子的照片贴在显示器上

1993 年，他和妻子开车在附近看房。有一栋三层卧室的房子，车道上停着一辆 93 年款红色科尔维特敞篷，售价三十万美元。他拿不出三十万，连首付都拿不出。

他拿了传单，剪下房子的照片，贴在显示器上。

晚上回家他做两件事：一是释放白天修 bug 时无处安放的创造力，二是挣点外快。他照着一份 MSDN 的示例写 Shell 扩展，做出一个能在资源管理器里打开文件夹的东西，然后往里加 ZIP 支持。每一步都是增量。

他把它当 shareware 卖，19.95 或 29.95 美元，卖了几百到几千份。

某天早上他准备上班，接到一个电话。对方问，你是戴夫·普拉默吗，你是写 Visual ZIP 的那个人吗。他说是。对方说，我是微软的贝琪，我们想收购它，你能来谈谈吗。

他问，你在哪栋楼。

对方愣了。他说我过来一趟就行。对方说不行，得先联系差旅，联系法务，要走流程。来回几句之后两个人才反应过来：贝琪不知道他就在微软上班。他们是照着作者信息冷电话打过来的。

他接受了报价。理由很实际：不接受的话，要么继续卖自己的版本然后辞职，要么停卖然后继续上班，两个都不好。

然后他买了一辆二手的 93 年红色科尔维特。

收编进 Windows 之后功能砍了不少。加密去掉了，因为那个年代加密算法算军需品，不能随便往操作系统里塞。多卷支持也去掉了，为了简化。

ZIP 本身的来历他也讲了。BBS 时代，人们用调制解调器拨号下试用软件，需要压缩。可执行文件大概能压到一半。一个叫菲尔·卡茨（Phil Katz）的人做了 MS-DOS 上的命令行工具 PKZIP，从此在整个 PC 行业无处不在。Windows 出来的时候，市面上已经积累了十年的 ZIP 文件，系统却打不开，这就是内置支持的动力。

这套代码今天还在用。他补了一句：它是单核时代写的，完全没有多线程。你有一块 96 核的 7995，解压时它只用其中一个核。

## 激活是他做的，他知道这东西招人烦

Windows XP 快发布时，原本负责把 Office 的激活机制移植到 Windows 的人一再延期，做不完了。普拉默有“能快速修好东西”的名声，于是被找上门。

他带着做 DRM 的团队和做产品密钥数学的研究人员，赶在 XP 发布前做出来了。

他也承认这东西烦人，尤其是电话激活。你得把硬件参数（内存、硬盘、绑定的各种硬件特征）和产品密钥一起编码成字母数字，让人在电话里念出来。

> “你要是觉得电话激活很痛苦，想想在电话另一头干活的人是什么感受。连着八小时听产品密钥，那是份能把脑子磨平的工作。”（戴夫·普拉默）

## 操作系统不该成为对手

话题转到 Windows 11 的任务栏。他做过一期讲“为什么任务栏不能移动了”的视频，反响极大，愤怒是实打实的。

他给的解释不站在用户这边，也不站在微软这边。可以移动意味着渲染、布局、标签页排布的所有代码复杂度上升，bug 面变大，代码量变大，可能需要多一个开发者或者某个开发者的一部分时间。问题是，为了满足一小撮用户的小众需求，到什么程度还值得。

莱克斯·弗里德曼（Lex Fridman）的反驳是：VS Code 什么都能配，为什么开始菜单不行。这种对小众需求的照顾会形成声誉，会形成一种“这里每个细节都被认真对待”的气场，对招人也有好处。

普拉默的猜测是排期决策。重写开始菜单的时候，砍掉左右上下、双行标签这些特性，能提前四个月交付。他不认为这是对的决策，但很可能是真实的动因。

他提了一个更根本的问题：你希望操作系统是你的对手吗。Windows 有时候给人的感觉就是这样，它不站在你的利益这一边。

莱克斯举的例子很具体：登录时不想用微软账户，系统把这个过程设计得像在骗你，你得反复点“跳过”，还要确认“你确定吗”，一个界面的意图变成了让你做不到你想做的事。

普拉默补了另一个：升级时的“使用推荐设置”。听起来像该选的，实际上会把你重置回 Edge 和一堆别的东西。推荐是给他们推荐的，跟你没什么关系。

> “我宁愿每年付 199 美元用 Windows Pro，或者一个月 20 块，别再往上推销，别把我的数据变现。”（戴夫·普拉默）

## 老虎机的真相

他玩老虎机，明知整体是亏的，但那些强对比色和灯光对他是实打实的多巴胺盛宴。

机制他也讲清楚了：机器内部有个黑盒，只干一件事，生成下一个随机数和对应的赔付结果。然后游戏说，我得编一段电影来配合这个结果。三个 7 还是别的什么，跟结果没有因果关系。**转轮停下、看落在哪儿、再判断你赢没赢，这个顺序是颠倒的。**

至于跑什么代码，他不知道。他试过接触，很难。都是基础 Windows PC，架在某种他不知道细节的安全飞地里。

他还讲了七十或八十年代拉斯维加斯的一个技术员，自己烧 ROM，把后门写进去，借着维修的机会换上自己的 ROM，半年后回来触发。

## 他给一台 PDP-11 装了四个兆内存

这几年他的特殊兴趣是老硬件。他修 1960 年代的肌肉车和卡车，也修 PDP-11。

他攒了多年零件，决定装一台他能装出来的最好的 PDP-11，就像给 PC 超频那样把一台小型机拉满。四个兆内存，那个年代是天文数字。上面是 PDP-11/70 的控制面板，下面两个机箱，旋钮控制 LED 显示哪条总线，你可以暂停机器，用开关改地址，往内存里塞数据。

灯的驱动不是现成的。他得重写 BSD 内核才能让灯按他想的方式闪。加一块新磁盘控制器，就得重新编译内核，就得去翻源码找设备驱动的位置。

他现在对 BSD 内核已经相当熟了。

## GitHub Primes：用一百种语言写同一个算法

他有个项目叫 GitHub Primes，同一个素数筛算法，用大约一百种语言实现，规则统一，每晚跑一次基准测试，看谁快。

规则很硬：必须是素数筛，每个整数最多用一位，不能用一字节，因为那样更便宜也更容易。内存分配必须在计时循环内。每个实现装进单独的 Docker 容器跑，多核全开，五秒内尽可能多次筛到一亿。

有些语言做不到，比如 6502 只有 64K，筛不了一亿，那些就当表演项目跑。

他最初只写了 Python、C#、C++ 三个，发了期视频，然后别人往里扔实现，扔到失控，现在由欧洲的两个人接手维护。

目前的榜首是 Zig。C++ 那边优化一下能领先一阵，然后 Zig 的人不服气，回来再改快一点。**这是一场没有终点的接力。**

## 他用 Lua 加 Python 教 AI 打 Tempest

Tempest 是 1980 年的 3D 矢量街机游戏，360 度移动，屏幕上最多八发子弹，十一种敌人，还有尖刺。普拉默在这个游戏上持有世界纪录。

他先把 ROM 从机器里取出来逆向，搞清楚代码在内存里怎么分布、零页变量在哪、哪些位置有意义。然后写一个 Lua 程序，在游戏运行时把这些内存位置读出来当特征，通过 socket 送给 Python 那边，Python 做强化学习，用的是 dueling Deep-Q，两个网络互相追逐。

现在 AI 能打到第 36 关，比大多数人强，但那游戏一共 96 关，路还长。

他说得很实在：目标是想打赢他自己。

他的大脑一次只做一件事，但做得极深

自闭症的核心理论叫单otropism，普拉默的解释是：他的大脑做一件事，做得非常投入，做完了再换下一件。他不是多任务处理器，是彻底的串行单任务者。

好处是可以在一个任务上投入惊人的专注和坚持。前提是这件事他得喜欢，得有回报，得能看见进展。他说这感觉跟小孩玩火车是一样的。

坏处是他同时有相当程度的 ADHD。获取专注本身是难点，他极容易被分散，睡觉要戴降噪耳机，或者干脆睡不着。但一旦进入状态，很难被打断。这两件事同时存在，听起来矛盾，实际上是一个门槛极高、进去之后极难出来的房间。

更大的困难是：他不知道别人在想什么。

> “我知道如果我是你，在这个位置，我会怎么想。这是我所能做到的全部。大多数神经典型的人会有一种感觉，莱克斯大概是这么想的或者那么想的，因为他的举止是这样，反应是这样，表情是这样。这些对我来说全都丢失了。所以我给每个打交道的人跑一个代理 NPC 小游戏。”（戴夫·普拉默）

电话对他格外难，因为只剩声音。FaceTime 好得多，因为对方讲完笑话可能会笑一下。在电话里他分不清你是讽刺还是认真。

字面理解也是一部分。他小时候爷爷给妈妈在厨房做花架，用了很大的角铁，五岁的他问这够不够结实能托住花盆。爷爷说，够托住一匹马。他当时非常困惑：为什么要把马弄进厨房，为什么要把马放在花架上。

他和妻子结婚三十一年，在一起三十七年。他们最早意识到彼此不同，是一天晚上坐在车里，看着对面那栋房子，砖柱之间用锚链连成围栏。他盯着那些两英尺见方的柱子想，这是空心的还是回填了混凝土。妻子看着他，说，你脑子里为什么会有地方关心这个。

## 他在比尔·盖茨面前纠正了“三个月”

第一个暑期实习，盖茨把所有实习生请到家里吃汉堡喝啤酒。他的导师本带他去介绍。

本说，这是戴夫，我们从加拿大来的实习生，四个月里他做了这些功能，还写了 SmartDrive 的副本，然后开始列他做过的事。

他打断了。

他说，其实是三个月。

两个人都愣了，对视了一眼。他当场意识到，这个时机不对。

> “小地方的不准确会把我逼疯。”（戴夫·普拉默）

他现在的说法是，自己比过去好多了。以前他不知道，也不知道在对话里毫无意义地插一句纠正会影响对方、让对方有什么感受。现在他有更好的判断力了。

## 十秒测试，和十把椅子

他设计过一个粗糙的自测。第一个问题：对一个社会整体而言，合作和创造力哪个更重要？多数神经典型的人倾向合作，谱系上的人倾向创造力，倾向个体解决问题的价值。

想提高精度可以加第二题：一个房间里有十把椅子，六个人进来坐下，还剩几把椅子。

多数人会说四。他说十，因为椅子还在那儿。

> “我并没有在抬杠。我也不想把事情搞复杂。但我的脑子就是这么运作的。”（戴夫·普拉默）

## 他回家后会重放每一个做选择的瞬间

这套方法他叫情绪后处理。见完人，尤其是新认识的人，回家之后他会把当天所有需要做选择的时刻重放一遍，先挑最不舒服的那些。刚才那一瞬我做错了什么，我漏掉了什么，对方当时在想什么，下次这种情况怎么处理，要不要去补救一下。

他讲了一个例子。他父亲 1969 年买的新车，他留着，开了五十年。二十多年前他把车送去翻新，三个工匠做了三年，几千小时。他去提车，检查，很满意，说这个好那个好，然后飞回家，写支票，车送到。

十年之后他才意识到：一群工匠围着他的车干了三年，他当时应该说点让他们高兴的话，夸夸他们干得多好。他没说，因为那一刻他不需要那些话，也没想到别人需要。

他给那家店的老板发了封邮件：不知道你还记不记得，十年前我来提车，可能看起来并不满意，但我想让你知道，我对整台车的工艺和水准非常佩服。

> “他回信说，那个场面我想过很多次。”（戴夫·普拉默）

这十年的时间差，是理解自闭症的一把钥匙。他并非不感激，只是感激的信号在当下没有生成，十年后才被后处理机制捞出来。

也正因为这套机制存在，他要澄清一个流传很广的说法。

> “社区里有一种看法，认为自闭症的人缺乏共情。我认为完全不是这样。我只能代表我自己说，我共情能力相当强。问题出在沟通上，而且是双向的。我不知道你此刻感觉如何，所以在你说出来之前，我很难对你共情。可一旦我知道了，一旦我理解了你脑子里在发生什么，我可以非常为你难过。”（戴夫·普拉默）

在没有信息的情况下，他的默认设定是：你会像我一样处理这件事，用我所知道的方式。

所以他对神经典型的人的建议只有一条：说具体。别指望他能接住暗示、微妙和言外之意。如果你想把他推向某个行为，最好的说法是“戴夫，你需要做这个”。

莱克斯在访谈里当场问：我今天有哪里做得不对吗？没有。那打分呢，一到十分？7.5 分。浮点数打分，很符合这个人。

## 假装正常是一份全职工作

所谓 masking，用他自己的话讲，就是表演正常。

> “你在社交互动里做的每一件事，挥手、表情、语调、姿态，全都是刻意构造的，全是工作量。对多数人来说这是自然的，他们就是这么做的，有些人还做得特别好。但对谱系上的人来说，你得把这一切都假装出来。”（戴夫·普拉默）

他提到 Rush 乐队那首《Limelight》，尼尔·皮尔特（Neil Peart）写的词，大意是世界是个舞台，我们只是演员、表演者和描绘者，互为彼此的观众。歌里反复讲无法把陌生人当朋友、必须伪造情感。普拉默只对已故的人做推测，但他觉得写词的人大概也在处理同样的问题。

这首歌之所以能击中那么多人，可能正因为这份疲惫有普遍性，只是在他们身上被放大到了一个必须每天面对的强度。

## 崩溃是一个开关，不是一段情绪

他描述 meltdown 的方式很像在讲一个系统故障。情绪过载到某个点，你不再能管理自己的行为。他举《雨人》里机场那场戏，或者某些影视剧里那个被禁止做手术的外科医生。

> “开关一翻，你就掉进原始大脑。额叶皮层在某种程度上关闭了，你不再拥有决策和过滤的能力。那种状态下你是一条爬行动物。这本质上是恐慌，是面对无法忍受的当下现实的战斗或逃跑反应。”（戴夫·普拉默）

莱克斯顺口把它比作大脑的蓝屏。普拉默说，差不多。

触发它的一般是一连串事情的累积：糟糕的出差、工作上的争吵、被随机打乱的一天，堆到临界点，任何一件小事都可能成为最后一根稻草。

## “你还好吗”需要两个步骤

他和妻子最近几年养成了一套明确的检查机制。她会问，你还好吗。他答，还好。

> “这里面有两步。第一步是‘你还好吗’，第二步是我的回答。因为如果我只是说‘好’，她就知道有事。”（戴夫·普拉默）

这套机制存在的原因很朴素：他没法通过看一个人就知道对方状态如何。所以必须显式地互相 ping。

他对感情这件事的自我评价很低。“我从来就不擅长跟人打交道。有人喜欢我，我大概也接收不到。”他给儿子买过一件 T 恤，上面印着：如果你在追我，请明确告诉我，因为我毫无察觉。

> “我得在一个人身边待很久，慢慢长进去，因为我没有任何技巧，那种社交舞蹈需要的能力我一点都没有。我唯一的选择就是做我自己，而这对某些人是行得通的。”（戴夫·普拉默）

## 被这些问题吸引的人，大概有一两成

他写过一本书叫《自闭症百万富翁的秘密》（Secrets of the Autistic Millionaire）。书里提到一个概念：很多人会觉得自己“有一点点自闭”。

他的估计是，可能 10% 到 20% 的人处在谱系的某个位置，但影响程度没有高到构成障碍。这些人仍然带有许多源自自闭症的特征。如果能识别并优化地管理这些行为，既可以借力，也可以缓解它带来的缺陷。

这本书主要是写给他孩子的。据他所知，几个孩子都没到 ASD 的诊断标准，但身上都有他某些跟这个相关的行为特征。他想给他们写一本手册。

至于为什么程序员里这样的人格外多，他的答案很直接：那种单向的专注，把问题不断化简的能力，以及对“里面到底是什么”的终极好奇。他一辈子都在拆东西，拆妈妈的烤箱，就为了搞明白翻页钟怎么工作。他认为这是程序员的好习惯。

## 他刚好赶上了需要懂所有层的年代

关于 AI 写代码，他的用法非常务实。Python 他不熟，几乎是新学的，所以这个项目里大量用生成式工具。他觉得很有用，因为看不懂的地方可以看它生成什么，从中学到东西。他自己从零写 Python，长度大概是 AI 产出的四倍，因为 Python 写得好的话可以非常简洁。

他承认自己是在 vibe coding 这个项目。

莱克斯追问了一个关键点：这必须建立在你已经会编程的基础上。普拉默同意。他说你不可能在自己完全不会编程的情况下靠 vibe coding 做出一个东西，但如果已经是个好程序员，AI 能让你变得极其强大。因为你能读懂它生成的东西，能判断下一步该让它做什么。

关于二三十年后的编程，他给的类比是桥梁工程。曾经有一批人在下面焊钢梁，现在人们在 AutoCAD 里拖拽预制件。编程大概也会变成那样：你不再逐行扔代码，你搬动组件和接口，向 AI 描述它们之间该怎么交互，让它把组件造出来。但我们离“凭空生成一个兼容 Linux 的内核”还差得很远。

莱克斯问他会不会觉得遗憾，从机器码、汇编、C、C++ 一路走到用自然语言写代码，抽象层爬得这么快。

> “我出道的时机其实很幸运。技术是在三四十年里一层层长出来的，所以我理解 TTL 逻辑，也能用 AI 写代码，中间那些零件我大概都知道。我的知识当然有洞，但要把这张图拼得这么完整，恐怕只有亲身活过那段时间才行。现在起步的人，很难复制这个。”（戴夫·普拉默）

这句话点出了一件事：他这一代人的知识结构是历史给的礼物。硬件、编译器、驱动、界面、网络，每一层都在他职业生涯的不同阶段被推到台前，他被迫全部学一遍。今天入行的人，一上来就站在十层抽象的顶端，底下九层是黑箱。这不是能力问题，是时代问题。

## 意义这件事，他答得很干脆

莱克斯最后问的是那个大问题：这一切的意义是什么。

> “做出很酷的东西。归根到底，我在乎的是能做出对别人有用的复杂东西，这件事能调动我的能力，让我有创造性，让别人用得上。如果把我限制在绘画、雕塑那些传统艺术里，我毫无希望。对我来说这就是意义所在。然后再养出几个好孩子，把接力棒交出去。”（戴夫·普拉默）

访谈的结尾，莱克斯引用了本贾尼·斯特劳斯特卢普（Bjarne Stroustrup）的一句话：世界上只有两种语言，人们抱怨的，和没人用的。

这句话放在普拉默身上挺合适。他写的东西被几十亿人用过，也被人抱怨过，任务管理器被人抱怨，Windows 激活被人抱怨，ZIP 文件夹被人抱怨。他本人对这些的态度是一致的：先把东西做出来，做小，做稳，然后接受它被使用的方式。

这期对话里最值得带走的，可能不是那些微软往事。是一个人在明确知道自己大脑如何运作之后，围绕这个事实重新设计了生活和工作的方式：用作品代替自我介绍去争取机会，把社交规则显式化成检查机制，把每次失误放回家之后重放一遍，把 640K 当成对全世界每一台机器的责任。

还有他那句关于专注的坦白。他能对一件事投入极强的注意力和坚持，但前提是这件事他得喜欢、得有回报、得看得见进展。这三条其实也是所有人能进入心流的条件，只是大多数人可以在状态不佳时硬撑过去，而他的大脑不提供这个选项。

最后是他自己给出的那份清单。

- 如果你正走在“今天先不去”的路上，注意那个决定正在变大。想走非标准的路，就明确地做大决定，别让一百个小决定替你做。
- 找工作的时候，卖你能做的东西，不要卖你自己。GitHub 记录、你写过的算法、你做出来的成品，比性格展示有效得多，尤其是在你不擅长社交表演的时候。
- 断言要写在你确信不可能成立的事情上，而且要长在写代码的过程里，不要留到事后补。它响了是在帮你。
- 写任何要给别人用的工具，先假设所有 API 调用都可能卡住九十秒，把所有可能耗时的操作放到独立线程。程序的可靠性和体积可以同时追求，87K 的任务管理器就是证据。
- 不要在代码里留自己的电话号码，除非你已经准备好它会在二十年后被谷歌索引到。
- 如果你身边有人在谱系上，把话说具体。不要说“你觉得那样行吗”，直接说“你需要做这个”。不要指望对方接住暗示，那不是不愿意，是收不到。
- 如果你是那个收不到信号的人，建立显式的检查机制。跟亲近的人约定一个固定的问法和答法，把“读空气”换成“直接问”。
- 每隔一段时间，回头重放那些你当时没反应过来的社交时刻。十年后才想起来夸一句工匠的手艺，也比永远不说好。
- 想学一门新语言，最快的路径是带着一个真实项目去学，让 AI 生成，你负责读懂和判断下一步。前提是你已经会编程。
- 如果某件事让你痴迷到想拆开看里面到底怎么运作，别压着它。这种好奇是能吃饭的本事。
