高飞
25-08-30 16:22 微博认证:至顶科技创始人 AI博主

#模型时代# Lex Fridman专访Dave Plummer:未来的程序员就像建筑师设计桥梁

Lex Fridman最近请来了一位传奇程序员Dave Plummer,确实是传奇,如果你用过Windows电脑,在Windows上按Ctrl+Alt+Delete调出的任务管理器的话……没错,这个管理器就是他写的。

故事很有趣,也照例很长,大致整理一下主要内容,出处:www.youtube.com/watch?v=HsLgZzgpz9Y。

让人意外的是,这位创造了被数十亿人使用的软件的天才,其实是一位自闭症患者。

故事要从1979年说起。11岁的Dave骑着自行车到当地的Radio Shack,看到了一堆标着"电脑"的箱子。那是一台TRS-80 Model 1,4K内存的机器。店员还没来得及组装,这小子就自告奋勇要帮忙。问题是,这台机器的电源、视频和磁带接口都用相同的五针连接器,插错了就会烧毁整台机器。

Dave小心翼翼地读着标签,成功组装了这台电脑。

然后他做了一件让人哭笑不得的事:试图用英语跟电脑对话。"print 2+2"还能工作,但更复杂的英语命令就完全不行了。每周四和周六,他都会骑车去店里蹭电脑用,直到后来家里买了一台Commodore 64。

在Commodore 64上,Dave用纯机器码写了他的第一个程序,一个Galaga的克隆游戏。注意,不是汇编语言,是纯机器码,用十六进制输入6502处理器的操作码。最要命的是,6502代码不能重定位,如果你需要在中间插入代码,就得手动跳转到别处,执行完再跳回来,整个程序就像意大利面条一样纠缠。

几周的心血完成后,Dave想做个备份。结果他把空白软盘复制到了数据软盘上,而不是反过来。第一个程序就这样永远消失了。"那种感觉就是巨大的愧疚感,"Dave回忆道,"因为你知道这是因为你太急躁,做了蠢事。"

高中时期,Dave的出勤率越来越低,最后索性不去了。"没有哪个瞬间你决定辍学,"他说,"你只是去得越来越少,直到觉得再出现会很尴尬,然后就再也不去了。"辍学后,他在7-Eleven上夜班,还在油漆仓库打工。

7-Eleven的工作让他印象最深的是测量油箱。用一根15到20英尺的木棍,上面标着英寸和英尺的刻度,插进汽油箱测量油量。第一次操作时,木棍滑了一下,他重新抓住时,上千根木刺扎进了手掌,外面还是零下40度。"就在那一刻,"Dave说,"我意识到不能这样过一辈子。"

21岁的Dave找到高中校长,请求重返学校。校长说他年纪太大,学校也没位置。Dave回答:"从现在到开学,肯定有人会辍学,到时候就有位置了。"校长被他的决心打动,让他回来完成了最后几门课。

大学期间,Dave写了一个叫HyperCache的软件,为Amiga电脑提供文件系统缓存。这个软件卖得不错,20到40美元一份,卖了几千份,帮他付了学费。更重要的是,他翻遍了所有注册卡,找到了几个微软员工的邮箱,给他们发了冷邮件。其中一个叫Alistair Banks的人回复了,最终Dave得到了在MS-DOS团队的暑期实习机会。

在人类技术史上,很少有哪个时刻像1995年Windows 95发布那样,让全世界的人们排队到深夜,只为购买一个操作系统。而Dave正好赶上了这个历史性时刻。

加入微软后,Dave很快意识到这里聚集了他见过的最聪明的一群人。"当你在普通公司工作时,那个真正懂行的人,他更聪明的朋友可能在微软工作。"他回忆道,"你以为自己是小镇里的大人物,突然发现自己不敢说话,怕显得愚蠢。"

Dave在微软的第一个任务是为SmartDrive添加CD-ROM缓存支持。CD-ROM刚刚问世,读取速度极慢,加上缓存后性能提升了几十倍。但真正的挑战是把代码移到高位内存。在x86架构上,有个叫A20线的东西,如果设置正确,内存指针会在1MB处回绕,否则会继续向上。通过巧妙操作,可以获得额外的64K内存,这在只有640K基础内存的时代至关重要。

然后是那个改变一切的任务管理器。

Dave最初在家里写任务管理器,纯粹是因为自己需要。"我想要一个工具来查看哪些程序在占用CPU和内存,哪些可能锁死了。"最初版本只有87K大小。为了达到这个目标,他甚至没有链接C运行时库,手动调用所有对象构造函数。

任务管理器的一个巧妙设计是使用了类似汉明码的算法。每列每行都有一个标记位表示是否变脏,这样可以精确定位哪些单元格需要重绘,让界面即使在显示32个CPU图表时也能流畅运行。"现在每月有20亿人使用它,"Dave说,"想想我脑子里构思的东西,现在在数十亿台机器上运行,这本身就很酷。"

还有那个Space Cadet 3D弹球游戏。有人走进Dave的办公室问:"接下来三个月你想做什么?"他们想要一个能展示Windows NT图形性能的东西。Dave把原本用汇编写的游戏移植到了C语言,让它能在所有平台上运行。游戏核心是一个巨大的状态机,就像一个有50个入口的switch语句。"我把它当作黑盒处理,"Dave说,"就像在上面跑神经网络一样。"

Windows激活系统也是Dave的作品。在XP发布前的最后关头,原定负责人的进度严重滞后,Dave临危受命。最痛苦的部分是电话激活:用户要通过电话读出一串字母和数字。"想象一下那些接电话的人,"Dave说,"一天八小时听别人念产品密钥,那工作该有多枯燥。"

说到微软的传奇人物,不能不提Dave Cutler,Windows NT内核的架构师。"他就是Windows世界的Linus,"Dave说。Cutler 85岁了还在每天写代码,是个真正的任务大师,不容忍任何人往他的操作系统里提交垃圾代码。

调试在当时是个苦差事。即使用C语言编程,调试也要看汇编代码。"我们一半的时间都在调试,而且要同时处理四种指令集:Intel、MIPS、Alpha和PowerPC。"Dave回忆起一个让他抓狂的bug:任务管理器偶尔会显示CPU使用率超过100%。他在代码里加了无数断言,最后甚至在断言信息里留下了自己的电话号码:"如果看到这个消息,请致电425-836-XXXX。"最终在压力测试中抓到了这个bug,证明是内核的问题,不是任务管理器的错。这个电话号码至今还在NT源代码泄露版本里。

作为一个自闭症患者,Dave的大脑工作方式与常人不同。"我的大脑一次只做一件事,但会非常专注地做。我不是多任务处理者,我是串行单任务处理者。"这种特质让他能够投入难以置信的专注力,但前提是那必须是他热爱的事情。

有个简单的"10秒自闭症测试":问一个人,对社会来说什么更重要,合作还是创造力?神经正常的人通常选择合作,而自闭症谱系的人倾向于选择创造力。还有个测试:房间里有10把椅子,6个人进来坐下,还剩几把椅子?Dave会说10把,因为椅子确实还在那里。"我不是故意找茬,这就是我的思维方式。"

自闭症给社交带来挑战。Dave不知道别人在想什么,只能猜测。"我为认识的每个人运行一个小型NPC游戏。"电话交流尤其困难,因为看不到表情。有一次,实习第一年的夏天,他的经理带他去见比尔·盖茨。经理介绍说Dave在四个月内完成了多项功能,Dave立刻纠正:"其实是三个月。"两人面面相觑,Dave这才意识到这不是纠正别人的好时机。

掩饰(masking)是自闭症患者的日常。"这是表现为“正常”的行为,"Dave解释,"社交中的每件事,从手势到表情到语调,都是巨大的伪装,是工作。"

离开微软后,Dave继续创业。他的软件公司因为"过度提醒用户升级"被华盛顿州总检察长起诉。试用期结束后,软件每天提醒一次购买,被认定为垃圾邮件。"现在我更自我意识了,"Dave反思道,"我以自闭症患者的视角看广告,但其他人可能得出完全不同的结论。我本想激发贪婪本能,让人觉得电脑会更快,但可能反而吓到了他们。"

如今Dave在YouTube频道"Dave's Garage"分享编程故事。他正在训练AI玩Tempest游戏,这是他保持世界纪录的街机游戏。他还在修复PDP-11计算机,最大化配置到4MB内存,在1960年代这是天文数字。

在历史的某个节点上,当数百万行代码在全球数十亿台机器上运行时,很少有人会想到,那个87K的任务管理器诞生于一个自闭症程序员的家中,他只是想要一个工具来查看自己的电脑在干什么。而当我们每天按下Ctrl+Alt+Delete时,我们触动的不仅是一个程序,更是一个关于专注、坚持和用不同方式看世界的故事。

Dave对编程未来的看法很有意思:"我认为未来会像建筑师设计桥梁,以前需要工人焊接钢梁,现在在AutoCAD里拖拽组件。编程也会这样,你不会写单独的代码行,而是移动组件和接口,向AI描述交互方式,让它构建组件。"但他也说,"我很幸运在正确的时代成长,经历了从TTL逻辑到AI编程的全过程。要获得这种完整的图景,唯一的方法就是活过这段时间。"

"生活的意义是什么?"Lex问。

"创造复杂而有用的东西,"Dave回答,"如果让我画画或雕塑,我会很绝望。但编程让我能发挥创造力,做出数十亿人使用的东西。然后,养几个好孩子,把接力棒传下去。"

发布于 美国