Dave Plummer:编程、自闭症与微软旧日故事 | Lex Fridman Podcast #479
摘要
Microsoft 1990年代的护城河,是人才密度与分发能力的结合,而不是产品复杂度。 Plummer 称 Microsoft 是他加入过的“最具杀伤力的聪明人集合”,而 Gates 持续推动每张办公桌上都有一台电脑,并招聘“和他一样聪明或比他更聪明的人”。MS-DOS 本质上只是一个命令启动器,但把它做成 PC 标准后,Microsoft 得以将这一杠杆复利数十年。
当一个开发者端到端负责可靠性时,微小的防御性软件也能变成基础设施,Task Manager 就是例子。 Plummer 最初为 NT 4.0 编写的应用约87K,拒绝链接 C runtime——按他的估算,这大约还能省下96K——并将可能阻塞的调用放到独立线程,只重绘发生变化的单元。他说,原始代码仍藏在如今约4MB的层层扩展之下,而使用量已经达到“每月20亿次左右”。
稀缺性迫使工程师形成一套现代富裕环境可能掩盖的纪律。 在 MS-DOS 时代,浪费10K意味着“全世界每台机器现在都少了10K”;调试 NT 则要在 Intel、MIPS、Alpha 和 PowerPC 上阅读汇编,没有源码级调试,也没有 Git。Plummer 估计自己的职业生涯是20%创造、80%调试,把修复 bug 的能力变成了稀缺的组织资产。
Plummer 一再把个人工具转化为产品、分发渠道,最终变成 Microsoft 的功能。 HyperCache 以$20或$40卖出几千份,帮助他从 Saskatchewan 冷邮件进入 Microsoft;Visual ZIP 则为他买下一辆二手红色1993 Corvette,后来成为 Windows ZIP 文件夹。此后,一场1万美元、无上限的 banner 投放带来约3.8万美元销售,展现了软件经济学的强大——也说明优化如何迅速越过监管和声誉边界。
Windows 之争归根结底,是平台广度究竟会复利信任,还是复利维护成本。 Lex 认为,高级用户定制能力会营造被用心对待的感觉并吸引开发者;Plummer 则反驳,每增加一个任务栏位置,就会扩大代码、测试、人员和安全攻击面,砍掉功能或许能让重写版本提前4个月发布。他们都同意,持续的 UI 变动会阻碍打磨;当“推荐设置”让人感觉系统试图替用户做决定时,操作系统会失去长期 goodwill。
Plummer 把自闭症视为一种拥有极强专注力、但要求明确沟通的运行模式,而不是低共情的同义词。 他的框架是单向兴趣(monotropism):一个“连续单任务者”可以把极强的投入带到有回报的工作中,但可能错过隐含动机、讽刺或情绪线索。因此他的职业建议非常具体——“卖你能做的事,而不是卖你自己”——管理经验则是直接询问,因为每个员工的激励都不同。
AI 已经能让有经验的程序员在陌生语言中获得杠杆,但 Plummer 不接受专业能力已经变得可有可无的说法。 他在构建 Dueling Deep-Q agent 时使用生成的 Python,让它在 Tempest 中达到约36关,而他自己能打到96关,因为他读得懂输出、也知道下一步该要求什么。他对长期趋势的模型是桥梁设计:程序员将移动组件和接口,而不再逐行编写;但“给我一个兼容 Linux 的 Linux kernel”仍超出现有系统能力。
精读
1. 编程始于物理接触,而非课程体系
1979或1980年前后,11岁的 Plummer 骑车去 RadioShack,自告奋勇组装一台尚未开封的 TRS-80 Model 1、Level 1、4K 机器。他当时对电脑一无所知,起初还在 BASIC 里输入英语;
PRINT 2+2能运行,这让他受到鼓舞,随后又输入了解释器根本无法理解的命令。RadioShack 允许他每周四和周六回来,开启了他职业生涯的前半段:“我想做的全部事情,就是骑车回到那里,多和它待一会儿。”回头看,他认为 Commodore 64 高于 Apple II,因为前者销量更高,可能让更多人接触到计算机。
一台故障的 Commodore 64 软驱迫使他改用磁带,并使用没有 assembler 的 machine-language monitor。他用十六进制输入6502操作码,做出了一个 Galaga 克隆版;其顺序执行、不可重定位的结构像是在“编程一盘磁带”:加代码就得跳到别处,完成工作,再跳回来。
他第一次学到数据管理的教训非常惨烈——他把一张空白软盘复制到了数周的工作上。损失带来“巨大的愧疚”,因为起因是赶时间,但那款消失的游戏仍是他直接用机器语言写过的最复杂项目。
2. 人生会被一连串小决定推向不同方向
Plummer 并不是有意识地退学;他只是“越来越少、越来越少、越来越少”地去上高中,直到再回去变得尴尬。他的警告比“辍学”这个标签更尖锐:一次次决定“我今天就是不去上课”,最终会替你做出那个大得多的决定。
没有文凭的他先后在7-Eleven和油漆仓库工作。转折点是在零下40度的环境里,用15或20英尺长的木杆测量汽油罐;木杆滑落时他伸手去接,约1000根木刺扎进手里,他想到:“我不想一辈子做这个。”
21岁时,他说服校长让自己复学,直接回应对方关于名额的疑虑:总会有人退学,所以“就假设你有位置”。后来,他在补修几何课中靠1%的宽恕分数过关,大学生涯几乎因此结束;下学期他“真正地”开始学习,这次是为了自己,动机改变后,成绩也随之改变。
3. 共享软件组合打开了 Microsoft 的大门
Plummer 靠 HyperCache——一款 Amiga 文件系统缓存——支付大学费用。大部分代码用 C 编写,紧凑的传输路径则用68000汇编;其 N-way associative 设计匹配磁盘几何结构,并围绕磁道级访问进行预取。
他最初通过 Usenet 和 Amiga 论坛分发,提供30天试用,随后进入零售库存。有人打电话订购50份、每份$20——约合1989年的$1,000——这让他觉得数额惊人;最终,他根据适用条款,以每份$20或$40的价格卖出几千份。
在帮助一家电话公司把 UBNet 转为 TCP/IP 时,他读到一篇 Microsoft 历史,意识到那正是自己想要的文化。他从 HyperCache 注册卡中寻找 Microsoft 的邮箱地址,给3或4个人发冷邮件,联系上了 Alasdair Banks,之后很可能又联系到 Ben Slivka,最终由后者面试他,进入 MS-DOS 实习岗位。
4. Microsoft 的优势,是集中的智力与简单的标准
Plummer 对 Microsoft 的第一印象令人挫败:那是他见过的“最具杀伤力的聪明人集合”。当地专家那个更聪明的朋友,很可能就在 Microsoft 工作,因此以“小城里的大人物”身份抵达后,他才发现公司内部的标准有多高。
他对 Gates 的解释不是神秘主义,而是专注:让每个家庭、每张办公桌上都有一台电脑,是 Gates 的“特殊兴趣”;他持续追逐这个目标,并招聘和自己一样聪明或更聪明的人。结果是一台“几乎不可阻挡的智力机器”,专门打造技术上可以很简单、商业上却极其精准的产品。
在 DOS 之前,Microsoft 本质上是一家语言公司。Plummer 认为,公司与 IBM 达成协议,让 MS-DOS 随每台 PC 一起提供,而没有向 IBM 收取高额费用,由此建立了一个 Microsoft 复利数十年的标准——这既有运气,也体现出平台位置比最大化首笔授权收入更重要。
MS-DOS 本身“90%”是命令启动器:在目录或路径中找到一个带名称的程序,加载它,再执行。环境变量、脚本和设备访问增加了一些复杂度,但它没有多任务和图形界面;那句著名的“没人会需要超过640K”并不是 Gates 说的。
5. 内存稀缺让每个字节都变成全球产品决策
640K 限制不只是 DOS 开发者可以使用的容量;操作系统消耗的每一个字节,都会从客户手里消失。Plummer 对责任规模的描述很直接:“如果你无谓地用了10K,全世界每台机器现在就都少了10K。”
他的磁盘缓存背景让 CD-ROM 缓存成为顺理成章的第一个任务。CD-ROM 刚开始进入市场,Microsoft Bookshelf 是少数应用之一,智能缓存可以将访问速度提高“几十倍”,把一个实习生的专业共享软件经验立刻转化为平台性能优势。
他还把 SmartDrive、最终包括 DoubleSpace 压缩引擎移入高内存。Plummer 说自己可能把 A20 线的极性记反了,但这项技术使用段与偏移的算术寻址一兆字节以上的空间,将代码放进额外约64K内存,并留下低内存 stub 跳转进去。
6. Windows 95 赢得家庭市场,NT 重建底层基础
Plummer 曾短暂参与 Windows 95 的 OLE presentation cache,保存嵌入 Word 或 Excel 内容的 metafile 渲染结果,从而无需反复加载源应用。Windows 95 在 Windows 3.1 的16位产品线上扩展出32位支持、VxD 驱动和全新 shell;Start 菜单让这次发布显得具有革命性。
他的影响力排名刻意不以消费者为中心:第一是 OS/360,第二是 Windows 95,第三是 Linux。OS/360 的理由是兼容性——按他的例子,一段1962年的 COBOL 程序可以一路运行到 IBM z17;而 Linux 几乎无处不在的服务器覆盖,使它拥有比 Unix 更大的实际触达范围,后者的血统则更偏学术。
NT 更接近一款从零开始设计的工业操作系统。Microsoft 在包括 PRISM 和 MICA 在内的项目取消后,招募了 Dave Cutler 及其他 DEC 工程师;NT 主要用 C 编写,而不是像 OS/2 那样使用汇编,但 Plummer 不确定团队究竟能复用多少 OS/2 代码或设计。
Plummer 所在的 shell 团队把 Windows 95 界面移植到 NT,将8位 ANSI 假设转换成16位 Unicode。移植意味着逐行检查一切——“像闯进别人家里,把他们所有东西都翻一遍”——既包括优雅的公共房间,也包括藏在床头柜里的、满是脏话且宽达200个字符的代码。
7. 老 Microsoft 靠通宵压力测试与裸汇编发布产品
工作日从下载一份固定的 MS Mail 地址簿开始,覆盖约1万至1.5万名员工,使用10-megabit 网络。第一小时被这项工作占用时,开发者会调查那些被“Stress”压垮的机器;这是一个夜间进程,会接管闲置 PC、运行测试,并通过串口线把故障机器接入 debugger。
崩溃分流完成后,Plummer 才回到编码工作——也就是约80%的时间在修 bug 和做移植。他写副项目,部分是为了“把它从我的系统里排出去”;而白天修复别人代码的工作,则提供了异常深入的学习。
调试 NT 时,即使源码是 C,也必须阅读原始汇编调用栈。崩溃可能发生在 Intel、MIPS、Alpha 或 PowerPC 上,每种架构都有不同指令集;Plummer 最擅长 MIPS,因此这类故障自然会流向他。
工具是缺失的放大器。团队使用
diff和手工差异文件;Plummer 认为,如果当时有 Git 和轻松的分支管理,工作会“容易得多”。人是基础,但“工具就是一切”,因为工具决定了这些人能多安全地协调变更。
8. 强势架构师守住质量,但智力也可能变成表演
Lex 把 Cutler 类比为 Linux 世界的 Linus Torvalds;Plummer 认为 Cutler 是 NT 的 kernel architect,也是项目的驱动力。Plummer 形容他既“聪明得邪门”,又“像个农夫”:紧盯工作进展,要求必须完成,拒绝让糟糕代码进入操作系统。这种监工式风格把 DEC 的工程纪律带进 Microsoft,在 Plummer 看来最终收获了回报。
争论仍可能从技术评估滑向地位竞争。他记得有人在 NT 邮件列表公开抱怨 Cairo 的启动体验,随后引发一封精心写就、怒气十足的 flame;他说,有些争执最终变成“技术优劣……只是次要问题”,关键是压过对方。
他至今仍耿耿于怀的一次失败,涉及 MIPS 上可变长度的 shell ID 列表。奇数字节边界迫使系统进行异常处理和手动字符串复制,让读取成本可能增加100至1,000倍;尽管 beta 已经发布,他仍希望 Windows 95 能保证长度为偶数,但争论变成了私人对抗,最终他输了。
Plummer 仍相信,最终形成的 Windows 路径“比应有的速度慢了几千倍”。同样重要的现实让步是:没人关心,因为它仍然足够快。这说明当硬件把成本隐形化后,技术上较差的决策也可以无限期存续。
9. 严格调试始于先断言哪些事情不可能发生
Plummer 估计自己的职业产出是20%创造、80%调试,部分原因是能力越强,越容易被交给最棘手的故障。一个持续一天的 bug,通常要么是令人尴尬的小语法错误——“哦,多了一个分号”——要么是跨线程 apartment 行为之类的真正复杂交互。
Task Manager 偶尔会显示总 CPU 使用率超过100%。Kernel 工程师起初认为这是 user-land 的错误,因此 Plummer 对每一个准备阶段的求和以及最终总数都做了断言;当这些断言始终没有失败时,他把自己的电话号码嵌入断言,以捕捉一次真实运行中的复现。
Stress 最终在 debugger 下捕获了这个事件,证明问题出在 kernel 的计量缺陷。Kernel 团队修复了它,但 Plummer 那行被注释掉的电话号码随产品发布,后来又出现在泄露的 NT 源码中;他于是通过搜索自己的电话号码,在网上找到了 Task Manager 的代码。
他的规则是绝对的:“我不会断言那些我希望不是真的东西。我断言的是我知道不可能为真的东西。”随着每个函数的假设逐渐明确,断言应自然增加——非空指针、有效计数、不可能状态——因为断言触发是帮忙,不是丢脸。
10. Task Manager 能延续下来,是因为它把失败排除在设计之外
Task Manager 起初是 Plummer 在家里为自己想要的工具。原型从注册表读取性能数据;进入 Microsoft 后,
NtQuerySystemInformation和NtQueryProcessInformation等内部调用提供了快速答案,使它得以随 NT 4.0 发布,既是检查工具,也是终止失控应用的机制。可靠性比功能广度更重要。任何可能触碰网络路径、并等待90秒的调用,都会在另一个线程中运行,因此即使依赖项停滞,界面仍保持响应。这种防御式多线程增加了内部复杂度,却能让应用恰恰在系统其他部分不健康时保持可用。
原始可执行文件约87K。Plummer 拒绝链接 C runtime,避免再增加约96K,然后从 dispatch tables 手动调用 C++ 对象构造函数;他把结果描述为“带对象的 C”,通过“大量额外工作”实现了极小、极紧凑的 binary。
行与列都带有 dirty bit,因此只有变化的单元会被重绘;这项技术是他独立想到的,也让他联想到 Hamming code。调整窗口大小依然流畅,32个 CPU 可以在8张图之后回绕;这套设计经受住了当时不存在的硬件。如今的绘图、dark mode 和 XML 层让程序膨胀到约4MB,但他相信大部分原始代码仍然存在。
11. Pinball 与激活功能体现了可靠救火工程师的价值
为证明 NT 能提供响应迅速的图形体验,Plummer 花了约3个月移植 Space Cadet Pinball。大量汇编代码必须改写成可移植 C,以适配 MIPS 等架构;一个约50个入口的状态引擎——包括一个 Easter egg——则作为黑盒保留在他的绘图和声音工作之下。
一个计时 bug 解释了为什么现代 Pinball 感觉不同:它会尽可能多地渲染帧,理论上每秒可能达到5,000帧,而不是约30帧。因此物理计算会被插值数千次;在保留原始游戏逻辑的同时,产生了 Plummer 所说的可能更好、至少不同的行为。
Solitaire 和 Minesweeper 被加入系统,与其说是娱乐,不如说是鼠标训练:Solitaire 训练拖放,Minesweeper 可能训练右键插旗。Pinball 则承担另一种平台任务:用视觉证明这个被认为是工业级的 NT 也可以感觉很快。
Windows XP 后期,一项适配 Office activation 的工作延误后交给了 Plummer,因为他修东西很快。他与 DRM 和研究团队合作,及时交付了 activation;他猜测其收入影响相当大,但并不知道具体数字,并称电话激活对用户和那些需要读取编码硬件与产品密钥数据的运营人员来说都是一只“信天翁”。
12. Visual ZIP 把工艺转化为收购杠杆
1993年,Plummer 看中一栋约30万美元的房子,门外停着一辆 Torch Red 1993 Corvette;他剪下房源照片,贴在显示器上。每晚编程既带来了修 bug 工作中缺失的创造力,也可能打开第二收入来源。
他从一个 shell-folder sample 开始,逐步加入 ZIP 处理功能,并以$19.95或$29.95销售 Visual ZIP。Microsoft 后来冷电话联系这款产品的作者,却不知道他已经是公司员工;直到他问对方自己应该走到哪栋楼,误会才结束。
如果拒绝 Microsoft 的报价,他要么辞职继续销售,要么留下来放弃收入,因此他接受了报价,并买下一辆二手红色1993 Corvette。在内部,Windows 去掉了当时被视为弹药的加密功能,也很可能去掉了多卷支持,以简化这项无处不在的平台功能。
Plummer 认为 ZIP 的需求源于 BBS 时代的 modem 经济,以及 Phil Katz 的 PKZIP;当时可执行文件可能被压缩到原体积的一半左右。旧实现如今暴露出时代局限:在一台“96-core 7995”上,Windows ZIP 解压仍只使用一个核心,“本来可以大幅改进”。
13. 定制化在用户愉悦与永久复杂度之间交换
Lex 对 Windows 11 的抱怨具有战略性,而非审美性:允许用户自由调整任务栏和 Start menu,会奖励高级用户、建立声誉,并传递出一种公司文化——个别工程师可以在细节上投入大量心力。他的类比是一部电影:微妙的处理可能只被少数观众直接看到,却会增强整部作品的气质。
Plummer 的反驳值得保留:自由不是免费的。支持左侧、顶部、右侧、多行和不同布局,会扩大渲染逻辑、测试范围、bug 面和人员需求;Lex 还提出了潜在的安全漏洞问题。删除这些分支,或许能让重写后的任务栏提前4个月发布。
他们更深层的共识是,持续的 ownership 时间才能带来打磨。Plummer 认为,如果 UI 每次发布都变化,一个组件就不可能真正稳定下来;Lex 则反驳,只要管理层允许副项目的能量释放,一个充满热情的个人仍能像 Task Manager 一样迅速做出美好的东西。
Plummer 又提出 Steve Jobs 的问题:提供4种选择,是否意味着设计师没能找到正确的那一种。Lex 接受 Apple 的模式,但认为 Windows 应成为相反的平台——覆盖广泛硬件、兼容 Linux、对开发者开放——其界面也应表达同样的多元主义。
14. 增长黑客可以把需求变现,也会悄悄消耗信任
在 Software Online,Plummer 购买 banner 广告时没有设置上限,回来后发现已经被收取约1万美元。看到约3.8万美元销售额后,震惊转为兴奋:“我只需要把它放大。”此后几年,他不断重复这套循环。
除了家庭和健康问题,监管麻烦是他人生中最可怕的经历。Washington 总检察长提出约12项指控;Plummer 被10项他认为明显不成立的指控吸引了注意,而真正有后果的两项涉及试用期结束后的每日提醒,以及默认配送实体介质。
和解后,提醒频率据他记忆从每天最多一次降为约每周一次,并要求提供一键卸载。一个勾选框会为邮寄光盘增加$3.95或$4.95,因为2000年代初的买家预期会收到实体介质;但 Plummer 说,在 Washington State 默认收取更高价格,从先验上看违反了 negative-option billing 规定。
Plummer 如今理解,以性、恐惧或贪婪为框架的广告,实际效果可能不同于设计意图,尤其是自闭症让他误以为自己的理解具有普遍性。Windows 也触发了同样的信任问题:当“推荐设置”可能恢复 Edge 时,Lex 看到的是被动使用量增加,但声誉受损;Plummer 的表述更简洁:“你不希望自己的操作系统成为对手。”
15. 平台传说往往掩盖了实际的工程原因
约1996年,Plummer 参与了 Windows Media Center 的原型设计,目标是提供一种远距离观看的界面。团队最初只有包括 Raging Rudolph,以及他认为还有原版 South Park Christmas video 在内的 MPEG 文件,后来因为大楼无法接收有线电视,他们在屋顶安装了一只卫星天线。
当不可能的条件——例如非法写入或 double free——让程序继续运行变得危险时,blue screen 是 kernel 最后一道安全动作。NT 的白底蓝字并不是为了方便在实验室里识别:Jon Viert 让它同时匹配 MIPS firmware 和他的 Visual SlickEdit 环境,使编码、启动、崩溃与重启共享同一种配色。
重启“能掩盖很多罪过”。它会释放泄露的内存,也会重置进入罕见、未经测试状态的应用;当多个程序同时处于这类状态时,就会产生 Lex 所说的“meta goofy state”,让一次干净重启异常有效。
Plummer 欣赏的代码包括 NT kernel 异常高的标准,以及 Bob Day 为 Windows 95 共享 shell 内存设计的 named-pipe 替代方案。在各个版本中,他最喜欢 Windows 2000 Server;两位嘉宾都给 XP 极高评价,理由是寿命、完整性、稳定性,以及 Lex 所说的一致性设计,Plummer 则简单称其为“crisp”。
16. 清晰结构与可比基准揭示语言取舍
Plummer 如今会先写出干净的骨架代码,再逐步填充,颠倒了过去先不断堆代码、之后再清理的习惯。太多项目最终会在结构上变得“无法修复”,因此复杂度控制必须在功能压力把错误形状固化之前开始。
他的核心语言是汇编和 C++。他要么使用不含指针或字符字符串的现代 C++ 20——“在我看来,基本和 Rust 一样安全”——要么使用“带 classes 的 C”,在保留 C 心智模型的同时,使用多态和封装。
一台拥有1TB RAM 的机器支持 GitHub Primes:同一个素数筛算法被用约100种语言表达,容器化后每天夜间进行 benchmark。测试会反复筛到1亿,在5秒循环内使用全部核心,每个整数最多允许1 bit,并要求在计时循环内分配内存。
Plummer 上次查看时,Zig 排名领先,但排名会随 C++ 贡献者改进版本,以及“Zig guys 生气了”之后做出回应而变化。多个 C、GCC、Clang/LLVM、PowerShell 和展示性实现,揭示了语言约束与后端共性的双重作用;如今 Rucker 和 Tudor 管理这个项目,因为贡献规模已经超过 Plummer 最初用 Python、C# 和 C++ 做的比较。
17. Tempest 让 AI 编程可以与人类专家直接比较
Plummer 持有 Tempest 世界纪录,能打到96关。这款1980年的矢量游戏是“被包进一个形状里的3D Space Invaders”,包含360度移动、同时发射8发子弹、约11个敌人和尖刺、旋转式光学 spinner、火焰,以及紧急 super zapper。
为训练 agent,他提取并逆向分析 ROM,映射 zero-page 变量和相关游戏状态,然后编写 Lua 代码,在游戏运行时读取内存。Lua 通过 socket 向 Python 发送参数,Python 中则运行 Dueling Deep-Q 系统学习策略。
Agent 能达到约36关——已经超过大多数人类,但远低于 Plummer。Lua 和 Python 各约几千行代码协同工作,他认为项目已完成95%;剩下的不确定性包括模型规模、层数、超参数,以及调优能否跨过学习门槛。
Cursor 对他有帮助,因为 Plummer 刚开始使用 Python:他手写的版本可能比简洁的生成代码长4倍。他称之为“vibe coding”,但仅限于有经验的程序员能够理解输出、判断对错,并知道下一步该下达什么指令。
18. 自闭症集中注意力,也会遮蔽隐含状态
Plummer 的基础模型是单向兴趣(monotropism):他的大脑会高度集中地做一件事,然后再转向另一件事。他是“连续单任务者”,伴有感官敏感和重复行为;当这些特征无法被调节或适应时,他认为它们会升格为影响约1%至2%人口的障碍。
优势在于:面对自己热爱、有回报且能看到进展的工作,他可以拥有异常强的专注力。ADHD 带来一种悖论:获得专注很难,分心却很容易;但一旦“锁定”,他就很难被拉开。
核心社交困难不是不知道别人有什么感受,而是不知道别人正在想什么。Plummer 会玩一场“小游戏式的代理 NPC 推演”,用自己站在对方位置上会有的感受来推测;电话会移除面部线索,因此讽刺和隐含意义比 FaceTime 更难理解。
他故意设计的粗略测试说明了这种模式:谱系人士可能把创造力置于合作之上,也可能在6个人坐下后仍说房间里有10把椅子。小时候,面对“足够大到能装下一匹马”,他想到的是要不要把一匹马带进厨房,而不是意识到这是一种夸张说法。
19. 明确系统可以替代社交直觉
Plummer 的职业建议是“卖你能做的事,而不是卖你自己”。作品集、GitHub 记录、算法、性能结果或音乐录音,能够提供不依赖面试人格表演的雇佣证据。
管理工作暴露出假设别人拥有相同动机的局限。员工可能想要肯定、金钱、有影响力的会议,或决策权;他学会直接询问,因为他们的“希望、梦想、抱负”无法从自己的激励结构中推导出来。
他的“情绪后处理”会在事后反复回放不确定的互动,追问自己错过了什么、是否需要修复,以及下一次该如何应对。一次汽车修复历时3年,十年后他才意识到自己当时显得兴致缺缺,于是发邮件表达感谢;车行老板回复:“我一直想起那一刻。”
Plummer 反对自闭症会消除共情的说法:他可能察觉不到痛苦,但一旦被告知,就能强烈感受到它。他实际需要的是“请说得非常具体”;masking 意味着有意识地制造姿势、表情、动作和语调,而 meltdown 则发生在过载让大脑切入恐慌与 fight-or-flight 状态时。
他31年的婚姻依靠明确的状态确认——“你还好吗?”——答案和语气共同传递信号。两人差异的一个早期迹象是:他曾思考邻居的砖柱是空心还是填了混凝土,而未来的妻子问他:“你的脑子里为什么会有一个位置在意这种事?”
20. 编程会走向更高抽象层,但判断力仍是稀缺层
Plummer 不相信新手可以直接 vibe-code 出可靠的生产系统。用户必须读懂生成的代码、理解领域、发现失败并指挥下一步;但对进入陌生语言的强程序员来说,AI 可以让他们“变得极其强大”。
他的预测像桥梁建造:工程师过去会操作单根梁,现在架构师则在 AutoCAD 中组装更大的预制结构。程序员同样会移动组件和接口、描述交互,而不再逐行放置代码。
限制仍然很大。今天还不能提出“给我一个兼容 Linux 的 Linux kernel”,然后得到整个系统;Plummer 认为这一天终将到来,但表示距离这种复杂度的整体生成“还相当遥远”。
他亲历了从 TTL logic、手工输入机器码,到 C++、Python 和 AI 的演进,形成了一套新人很难复现的分层视角。他对人生意义的简短回答也由此而来:“做酷东西”——复杂、有用、别人可以使用的东西——然后也许养育几个好孩子,把接力棒传下去。