戴夫·普拉默:编程、自闭症与老微软往事
Dave Plummer: Programming, Autism, and Old-School Microsoft Stories
前微软工程师回忆开发任务管理器与 Windows 的年代,也谈编程这门手艺与自闭症带来的视角。
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 生成,你负责读懂和判断下一步。前提是你已经会编程。
- 如果某件事让你痴迷到想拆开看里面到底怎么运作,别压着它。这种好奇是能吃饭的本事。
The following is a conversation with Dave Plummer, programmer and an old-school Microsoft software engineer who helped work on Windows 95, NT, and XP, building a lot of incredible tools, some of which have been continuously used by hundreds of millions of people, like the famed Windows Task Manager.
以下是与 Dave Plummer 的对话,Dave Plummer 是一位程序员,也是一位老派的 Microsoft 软件工程师,他帮助开发了 Windows 95、NT 和 XP,构建了许多令人难以置信的工具,其中一些工具已被数亿人持续使用,例如著名的 Windows 任务管理器。
00:00 Yes, the Windows Task Manager, and the zip/unzip compression support in Windows.
是的,Windows 任务管理器以及 Windows 中的 zip/unzip 压缩支持。
He also ported the code for Space Cadet Pinball, also known as 3D Pinball, to Windows.
他还将 Space Cadet Pinball(也称为 3D Pinball)的代码移植到 Windows。
Today, he’s loved by many programmers and engineers for his amazing YouTube channel called Dave’s Garage.
如今,他因其令人惊叹的 YouTube 频道 Dave’s Garage 受到许多程序员和工程师的喜爱。
You should definitely go check it out.
你绝对应该去看看。
00:44 Also, he wrote a book on autism, and about his life story, called Secrets of the Autistic Millionaire, where he gives really interesting insights about how to navigate relationships, career, and day-to-day life with autism.
此外,他还写了一本关于自闭症和他的人生故事的书,名为《自闭症百万富翁的秘密》,书中他给出了关于如何处理自闭症患者的人际关系、职业和日常生活的非常有趣的见解。
All this taken together, this was a super fun conversation about the history and future of programming, computing, technology, and just building cool stuff in the proverbial garage.
所有这些加在一起,这是一次超级有趣的对话,涉及编程、计算、技术的历史和未来,以及在众所周知的车库里建造酷炫的东西。
This is the Lex Fridman Podcast.
这是莱克斯·弗里德曼播客。
To support it, please check out our sponsors in the description, and now, dear friends, here’s Dave Plummer.
为了支持它,请在说明中查看我们的赞助商,现在,亲爱的朋友们,这里是戴夫·普卢默 (Dave Plummer)。
01:22 Tell me about your first computer.
告诉我你的第一台电脑。
Do you remember?
你是否记得?
I do.
我愿意。
01:25 I didn’t own my first computer for a long time, but the first computer I ever used was a TRS-80 Model 1, Level 1, 4K machine, and I rode my bike in fifth or sixth grade, so I was about 11, to the local RadioShack.
我拥有第一台电脑的时间并不长,但我使用的第一台电脑是 TRS-80 Model 1、Level 1、4K 机器,我在五年级或六年级时骑自行车,当时我大约 11 岁,去当地的 RadioShack。
They had the standard component stereo systems, everything else RadioShack had, but they had a stack of boxes that was labeled “computer.” So I was asking the people who worked there about it, and they said they just got it and they hadn’t set it up yet.
他们有标准的组件立体声系统,RadioShack 也有其他一切,但他们有一堆标有“计算机”标签的盒子。所以我问在那里工作的人,他们说他们刚刚得到它,但还没有设置它。
I was rather precocious and I figured, “Well, I’ll set it up for you,” and they said, “Okay.
我相当早熟,我想,“好吧,我会为你安排的,”他们说,“好吧。
Have a shot.”
来一炮吧。”
Did you know what you were doing?
你知道你在做什么吗?
Absolutely not.
绝对不是。
01:54 I mean, it’s no worse than a component stereo.
我的意思是,它并不比组合立体声差。
The only thing is that Tandy, in their infinite wisdom, used the same five-pin DIN connector for power, video, and I think cassette, so they were all identical, and if you plugged them in wrong, you’d blow it up.
唯一的问题是,Tandy 以他们无限的智慧,使用相同的五针 DIN 连接器来连接电源、视频和盒式磁带,所以它们都是相同的,如果你插错了,你就会把它炸毁。
So I read the label and got it working and wound up playing with it and not knowing anything about computers.
所以我读了标签并让它工作了,然后就开始玩它,但我对计算机一无所知。
So I’m typing English commands into it and, you know, PRINT 2+2 works perfectly, yet more simple English that you enter into a basic Level 1 interpreter is not going to get you very far.
所以我在其中输入英语命令,你知道,PRINT 2+2 工作得很好,但你在基本的 1 级解释器中输入更简单的英语并不会让你走得太远。
So you’re trying to talk to it in English?
那么你想用英语与它交谈吗?
Didn’t know any better.
不知道有什么更好的。
02:26 And I still have an old foolscap that I wrote in sixth grade of a program that’s kind of illogically correct but has no chance of working on any interpreter that existed at the time, so it took me a while to figure out what was actually going on with them.
我仍然保留着我在六年级时写的一个程序的旧傻瓜纸,该程序有点不合逻辑,但没有机会在当时存在的任何解释器上工作,所以我花了一段时间才弄清楚它们到底发生了什么。
But I rode my bike down there every Thursday and Saturday, and they were gracious to let me use the machine.
但我每周四和周六都会骑自行车去那里,他们很慷慨地让我使用这台机器。
When was this?
这是什么时候的事?
’79, ’80.
’79、’80。
Okay.
好的。
02:47 What was the state of the art of computing back then?
当时的计算技术发展水平如何?
So what are we talking about?
那么我们在说什么?
Well, the big three had come out.
好在,三巨头已经出来了。
02:50 There was the TRS-80 Model 1, there was the PET 2001, and the Apple II came out roughly simultaneously.
TRS-80 Model 1、PET 2001 和 Apple II 几乎同时问世。
Apple II.
苹果二号。
02:59 Would you say that’s the greatest computer ever built?
你会说这是有史以来最伟大的计算机吗?
Probably in retrospect.
大概是回想起来。
03:02 Well, I would probably give that to the Commodore 64.
好吧,我可能会把它交给 Commodore 64。
Yeah.
是的。
03:06 You and I agree on this, that that was my first computer probably many years after it was released, but yeah, Commodore 64’s incredible.
你和我都同意这一点,那是我的第一台计算机,可能是在它发布很多年后,但是,是的,Commodore 64 令人难以置信。
But yes, Apple II had a huge impact on the history of personal computers.
但是,Apple II 确实对个人电脑的历史产生了巨大的影响。
Right.
正确的。
03:18 It’s hard to gauge the long-term impact, but I think the 64 itself probably influenced more people, so that’s my reason for picking that one.
很难衡量长期影响,但我认为 64 本身可能影响了更多的人,所以这就是我选择 64 的原因。
You think so?
你这么认为吗?
The sales were certainly higher.
销量肯定更高。
So Commodore 64 sold a lot?
那么Commodore 64卖得很多吗?
Yeah.
是的。
03:30 I mean, the numbers are hard to believe.
我的意思是,这些数字令人难以置信。
It depends which numbers you believe, but even the medium estimates were pretty high.
这取决于您相信哪个数字,但即使是中等估计也相当高。
All right, cool.
好吧,酷。
03:36 So you eventually graduated to the Commodore 64.
所以您最终升级到了 Commodore 64。
Tell me about that machine.
告诉我那台机器。
What did you do on the Commodore 64?
你在 Commodore 64 上做了什么?
Well, the first thing I did was overheat the floppy drive on it, which was unfortunate because it wasn’t a warranty machine.
好吧,我做的第一件事就是让它的软盘驱动器过热,这很不幸,因为它不是保修机器。
03:45 My parents didn’t have a lot of money so we bought it from Computer House as opposed to one of the major retailers, which meant when it died, it had to go back to Germany or something to be fixed.
我的父母没有很多钱,所以我们从 Computer House 而不是主要零售商之一购买了它,这意味着当它死了时,它必须返回德国或进行修复。
So I was left with no floppy and so I had a cassette deck, which was the best you could do at the time, and so I was writing small things, and I had a machine language monitor that you could load from cassette.
所以我没有软盘,所以我有一个盒式录音机,这是当时你能做的最好的事情,所以我正在写一些小东西,我有一个机器语言监视器,你可以从盒式磁带加载。
It didn’t have an assembler built in, but it had a disassembler, so you could enter the op codes in 6502 in hex, and if you were careful about planning, you’d be able to write some basic programs.
它没有内置汇编器,但有反汇编器,因此您可以输入十六进制的 6502 操作码,如果您仔细规划,您将能够编写一些基本程序。
04:17 So that’s kind of how I learned, and the first thing I ever wrote on it was a clone of Galaga.
这就是我学习的方式,我在上面写的第一件事就是 Galaga 的克隆。
Now, it’s a bad clone of Galaga, but it has the major enemies that attack over time, and it’s all written in hand-coded machine language, and you can’t relocate 6502, so if you need to add code in the middle, you need to manually sort of jump to somewhere else, do your work, jump back to where you were.
现在,它是Galaga的一个糟糕的克隆,但它有随着时间的推移而攻击的主要敌人,而且它都是用手工编码的机器语言编写的,而且你不能重新定位6502,所以如果你需要在中间添加代码,你需要手动排序跳转到其他地方,做你的工作,跳回你原来的地方。
It’s just hideous spaghetti code.
这只是可怕的意大利面条代码。
But it all worked eventually, and I went to make a backup of it to preserve it for future scholars or whatever the hell I was doing.
但这一切最终都奏效了,我去备份它,以便为未来的学者或我正在做的任何事情保存它。
And I copied my blank floppy onto my data floppy.
我将空白软盘复制到数据软盘上。
So that was my first experience with data management.
这就是我第一次接触数据管理。
Oh, no.
哦,不。
So I don’t have a copy of my first program anymore.
所以我不再有我的第一个程序的副本了。
What was that feeling like?
那是什么感觉?
04:55 Do you remember, of, of just doing something if I may say so, like stupid, you know?
你还记得,如果我可以这么说的话,你只是做了一些事情,就像愚蠢的事情一样,你知道吗?
Which is a part of the programming experience.
这是编程经验的一部分。
Yeah, there was a huge amount of guilt because, right, you destroyed several weeks- …
是的,有很大的负罪感,因为,对,你毁掉了几个星期——……
05:04 of work and you know it was because you rushed- or you did something stupid or you made an unwise choice.
你知道这是因为你匆忙,或者你做了一些愚蠢的事情,或者你做了一个不明智的选择。
What can you tell me about the programming involved in that game?
您能告诉我有关该游戏的编程情况吗?
So it’s literally machine language.
所以它实际上是机器语言。
So machine…
所以机...
05:17 So it’s not-
所以这不是——
Yeah, 65 with-
是的,65岁,有-
…
……
05:19 even assembly.
甚至组装。
Not assembly yet because there was no assembler built in, so I should have written an assembler as my first task, but I wasn’t that clever.
还没有汇编,因为没有内置汇编器,所以我应该写一个汇编器作为我的第一个任务,但我没那么聪明。
How hard is that to do?
这有多难做到?
Trivial, and it’s one of those things that sticks, I think.
微不足道,我认为这是那些坚持下去的事情之一。
05:28 You do it so many times.
你这样做了很多次。
You know, if I give you a C issue, there are certain syntactic issues in C that you’re never going to forget and get wrong.
你知道,如果我给你一个 C 问题,C 中的某些语法问题你永远不会忘记并出错。
And it’s just one of those.
这只是其中之一。
Like, what are the limitations of programming in machine code, as a programmer?
例如,作为程序员,使用机器代码进行编程有哪些限制?
The biggest issue is you have to write completely sequentially because at least in that variant, 6502, you can’t add things later.
最大的问题是你必须完全按顺序编写,因为至少在那个变体 6502 中,你不能稍后添加东西。
05:44 You can only add things on the end.
你只能在最后添加东西。
So it’s like programming a tape in a way.
所以这就像在某种程度上对磁带进行编程一样。
What was the most complicated thing you’ve built with machine language?
您用机器语言构建的最复杂的东西是什么?
That game would be.
那场比赛将会是。
05:57 I mean, in assembly language, I’ve done a fair bit of complicated stuff, but in actual machine language, I think that game would be the only thing I’ve actually-
我的意思是,在汇编语言中,我做了相当多的复杂的事情,但在实际的机器语言中,我认为游戏将是我实际上做过的唯一的事情-
You literally built a game.
你确实构建了一款游戏。
Not a great game, but it worked.
这不是一款很棒的游戏,但它确实有效。
Okay, all right, and then you erased it?
好吧,好吧,然后你把它删掉了?
I did.
我做到了。
All right.
好的。
06:10 When did you first fall in love with programming?
你是什么时候第一次爱上编程的?
When you figured out, like, this is a, this is something special.
当你发现,就像,这是一个,这是一些特别的东西。
…
……
06:18 I think there was two stages for me.
我认为对我来说有两个阶段。
I always knew immediately that I was fascinated with these machines, from the TRS-80 Model I.
我总是立刻就知道我对这些来自 TRS-80 Model I 的机器很着迷。
It’s all I wanted to do was ride my bike back there and have more time with it.
我想做的就是骑自行车回到那里,并有更多时间与它相处。
And I did that, you know, to wear out my welcome as much as I could.
你知道,我这样做是为了尽可能地消除我的欢迎。
And the other revelation came, I think about second or third year of university when I realized, “I love programming, but I have no idea what I’m going to do.
另一个启示出现了,当我想到大学二年级或三年级时,我意识到,“我喜欢编程,但我不知道我要做什么。
Am I going to make the 12 flash on a VCR somewhere?
我要在某个地方的录像机上制作 12 闪光吗?
Or am I going to go work on an operating system?
或者我要去操作系统领域工作吗?
I have abso- absolutely no idea what I’m going to do post-graduation.
我完全不知道毕业后要做什么。
But I love what I do.” And so, I think that was a lot of consolation.
但我热爱我所做的事情。”所以,我认为这是很大的安慰。
It’s like, it doesn’t really matter what I’m doing at this point, ’cause I kind of love doing it, so…
就像,我现在在做什么并不重要,因为我喜欢这样做,所以……
So, you’ll figure it out.
所以,你会明白的。
06:54 As long as you’re following this kind of feeling that’s telling you-
只要你遵循这种告诉你的感觉——
I knew I was in the right area, finally.
我知道我终于来对地方了。
06:58 Yeah.
是的。
Yeah.
是的。
06:59 All right.
好的。
You dropped out of high school.
你从高中退学了。
Yeah.
是的。
07:02 Not the smartest move.
这不是最明智的举动。
Okay.
好的。
07:03 But you ended up going back to school and being very successful at school and, just in general, successful as a programmer, as a developer, as a creator of software.
但你最终回到了学校,在学校取得了非常成功的成绩,总的来说,作为一名程序员、开发人员、软件创建者,你是成功的。
How were you able to find your way?
你是如何找到自己的路的?
Can you tell that journey of dropping out— …and then finding your way back?
你能讲述一下辍学的过程——……然后找到回来的路吗?
There’s no moment when I dropped out.
没有一刻我退学了。
07:21 You just go less and less and less until you realize it’s going to be embarrassing if I show up because I haven’t been there in a long time, and then pretty soon you’re just not going, and that’s how you drop out of high school.
你去的次数越来越少,直到你意识到如果我出现的话会很尴尬,因为我已经很长时间没去那里了,然后很快你就不再去了,这就是你从高中退学的原因。
So, if you find yourself on that path, stop doing that.
因此,如果您发现自己正走在这条路上,请停止这样做。
But that’s precisely what I did.
但这正是我所做的。
And so now I’m not at school and I have to get a job, so I’m working at 7-Eleven and a paint warehouse and stuff like that.
所以现在我不在学校,我必须找份工作,所以我在 7-11 和油漆仓库之类的地方工作。
And 7-Eleven is actually kind of an interesting job because it’s a job I think they keep rotating for people that are smart enough to do the night shift with all the accounting and the administration and stuff they make the night shift do, but that have reasons personally that they need to work at 7-Eleven.
7-11 便利店实际上是一项有趣的工作,因为我认为他们一直在轮换那些足够聪明的人来上夜班,负责所有会计、行政管理以及他们让夜班做的事情,但就个人而言,他们有理由需要在 7-11 便利店工作。
07:56 And I was one of those people because I had no high school diploma.
我就是其中之一,因为我没有高中文凭。
What are some memorable moments from that time at 7-Eleven?
7-11 时代有哪些难忘的时刻?
08:00 Or maybe what do you appreciate about the difficulty of that job?
或者也许您对这份工作的难度有什么看法?
Probably the worst moment for me…
对我来说可能是最糟糕的时刻......
08:09 I mean, I got held up at knife-point and stuff, and that’s all entertaining, but the worst…
我的意思是,我被刀指着等等,这很有趣,但最糟糕的是……
…The most…
……最……
The suckiest part for me was doing the gas dips.
对我来说最糟糕的部分是做气体浸入。
We’ve got a long…
我们有很长的…
It’s a, like a 15 or 20-foot wooden stick and it’s measured in gradients of inches and feet, and you drop it into the gasoline tanks and then you bring it up and you measure where the gasoline sits because there’s no electronic sensor.
它就像一根 15 或 20 英尺长的木棍,以英寸和英尺的梯度进行测量,你将它放入汽油箱中,然后将其提起并测量汽油所在的位置,因为没有电子传感器。
So, I’m doing that, and the first time I do it, I drop the pole and I re-grab it.
所以,我正在这样做,第一次这样做时,我把杆子掉下来,然后重新抓住它。
Well, that’s about a thousand splinters of wood into your hands, and it’s 40 below out and that really sucked.
嗯,大约有 1000 块木头碎片落入你的手中,而出处却是 40 块以下,这真的很糟糕。
Oh, wow.
哦,哇。
And I realized, “I don’t want to do this for a whole life.” I knew that, so…
我意识到,“我不想一辈子都这样。”我知道这一点,所以……
Okay.
好的。
08:44 So you stand there frozen with splinters in your hand.
于是你站在那里,手上拿着碎片,僵硬地站在那里。
And at some point, I have a revelation about my life that next time I’m going to do it differently.
在某个时刻,我对自己的生活有了一个启示,下次我会采取不同的做法。
08:47 And then how ludicrous that is hits me about three seconds later, right?
大约三秒钟后,我才意识到这是多么荒谬,对吧?
And I think that was really the moment for me where I realized that I’ve got to do something different.
我认为那一刻对我来说确实是我意识到我必须做一些不同的事情。
And so even though I was 21, I went and I talked to the principal of my local high school and I was like, “Can you let me back in?” And he’s, “No, you’re too old and we don’t have room,” was his main reason.
因此,尽管我 21 岁,我还是去了当地高中,与校长交谈,我说:“你能让我回去吗?”他的主要原因是,“不,你太老了,我们没有空间”。
And I said, “Well, between now and then, somebody’s going to drop out.
我说:“好吧,从现在到那时,有人会退出。
So, you’ll have room.
所以,你会有空间。
So, let’s assume you have room.
所以,假设你有空间。
Can I come back?” And he was gracious and let me come back.
我可以回来吗?”他很仁慈地让我回来。
And so I did the three or four classes that I needed.
所以我上了我需要的三四门课。
Yeah, just if you can linger on that, the slow dropping out.
是的,只要你能坚持下去,慢慢地退出。
09:24 That’s a weird thing that you can do with your brain.
这是你可以用你的大脑做的一件奇怪的事情。
You realize to yourself that you don’t have to do the thing that everybody else is doing, and that’s a dangerous realization because, like, you kind of have to be part of society to do certain things.
你自己意识到你不必做其他人正在做的事情,这是一个危险的认识,因为,就像,你必须成为社会的一部分才能做某些事情。
Right.
正确的。
And if you realize you don’t have to do what everybody else is doing, you can either have an incredible life or a really difficult life.
如果你意识到你不必做其他人正在做的事情,你要么过着令人难以置信的生活,要么过着非常困难的生活。
Well, the problem with that process is you’re making a much smaller decision.
嗯,这个过程的问题是你正在做出一个小得多的决定。
09:54 “I’m just not gonna go to class today.” And that’s all you’re deciding, but you do that enough times, you’re making a much bigger decision.
“我今天就不去上课了。”这就是你要做的决定,但你做的次数足够多,你就会做出一个更大的决定。
And that’s the problem.
这就是问题所在。
So it’s better to make…
所以最好做...
10:04 If you want to live life in a non-standard way, it’s better to make the big decision explicitly and then you can stop going.
如果你想以一种非标准的方式生活,最好明确地做出重大决定,然后你就可以停止前进。
Don’t allow yourself to make the slip-ups, though.
不过,不要允许自己犯错误。
It’ll be made for you eventually.
最终将为您制作。
Okay.
好的。
10:17 Well, you got back, and you eventually went to college and were very successful as a student, and you weren’t that good of a student before.
好吧,你回来了,你最终上了大学,并且作为一名非常成功的学生,而你以前并不是那么优秀的学生。
No, I was a terrible student in high school, and even my first semester of college, I still wasn’t taking it quite seriously because I got mercy passed in Geometry 90, which is like the makeup class for the Geometry 12th-grade class that I didn’t have.
不,我在高中时是一个很糟糕的学生,甚至在大学的第一个学期,我仍然没有很认真地对待它,因为我在几何90中得到了怜悯,这就像我没有参加的12年级几何课的化妆课一样。
10:24 And that scared me because I realized by 1% or the grace of the professor that let me through, I just about ended my entire university career here.
这让我很害怕,因为我意识到,有 1% 的概率,或者说是教授让我通过的恩典,我几乎就在这里结束了我的整个大学生涯。
So, fortunately, those marks don’t count on your transcript because they’re remedial classes.
所以,幸运的是,这些分数不会计入你的成绩单,因为它们是补习班。
So, I got kind of a fresh start the next semester and did it for real, and I did it for me, and that made all the difference.
所以,下学期我有了一个新的开始,并且真正地做到了,我为自己做到了这一点,这让一切变得不同。
What can you speak to maybe by way of advice on how to be successful as a student?
对于如何成为一名成功的学生,您有什么建议?
Well, ideally, there’s some aspect of school that you do enjoy, whether it’s art, whether it’s computer science, whether it’s shop class, whatever.
嗯,理想情况下,学校的某些方面是你确实喜欢的,无论是艺术,无论是计算机科学,无论是车间课程,等等。
11:00 So, go for those classes and just put up with and do the hard stuff because it’s way easier than having to do it later, and that’s easy to say when you’re 50-something.
所以,去参加那些课程,忍受并做那些困难的事情,因为这比以后再做要容易得多,当你 50 多岁的时候,这很容易说。
It’s harder to say when you’re 15-something, but— …
当你 15 岁左右的时候就很难说了,但是——……
it makes a lot of sense.
这很有意义。
All right.
好的。
11:20 What’s the story of you joining Microsoft?
您加入微软有哪些故事?
How did we get there from 7-Eleven to Microsoft?
我们是如何从 7-11 发展到微软的?
Yeah, it’s a big jump.
是的,这是一个很大的跳跃。
11:27 So, I had gone back to school, and I think it was in my third year of university.
所以,我回到了学校,我想那是在我大学三年级的时候。
I was working for the phone company for the summer as a summer job, and I’m doing conversions of their UBNet to TCP/IP and modern networking, which really amounts to swapping cards but then figuring out why their config.sys doesn’t allow Lotus to run anymore because it’s got 10K less than it used to, and it’s just a horrible time to be working in computers, but I was doing it.
我暑假在电话公司工作,作为暑期工作,我正在将他们的 UBNet 转换为 TCP/IP 和现代网络,这实际上相当于交换卡,但后来弄清楚为什么他们的 config.sys 不再允许 Lotus 运行,因为它比以前少了 10K,而且现在在计算机上工作是一个可怕的时期,但我正在这样做。
And at lunch, I’m sitting in the food court with the old and the bored, and I’m reading a book that I had bought called “Microsoft or Bill Gates and the Making of Microsoft Hard Drive,” I think is the title.
午餐时,我和老人、无聊的人坐在美食广场,读一本我买的书,书名是《微软或比尔·盖茨和微软硬盘的制作》,我想这就是书名。
And it’s a great book.
这是一本很棒的书。
12:02 It’s just sort of a matter-of-fact history of how Microsoft came to be, what it’s like, how it operates, what the people are like there.
这只是一部实事求是的历史,讲述了微软是如何诞生的、它是什么样的、它是如何运作的、以及那里的人们是什么样的。
And I’m reading this book, and I become really entranced by it and fascinated because it sounds like exactly the place that I want to be, but I’m in Saskatchewan, so what am I going to do about it?
我正在读这本书,我真的被它迷住了,因为它听起来正是我想去的地方,但我在萨斯喀彻温省,那么我该怎么办呢?
And what I wound up doing was, I had put myself through school with a program called HyperCache, which is a file system cache for the Amiga because the Amiga didn’t have any out of the box, and it had done reasonably well.
我最终做的是,我用一个名为 HyperCache 的程序让自己完成了学业,它是 Amiga 的文件系统缓存,因为 Amiga 没有任何开箱即用的东西,而且它做得相当不错。
12:29 So, I went through my registration cards, because in those days you had a four-by-six card that people had to fill out with their name and their address and, if they had an email, their email, and they’d send it in, they’d get notifications of updates and so on.
所以,我检查了我的注册卡,因为在那些日子里,你有一张四乘六的卡,人们必须填写他们的姓名和地址,如果他们有电子邮件,他们的电子邮件,他们会发送它,他们会收到更新通知等等。
Well, it’s shareware.
嗯,它是共享软件。
And I went through the whole stack looking for anybody with a Microsoft email address, and I found maybe three or four people, and I just cold-emailed them and said, “Hey, I’m an operating system student in Saskatchewan looking for an opportunity.” I don’t remember exactly what I said.
我在整个堆栈中寻找任何拥有微软电子邮件地址的人,我发现了大约三四个人,我只是给他们发了一封冷邮件,说:“嘿,我是萨斯喀彻温省的一名操作系统学生,正在寻找机会。”我不太记得我说了什么了。
12:54 But one guy, Alasdair Banks, he wrote back and he said, “I know somebody that I can put you in contact with.” And he put me in contact, I think, with a guy named Ben Slifka, who did a phone interview, who eventually wanted to hire me to work on MS-DOS for the summer.
但他回信说,阿拉斯代尔·班克斯(Alasdair Banks)说:“我认识一个人,我可以帮你联系上。”我想他让我联系了一个名叫 Ben Slifka 的人,他进行了电话面试,最终想雇用我在夏天从事 MS-DOS 工作。
So, that’s how I got there.
所以,我就是这样到达那里的。
You put yourself through school by…
你通过……完成了学业
13:10 Tell me about HyperCache.
告诉我有关 HyperCache 的信息。
You built a piece of software-
你构建了一个软件-
It’s the weight loss program for hard drives.
这是硬盘的减肥计划。
That was sufficiently useful to a large number of people that would somehow give you money?
这对很多人来说足够有用,他们会以某种方式给你钱?
Yeah, it made decent money.
是啊,赚了不少钱。
13:24 I mean, I sold a couple thousand copies.
我的意思是,我卖出了几千本。
At 20 bucks a copy or 40 bucks a copy, depending on the rules.
根据规则,每份 20 美元或 40 美元。
What program, what language was it written in?
什么程序,用什么语言编写的?
C.
C.
13:31 So there were some assemblers.
所以就有了一些汇编程序。
The actual really tight code to do the real work of transferring data to and from the cache was 68,000 assembly.
真正完成将数据传入和传出缓存的实际工作的真正严格的代码是 68,000 个程序集。
Everything else was C.
其他一切都是C。
Okay.
好的。
13:40 This is like file system I/O?
这就像文件系统 I/O?
Device block I/O.
设备块 I/O。
13:43 So any block that gets serviced from the drive would go through my cache first, and it was an N-way associative cache, and so it would try to match the geometry of the drive and do pre-fetch based on you’re trying to read a whole track at one time, that kind of thing.
因此,从驱动器获得服务的任何块都会首先通过我的缓存,这是一个 N 路关联缓存,因此它会尝试匹配驱动器的几何形状,并根据您尝试一次读取整个磁道进行预取,诸如此类的事情。
What was it like trying to get your software out there at that time?
当时尝试推出您的软件是什么感觉?
13:57 How were you able to find customers?
您是如何找到客户的?
Yeah, it’s interesting.
是的,这很有趣。
14:05 I think I started on Usenet and some of the Amiga forums, posted, “Here’s my trial version, try it out for 30 days, see what you like.” And eventually it got picked up by a few retailers, and I remember I was with my…
我想我是从 Usenet 和一些 Amiga 论坛开始的,发布了“这是我的试用版,试用 30 天,看看你喜欢什么。”最终它被一些零售商收购了,我记得我和我的……
Now wife in her car, and she had a cell phone, because her dad was very concerned about her safety.
现在妻子在车里,她有手机,因为她爸爸非常担心她的安全。
And so this is late ’80s, and she’s got, you know, the antenna on the roof and the big box in the trunk, the whole deal.
现在是 80 年代末,她有,你知道,屋顶上的天线和后备箱里的大盒子,整个交易。
But we got a call from one of the software retailers that wanted to buy 50 copies at…
但我们接到一家软件零售商的电话,想要购买 50 份……
20 Bucks, which to me is a thousand bucks, which in 1989 or whatever year it is was a big deal.
20 块钱,对我来说就是 1000 块钱,这在 1989 年或者无论是哪一年都是一笔大钱。
And so eventually a number of companies just bought inventory.
因此最终许多公司只是购买库存。
Let’s go to that time.
让我们回到那个时候吧。
14:41 It’s such an interesting time with Bill Gates and Microsoft.
与比尔·盖茨和微软一起度过了一段非常有趣的时光。
Why do you think Microsoft was dominating the software and the personal computing space at that time and, and really for many, many, many years after?
您认为为什么微软当时在软件和个人计算领域占据主导地位,并且在之后的许多年里确实如此?
At the time, it was the single most potent assemblage of smart people that I’ve ever been a part of.
当时,这是我加入过的最有影响力的聪明人团体。
14:52 And I’ve been in academia and I’ve been in industry to a certain extent, and you know, when you’re working at a regular computer company, the one guy who actually knows what he’s doing, his smarter friend?
我曾在学术界工作过,在某种程度上也曾在工业界工作过,你知道,当你在一家普通的计算机公司工作时,那个真正知道自己在做什么的人,他更聪明的朋友?
He probably works at Microsoft.
他可能在微软工作。
So when you get there, you’re the big cheese from your small town, you think you know a lot, and all of a sudden, you’re just in an environment where, like, “Uh-oh, I’m just not going to speak because I don’t want to look stupid.”
所以当你到达那里时,你就是来自小镇的大人物,你认为你知道很多,突然之间,你就处于这样一种环境中,“呃哦,我只是不说话,因为我不想看起来很愚蠢。”
Okay.
好的。
15:20 What about Bill Gates himself?
那么比尔盖茨本人呢?
What are some qualities of Bill Gates that you think contribute to the success of Microsoft?
您认为比尔·盖茨的哪些品质对微软的成功做出了贡献?
I think he was relentless in the pursuit of his one dream, which was his old slogan of a computer in every home and a computer on every desk.
我认为他坚持不懈地追求他的一个梦想,这就是他的老口号:每个家庭都有一台电脑,每张桌子上都有一台电脑。
15:28 It was his special interest, and he was a smart guy, super determined, and he hired people that were as smart or smarter than him to help him execute it.
这是他的特殊兴趣,他是一个聪明的人,意志坚定,他聘请了和他一样聪明或更聪明的人来帮助他执行它。
And he built an almost unstoppable machine of intellect to go forth and make, let’s say, very simple products.
他建造了一台几乎不可阻挡的智力机器,可以继续制造非常简单的产品。
MS-DOS is not a complicated product by any stretch, but it’s exactly what the market needed at that time.
无论如何,MS-DOS 都不是一个复杂的产品,但它正是当时市场所需要的。
MS-DOS changed the game.
MS-DOS 改变了游戏规则。
15:56 And that’s actually the team you joined, the MS-DOS team, and I think you joined before Windows 95.
这实际上就是您加入的团队,MS-DOS 团队,我认为您在 Windows 95 之前就加入了。
Was released.
被释放了。
So tell me about the story of MS-DOS.
请告诉我 MS-DOS 的故事。
Its success is probably pivotal to the success of Microsoft.
它的成功可能对微软的成功至关重要。
Before DOS, they were largely a language company, so they had made BASIC for a lot of computers, and they had a Fortran compiler and a Pascal compiler, that kind of thing.
在 DOS 之前,他们主要是一家语言公司,所以他们为很多计算机制作了 BASIC,他们有一个 Fortran 编译器和一个 Pascal 编译器,诸如此类的东西。
16:18 But their deal to have MS-DOS included with every version or every instance of the PC effectively set them as a standard that they were able to leverage for decades going forward.
但他们将 MS-DOS 包含在 PC 的每个版本或每个实例中的协议有效地将 MS-DOS 设定为他们能够在未来几十年内利用的标准。
To a certain extent, they lucked into that, and on the other hand, they were smart to have done it.
从某种程度上来说,他们很幸运,但另一方面,他们也很聪明地做到了这一点。
They didn’t charge IBM a lot of money for it, but making it a standard really played out to their advantage over time.
他们并没有为此向 IBM 收取太多费用,但随着时间的推移,使其成为一个标准确实对他们产生了优势。
So at that time, MS-DOS, no graphical interface.
所以当时MS-DOS还没有图形界面。
16:51 Can you just speak to what the heck MS-DOS is?
您能简单谈谈 MS-DOS 到底是什么吗?
It’s largely a command launcher.
它主要是一个命令启动器。
16:57 So you type in a name of a command, it looks it up to see if that’s in the current directory or on a special path of folders, and it loads it into memory and executes it if it’s there.
因此,您输入命令的名称,它会查找它是否在当前目录中或文件夹的特殊路径上,然后将其加载到内存中并执行(如果存在)。
And that’s 90% of what MS-DOS does.
这就是 MS-DOS 90% 的功能。
Now, it has environment variables and some complexity and a small scripting language built in, but it is basically just an operating system shell that allows you to use the resources of the computer, like the hard drive or the CPU, and it doesn’t allow you to multitask.
现在,它具有环境变量和一定的复杂性以及内置的小型脚本语言,但它基本上只是一个操作系统外壳,允许您使用计算机的资源,例如硬盘驱动器或CPU,并且它不允许您执行多任务。
There’s no graphical interface.
没有图形界面。
Now, Microsoft did a- add a text-based graphical interface for things like an editor and QuickBASIC in DOS 5.0, I believe, and there was a DOS shell, which was sort of a graphical file manager in MS-DOS 4.0.
现在,微软为 DOS 5.0 中的编辑器和 QuickBASIC 之类的东西添加了基于文本的图形界面,我相信,并且有一个 DOS shell,它有点像 MS-DOS 4.0 中的图形文件管理器。
17:38 So they experimented with it, but it’s largely a command prompt.
所以他们尝试了它,但它主要是一个命令提示符。
Does it have the ability to communicate with external devices, so drivers and all that kind of stuff?
它是否有能力与外部设备(例如驱动程序和所有类似的东西)进行通信?
17:42 How expansive of an operating system was MS-DOS?
MS-DOS 操作系统的扩展性如何?
Well, it was limited by the original x86 instruction set, which limited it to 640K.
嗯,它受到原始 x86 指令集的限制,将其限制为 640K。
17:52 And then there were various Band-Aids on top of that to do high mem and then extended memory beyond that, and a lot of hoops have to be jumped through to make anything work without consuming base RAM.
除此之外,还有各种创可贴来实现高内存,然后扩展内存,并且必须跳过很多环节才能在不消耗基本 RAM 的情况下使任何东西都能工作。
Yeah, I mean, you programmed on MS-DOS.
是的,我的意思是,你在 MS-DOS 上编程。
18:10 What’s it like?
是什么样的?
What are some interesting details there?
其中有哪些有趣的细节?
Like you said, there’s the memory constraints of 640 kilobytes.
正如您所说,内存限制为 640 KB。
Yeah, 640K is the maximum that’s ever gonna be available, so it’s not what’s available to you as an operating system developer, because whatever you use is what the user won’t get.
是的,640K 是可用的最大值,因此作为操作系统开发人员,这不是您可以使用的,因为无论您使用什么,用户都无法获得。
18:20 So if you use 10K needlessly, you’re gonna…
所以如果你不必要地使用 10K,你会......
Every machine in the world now has 10K less, so it’s kind of a big responsibility.
现在世界上每台机器的容量都减少了 10K,因此责任重大。
Is that a true quote from Bill Gates, where he said,
这是比尔·盖茨的原话吗?他说:
Nobody will ever need more than 640K?
没有人会需要超过 640K 的内存?
18:38 Yeah, no, it’s not him.
是的,不,不是他。
It’s been attributed to him, but not real.
这被认为是他的,但不是真实的。
What are some interesting aspects of what you were able to do as an intern and when you joined on MS-DOS and beyond?
当您作为实习生以及加入 MS-DOS 及更高版本时,您能够做哪些有趣的事情?
One of the first things I did was to take SmartDrive, the disk cache, ’cause I had familiarity with disk caches- and to add CD-ROM caching to it, because that was new.
我做的第一件事就是采用 SmartDrive(磁盘缓存),因为我对磁盘缓存很熟悉,并向其中添加 CD-ROM 缓存,因为那是新的。
18:52 CD-ROMs were just coming out.
CD-ROM 刚刚问世。
Microsoft Bookshelf is one of the few products you could run for it.
Microsoft Bookshelf 是少数可以运行它的产品之一。
And as you can imagine, caching a CD speeds it up by dozens of times if you’re smart about it.
正如您可以想象的那样,如果您足够聪明,缓存 CD 可以将其速度提高数十倍。
So it was a big performance win and a nice thing to work on.
所以这是一个巨大的性能胜利,也是一件值得努力的事情。
A bigger part of that was moving a bunch of SmartDrive and eventually the double-space compression engine up into what’s known as high memory.
其中更重要的部分是将一堆 SmartDrive 以及最终的双空间压缩引擎移动到所谓的高内存中。
19:19 And without rat holing on the technical aspect of it, on the x86, there’s something I believe called the A20 line.
没有技术方面的困扰,在 x86 上,我相信有一个叫做 A20 系列的东西。
And I probably have this backwards, or I got a 50-50 shot at it, but if you’ve got the A20 line asserted, then your memory pointers wrap at the one megabyte mark.
我可能有这个倒退,或者我有一个 50-50 的镜头,但如果你断言了 A20 线,那么你的内存指针会在一兆字节标记处换行。
19:34 And if not, they don’t.
如果没有,他们也不会。
So you continue going up in memory.
所以你继续在记忆中上升。
So you can rewrite memory above by combining your segment and offset registers to a number bigger than one megabyte, and you get an extra 64K.
因此,您可以通过将段和偏移寄存器组合为大于 1 MB 的数字来重写上面的内存,并且您将获得额外的 64K。
And you put your code in there, and then you just put stubs to jump to it from low memory.
你把你的代码放在那里,然后你只需放置存根即可从低内存跳转到它。
And so you can get another 64K out of the machine that way, and we did that for a couple of the products.
因此,您可以通过这种方式从机器中获得另一个 64K,我们对一些产品也这样做了。
And that’s …
那就是……
I had no idea what HIMEM was, ’cause I was an Amiga programmer and I’d never written any x86 code before I got there, so …
我不知道 HIMEM 是什么,因为我是一名 Amiga 程序员,在我到达那里之前我从未编写过任何 x86 代码,所以……
So that was, like, a cool optimization you got to be a part of.
所以这就像一个你必须参与的很酷的优化。
20:02 So what about Windows?
那么 Windows 呢?
There was a parallel development of Windows 95, right, at that time.
当时Windows 95也在并行开发。
Did you get a chance to interact with those folks?
您有机会与这些人互动吗?
I actually worked on Windows 95 for about three or four months.
我实际上在 Windows 95 上工作了大约三四个月。
20:12 I was on the COM/OLE team doing the presentation cache, which is when you insert a, say, a Word or an Excel spreadsheet or chart into a Word document.
我在 COM/OLE 团队中负责演示文稿缓存,即当您将 Word 或 Excel 电子表格或图表插入到 Word 文档中时。
You don’t want Excel to have to be loaded to render it every time, so there’s a presentation cache of enhanced metafiles and I was working on that.
您不希望每次都必须加载 Excel 来渲染它,因此有一个增强型图元文件的演示缓存,我正在研究它。
So that shipped in Windows 95, but I moved to the Shell team about six months after getting to Microsoft, and so I worked on NT from there forward.
因此,它在 Windows 95 中发布,但我在加入 Microsoft 大约六个月后转到了 Shell 团队,因此我从那里开始从事 NT 工作。
Okay, and what’s 95?
好的,95 是多少?
20:38 What’s NT?
什么是NT?
Windows 95 is an evolution of the original 16-bit Windows 3.1, which was the very first popular version of Windows.
Windows 95 是原始 16 位 Windows 3.1 的演变,它是 Windows 的第一个流行版本。
20:40 And it adds 32-bit support, then VxD drivers and a bunch of new technology and an entirely new user interface.
它还添加了 32 位支持、VxD 驱动程序和一系列新技术以及全新的用户界面。
And it’s something that at the time was revolutionary.
这在当时是革命性的。
The people lined up at night to wait in line to buy the thing.
人们在晚上排队等候购买东西。
Can you just take us back to that time and describe why 95 was such a big leap from 3.1?
您能否带我们回到那个时代并描述一下为什么 95 比 3.1 有如此大的飞跃?
21:00 So Apple already had a graphical interface.
所以苹果已经有了图形界面。
Windows 3.1 had a graphical interface.
Windows 3.1 有图形界面。
Why was Windows 95 such a gigantic leap?
为什么 Windows 95 实现了如此巨大的飞跃?
I don’t want to make it as basic as the Start menu, but I think…
我不想让它像开始菜单一样基本,但我认为......
21:17 …It’s a big part of it.
……这是其中很大一部分。
I know when I first saw it…
我知道当我第一次看到它时...
…I couldn’t quantify what about it was different and awesome, but I realized that I wanted to be a part of it, and that’s why I started writing a Shell extension, which became Zip folders at some point.
…我无法量化它有什么不同和很棒的地方,但我意识到我想成为其中的一部分,这就是为什么我开始编写 Shell 扩展,它在某个时候变成了 Zip 文件夹。
But I was just fascinated by the new Shell, and that’s why I wound up working on the team that brought that Shell over to the NT and what’s Windows today.
但我只是对新的 Shell 着迷,这就是为什么我最终加入了将 Shell 引入 NT 以及今天的 Windows 的团队。
Would you say that’s the greatest operating system ever?
你会说这是有史以来最伟大的操作系统吗?
21:39 What’s the most impactful operating system ever?
有史以来最有影响力的操作系统是什么?
Windows 95 would be number two for me.
Windows 95 对我来说是第二位。
21:46 I think OS/360 is going to be number one.
我认为 OS/360 将成为第一。
Okay, interesting.
好吧,有趣。
Because you could take a machine and write a COBOL program for it in 1962, jump in your time machine, go to Poughkeepsie and boot up an IBM z17 mainframe and run it today.
因为您可以在 1962 年使用一台机器并为其编写 COBOL 程序,所以今天就跳入您的时间机器,前往波基普西并启动 IBM z17 大型机并运行它。
21:51 And they’ve been doing it for however many years that is.
不管他们已经这样做了多少年。
And it’s all on the business side, so we as consumers don’t have much access to it, but I think it was probably as influential in the commercial side as Windows 95 was in the home side.
而且这一切都是在商业方面,所以我们作为消费者没有太多机会接触到它,但我认为它在商业方面的影响力可能就像 Windows 95 在家庭方面的影响力一样。
And then probably Linux would be number three for me.
然后 Linux 对我来说可能会排在第三位。
I put Linux as bigger than Unix, which doesn’t work because you can’t have one without the other, but the impact of Unix, BSD, and so forth, is largely in the academic space.
我认为 Linux 比 Unix 更大,这是行不通的,因为缺一不可,但 Unix、BSD 等的影响主要集中在学术领域。
It’s by programmers for programmers.
它是由程序员为程序员设计的。
So, yeah, Linux created…
所以,是的,Linux 创建了……
22:29 I mean, it was the embodiment of the open source spirit at its largest scale.
我的意思是,它是开源精神最大规模的体现。
Right?
正确的?
So it almost created a community and it created a spirit of programming that propagates to this day.
所以它几乎创建了一个社区,并创造了一种传播至今的编程精神。
That’s true.
这是真的。
That’s true.
这是真的。
Like scale matters.
就像规模很重要一样。
Yeah, and its penetration on the server side of things now is, I don’t know if it’s equivalent to what System/360 achieved, but it’s almost ubiquitous, so…
是的,它现在在服务器端的渗透是,我不知道它是否相当于 System/360 所取得的成就,但它几乎无处不在,所以......
Yeah, the world…
是啊,这个世界……
22:59 I mean, this is the quiet secret of the universe, is it runs on Linux.
我的意思是,这是宇宙的秘密,它是否在 Linux 上运行。
Okay, so tell me about your work days.
好吧,告诉我你的工作日吧。
What were they like back then?
那时的他们是什么样子?
Back in the MS-DOS and Windows 95 days?
回到 MS-DOS 和 Windows 95 时代?
Take me through a productive day.
带我度过富有成效的一天。
Well, your day starts coming in and you’ve got to download the address book, which is…
好吧,你的一天开始了,你必须下载地址簿,这是......
23:17 Microsoft has between 10 and 15,000 employees at this point, and we’re all on MS Mail.
目前,Microsoft 拥有 10 至 15,000 名员工,而且我们都使用 MS Mail。
We’re just getting off of the PDP-11 called Miss Piggy, which ran Whizmail, and we’re running MS Mail.
我们刚刚从名为 Miss Piggy 的 PDP-11 上下来,它运行 Whizmail,而我们正在运行 MS Mail。
But MS Mail has a fixed address book that every user must download every morning, and when there are 10,000 people downloading 10,000 people, it gets pretty messy.
但MS Mail有一个固定的地址簿,每个用户每天早上都必须下载,当有10,000人下载10,000人时,它就变得相当混乱。
And I think we were on 10 megabit networking at the time, so your first hour is downloading the address book, which was always frustrating.
我想我们当时使用的是 10 兆比特的网络,所以你的第一个小时就是下载地址簿,这总是令人沮丧。
But you’d use that time to look at the crashes that would have happened overnight from a process we called Stress, which is NNT…
但是你会利用这段时间来查看我们称为“压力”(NNT)的过程中一夜之间发生的崩溃......
23:53 All the machines that are unused run tests all night long and they try to crash themselves, and if they manage to crash themselves, it will drop into a debugger with a serial cable to another machine and you can connect to that other machine and remotely debug the crashed machine.
所有未使用的机器整晚都在运行测试,它们试图让自己崩溃,如果它们设法让自己崩溃,它将通过串行电缆连接到另一台机器进入调试器,您可以连接到另一台机器并远程调试崩溃的机器。
So you come in and they will have triaged bugs, you know, there was a crash in the Start menu, so we’ll assign that to Dave, and so you come in and that’s your first thing, is to connect, because you’ve got to get that machine back to the guy that owns it and unlock the machine, so that’s your first hour of your day, is basically triage for bugs that have come up from Stress overnight and then at that point it’s probably back to coding, which unfortunately 80% of the time is fixing bugs, especially in my career it
所以你进来,他们会分类错误,你知道,开始菜单中出现了崩溃,所以我们将其分配给戴夫,所以你进来,这是你的第一件事,就是连接,因为你必须把那台机器归还给拥有它的人并解锁机器,所以这是你一天中的第一个小时,基本上是对一夜之间因压力而出现的错误进行分类,然后在这一点上可能会回到编码,不幸的是80%的时间都在修复bug,尤其是在我的职业生涯中
24:31 was porting code and fixing bugs.
正在移植代码并修复错误。
I wasn’t writing a lot of new code and there were exceptions.
我没有编写很多新代码,也有例外。
I wrote a lot of new code on the side to get it out of my system…
我在旁边编写了很多新代码以将其从我的系统中取出......
…From a day-to-day grind of always fixing bugs in other people’s code, which is amazing learning experience.
...每天不断地修复别人代码中的错误,这是令人惊叹的学习经历。
So you did a lot of the…
所以你做了很多……
24:46 At Microsoft, you did a lot of the porting of what is it, Windows 95 code to NT?
在微软,你们做了很多移植工作,什么是 Windows 95 代码到 NT?
Yeah.
是的。
24:53 We took the entire Windows 95 user interface, and we ported it to NT, which meant making it Unicode, for one thing.
一方面,我们采用了整个 Windows 95 用户界面,并将其移植到 NT,这意味着将其设为 Unicode。
So everything that was eight bits is now 16 bits.
所以以前的 8 位现在都是 16 位。
Okay.
好的。
…pointers.
……指点。
25:02 It’s quite a mess when you switch the code over, as you can imagine.
你可以想象,当你切换代码时,情况会很混乱。
Can you give us insights into what is involved in porting?
您能给我们介绍一下移植涉及哪些内容吗?
It’s like breaking into somebody’s house and going through all their stuff and seeing the stuff in their drawers that they didn’t want you to see.
这就像闯入某人的房子并翻阅他们所有的东西并看到抽屉里他们不想让你看到的东西。
25:12 You find all the good stuff, the pretty pictures hanging on the wall, and you find some disturbing stuff in the nightstand.
你会发现所有好东西,墙上挂着漂亮的图画,你会在床头柜上发现一些令人不安的东西。
I saw code that was like 200 characters wide with, you know, profanity and swears in it.
我看到了大约 200 个字符宽的代码,其中包含脏话和脏话。
It eventually got all cleaned up over the years by the time I left.
当我离开时,这些年来它最终被清理干净了。
But it was not always the most professional code in the world.
但它并不总是世界上最专业的代码。
Right, because every single piece of code you have to go through.
是的,因为你必须检查每一段代码。
Line by line, so you see it all.
一行一行,让您看到一切。
Yeah.
是的。
25:41 I mean, that’s the story of programmers.
我的意思是,这就是程序员的故事。
You write a piece of code, and you think it’ll never be seen by anybody.
你写了一段代码,你认为它永远不会被任何人看到。
And sometimes, oftentimes, that code is going to be seen by a very large number of people, …that come after you, including you five years later.
有时,很多时候,这些代码会被很多人看到,……在你之后,包括五年后的你。
You yourself looking at your own code.
你自己看你自己的代码。
Okay, so tell me about Windows NT.
好的,请告诉我有关 Windows NT 的信息。
That was a giant leap too.
这也是一个巨大的飞跃。
It was.
是的。
26:06 It was basically a clean-sheet design.
这基本上是一个干净的设计。
So they went and they got Dave Cutler from Digital Equipment, who had done operating systems for them, VMS and RSX-11, he had done.
所以他们从 Digital Equipment 公司请来了 Dave Cutler,他为他们做了操作系统,VMS 和 RSX-11,都是他做的。
And so he came over after, I believe it was Prism and MICA were some projects at DEC West that got canceled.
所以他过来之后,我相信是 Prism 和 MICA 是 DEC West 的一些项目被取消了。
And so you had a whole team of guys where their project is canceled, and basically, they took a whole bunch of them and came to Microsoft.
所以你有一整个团队的人他们的项目被取消了,基本上,他们带着一大群人来到了微软。
And I don’t know the specifics of the deal, but they all showed up.
我不知道交易的具体细节,但他们都出现了。
So you had Dave Cutler and Mark Lucovsky and all these really smart guys from DEC, and they did basically a clean sheet, but they also had OS/2 as a starting point.
因此,Dave Cutler 和 Mark Lucovsky 以及来自 DEC 的所有这些非常聪明的人,他们基本上没有失球,但他们也以 OS/2 作为起点。
But OS/2 was, of course, written in assembly language, and NT is going to be written in C.
但 OS/2 当然是用汇编语言编写的,而 NT 将用 C 语言编写。
26:46 So to what extent they were able to leverage any of that, I don’t actually know, but at least they had a system to start with.
所以他们能够在多大程度上利用这些,我实际上不知道,但至少他们有一个系统可以开始。
You said that Dave Cutler’s the man, the mind behind Windows.
您说过 Dave Cutler 是 Windows 背后的核心人物。
26:53 Can you explain?
你能解释一下吗?
So Dave Cutler is the architect of the kernel.
所以 Dave Cutler 是内核的架构师。
26:59 So he is Linus in the Linux world.
所以他就是Linux世界里的Linus。
It’s Dave C.
我是戴夫·C.
in the Windows world.
在Windows世界里。
Yeah.
是的。
27:06 Dave C., okay.
戴夫·C.,好的。
And it’s not that there weren’t other people that contributed, of course, huge pieces to it.
当然,并不是说没有其他人为此做出了巨大的贡献。
27:07 But I think he’s the driving force behind it and always largely has been.
但我认为他是这一切背后的推动力,而且在很大程度上一直都是。
And he’s still…
而他仍然……
I think he’s 85 now.
我想他现在已经85岁了。
He still codes every day.
他仍然每天编码。
He’s a Microsoft Fellow.
他是微软院士。
He, as far as I know, still goes into work, so…
据我所知,他还在上班,所以……
Can you speak to the genius of that guy?
你能谈谈那个人的天才吗?
27:21 Like, what’s interesting about his mind, having worked with him, having interacted with Dave Cutler?
比如,与他共事、与戴夫·卡特勒互动后,他的想法有什么有趣的地方?
Well, the dude’s wicked smart, but he’s also like a farmer.
嗯,这家伙很聪明,但他也像个农民。
27:30 He’s like the guy that will follow you around and make sure that stuff gets done and gets done right to make sure that you’re not checking any crap into his operating system.
他就像一个会跟随你并确保事情完成并正确完成的人,以确保你不会在他的操作系统中检查任何垃圾。
And he won’t tolerate it.
他不会容忍的。
And he’s a real taskmaster in that regard, but I think it really paid off ’cause it was a very big paradigm shift for Microsoft developers to be subjected to the Dave Cutler Digital Equipment style of leadership.
在这方面,他是一个真正的监工,但我认为这确实得到了回报,因为对于微软开发人员来说,接受戴夫·卡特勒数字设备风格的领导是一个非常大的范式转变。
What did you learn from that about successful software teams, where there’s a large number of people collaborating?
对于拥有大量人员协作的成功软件团队,您从中学到了什么?
27:55 Because Microsoft had a lot of brilliant engineers back then, and like you said, Dave Cutler.
因为微软当时有很多才华横溢的工程师,就像你说的,Dave Cutler。
They had to they had to create completely new systems, many of which we still use today.
他们必须创建全新的系统,其中许多系统我们至今仍在使用。
What have you learned about great software engineering teams from that time?
从那时起,您从优秀的软件工程团队中学到了什么?
Tools are everything, I think, for one.
我认为,工具就是一切。
28:21 And people are everything.
人就是一切。
We’ll grant that.
我们会同意的。
But the tool set is a huge factor.
但工具集是一个重要因素。
If we went ahead with Git, it would have been immensely easier.
如果我们继续使用 Git,事情会变得容易得多。
We were using Diff and, you know, manual Deltas.
我们使用 Diff 和手动 Delta。
…To do this porting and stuff.
…进行移植之类的事情。
So being able to fork a branch of source code would be a luxury that is new to me.
因此,能够分叉源代码分支对我来说是一种新的奢侈。
At the time, it would have been really handy.
在当时,这确实是非常方便的。
What were some memorable conversations from that time when you walked over next door-
当你走过隔壁时,有哪些难忘的对话——
Well, what…
嗯,什么……
…
……
28:50 and talked to some of these folks?
并与其中一些人交谈?
…I was not present for was, somebody was complaining, a new hire came into the team and was working on what I believe was called Cairo.
……我没有在场,有人抱怨,一名新员工加入了团队,正在从事我认为称为开罗的工作。
Cairo was going to be the next future operating system, was going to be beautiful, and have a whole new user interface newer than Windows 95, and it never materialized.
Cairo 将成为下一个未来的操作系统,将会很漂亮,并且拥有比 Windows 95 更新的全新用户界面,但它从未实现。
But while they were working on it, one of the guys working on Cairo was kind of flaming on the open NT dev alias, which is thousands of people, how shitty the NT boot experience was.
但当他们正在研究这个问题时,Cairo 的一名工作人员对开放 NT 开发别名(有数千人)大发雷霆,NT 启动体验是多么糟糕。
The response that came back was an epic flame that I wish I would have saved, and I won’t name the guy who wrote it.
收到的回复是一场史诗般的火焰,我希望我能拯救它,我不会说出写它的人的名字。
He knows who he is, but…
他知道自己是谁,但是……
…
……
It was a work of art of angry flame mail, kind of like the ones you see Linus send every now and then about kernel stuff.
这是一件愤怒的火焰邮件的艺术作品,有点像你看到 Linus 时不时发送的有关内核内容的邮件。
So it’s a very similar sentiment.
所以这是一种非常相似的情绪。
Were there, like, kind of intellectual debates, like-
是否有类似的智力辩论,比如——
Oh yeah.
哦,是的。
…
……
29:35 there’s some, some heated stuff with the engineers?
工程师们有一些激烈的事情吗?
It was…
这是……
29:38 Yeah, it got contentious.
是的,这引起了争议。
So you’ve got intellects competing, and eventually, the technical merits for some people are secondary, and it’s about besting the other person in that argument.
因此,智力之间存在竞争,最终,对某些人来说,技术优势是次要的,而在于在争论中击败另一个人。
And it’s no longer productive at that point half the time, but there was a fair bit of that.
到那时,它已经不再有一半的时间了,但也有相当多的时间。
Yeah, I’ve seen those kind of debates in programming language design communities, like Guido van Rossum, the leaders of those communities, it can wear them down because people get…
是的,我在编程语言设计社区中看到过这类辩论,比如这些社区的领导者 Guido van Rossum,这会让他们疲惫不堪,因为人们会……
29:53 You almost forget the mission you’re on and start being very nitpicky about the details.
你几乎忘记了你正在执行的任务,并开始对细节非常挑剔。
I mean, engineering minds get together, and you just go to war over the stupidest, like, syntax subtlety.
我的意思是,工程思想聚集在一起,你们只是为了最愚蠢的、比如语法的微妙之处而展开战争。
Right.
正确的。
Well, I shouldn’t say stupid, but it’s a small syntax subtlety for programming language.
好吧,我不应该说愚蠢,但对于编程语言来说,这是一个小的语法微妙之处。
30:20 I’m sure there are internal battles about specific kernel components.
我确信存在关于特定内核组件的内部斗争。
Yeah, I mean, there’s one that I lost that still bugs me to this day, I think.
是的,我的意思是,我认为我失去了一个至今仍然困扰着我的东西。
Okay, yeah.
好吧,是的。
30:35 What’s that?
那是什么?
‘Cause I still think was right.
因为我仍然认为是对的。
30:38 Well, when we were doing the shell, we were porting everything from ANSI to Unicode, so every character that was eight bits now becomes 16 bits.
嗯,当我们制作 shell 时,我们将所有内容从 ANSI 移植到 Unicode,因此每个 8 位字符现在都变成了 16 位。
Now, the problem is I’m on a MIPS box ’cause I’m porting it to RISC….
现在,问题是我使用的是 MIPS 机器,因为我要将它移植到 RISC……。
and you can’t have unaligned addresses.
并且不能有未对齐的地址。
But if you take two ID lists, which are basically past components, you take the one for C colon backslash, take the one for Windows, take the one for System32, and you add them together.
但是,如果您采用两个 ID 列表(基本上都是过去的组件),您可以将 C 冒号反斜杠的一个、Windows 的一个、System32 的一个,然后将它们添加到一起。
But if you’ve got an odd number of characters, now you’re at an odd address in this thing, and it takes me an immense amount of work to turn on exception handlers, to do unaligned byte access, to pull the string out and copy it manually.
但是,如果你有奇数个字符,那么现在你在这个东西中处于一个奇数地址,并且我需要做大量的工作来打开异常处理程序,进行未对齐的字节访问,拉出字符串并手动复制它。
31:11 And it’s literally like a hundred to a thousand times the amount of work to read a string out of this ID list on a MIPS machine because it’s unaligned.
从字面上看,在 MIPS 机器上从这个 ID 列表中读取字符串的工作量是工作量的一百到一千倍,因为它是未对齐的。
So I’m having the argument that even though it’s late in the Windows 95, they’ve already shipped one beta, that we should now just guarantee that ID lists are always an even number of bytes, or do some hack to just make sure this never happens so the code that references them on all this hard work can just blaze through it.
所以我的观点是,尽管 Windows 95 已经发布了一个测试版,但我们现在应该保证 ID 列表始终是偶数字节,或者进行一些修改以确保这种情况永远不会发生,以便在所有这些艰苦工作中引用它们的代码可以轻松完成它。
And it became a shouting match and sort of a personal match and I lost that one.
这变成了一场喊叫比赛,有点像个人比赛,但我输了。
And I still think that, I know today, that that code running on Windows is thousands of times slower than it has to be and it- nobody cares ’cause it’s plenty fast but- …it could be a lot faster.
我仍然认为,我今天知道,在 Windows 上运行的代码比它必须的速度慢数千倍,而且没有人关心它,因为它已经足够快了,但是……它可以快得多。
Yeah.
是的。
31:49 So yeah, I mean you mentioned MIPS and RISC.
是的,我的意思是您提到了 MIPS 和 RISC。
How deeply did you have to understand the lowest level?
你对最低层次的了解有多深?
Sort of the lowest level of the software and even the hardware with the stuff you were building.
排序是最低级别的软件,甚至是您正在构建的硬件。
Like what are the layers of the abstractions you had to understand to be successful with all the stuff you’re doing with NT and before that with…
就像您必须了解哪些抽象层才能成功地完成您使用 NT 所做的所有事情以及在此之前......
Well, about half your day is going to be spent debugging, and most of the time is going to be spent in call stacks that are in pure assembly language because there’s no source level debugging.
嗯,大约一半的时间将用于调试,并且大部分时间将花费在纯汇编语言的调用堆栈中,因为没有源代码级调试。
32:12 So it’s not like we’re in Visual Studio, and you hit a breakpoint, and it pops up, and there’s the source code.
所以这不像我们在 Visual Studio 中,你遇到了一个断点,它就会弹出,并且有源代码。
You can go look at the source code, but you’re looking at the raw assembly dump from the machine at all times.
您可以查看源代码,但您始终在查看机器中的原始程序集转储。
So even if you’re programming in C, the debugging is in assembly?
那么即使你用 C 语言编程,调试也是用汇编语言进行的吗?
Yeah, 100%.
是的,100%。
Oh man.
噢,伙计。
So it’s a little cumbersome.
所以有点麻烦。
Oh.
哦。
And better yet, we’re doing four instruction sets because we’re doing Intel MIPS, Alpha, and PowerPC.
更好的是,我们正在开发四种指令集,因为我们正在开发 Intel MIPS、Alpha 和 PowerPC。
32:37 So depending on which machine it crashes on, you’ve got an entirely different instruction set…
因此,根据崩溃的机器,你会得到完全不同的指令集......
…That registers.
……这注册了。
And so you get reasonably adept at debugging all four, but I had more experience in MIPS, so MIPS stuff would come my way.
所以你相当熟练地调试所有四个,但我在 MIPS 方面有更多的经验,所以 MIPS 的东西会来我的方式。
That’s a real endurance event.
这才是真正的耐力赛。
32:54 I mean, can you speak to that?
我的意思是,你能谈谈吗?
The torture there is debugging, especially that kind of debugging without the tooling associated with it.
调试是一种折磨,尤其是没有相关工具的调试。
I mean that’s, you know, programming, kids these days, programming isn’t all about creating beautiful things, right?
我的意思是,你知道,编程,现在的孩子们,编程并不全是为了创造美丽的东西,对吧?
It’s also about fixing things.
这也是关于修复问题。
Yeah, I would say that 20% of my professional life has been creating and 80% has been debugging and fixing.
是的,我想说,我职业生涯的 20% 是在创作,80% 是在调试和修复。
33:18 And I mean, I got a bit of a reputation as somebody who could fix stuff, and so stuff like that would flow to me, and so I would spend more time doing that.
我的意思是,我获得了一些可以修复东西的声誉,所以类似的东西会流向我,所以我会花更多的时间来做这件事。
I wasn’t renowned as a creative UI genius where I’m flowering all these new ideas.
我并不是以创造性的 UI 天才而闻名,我并不是在那里绽放所有这些新想法。
So I got to fix ugly stuff, but you get really good at that.
所以我必须修复丑陋的东西,但你真的很擅长。
So I don’t mind it until it’s one of those things where you’ve been chasing it for so long that you don’t know what to do next and you can’t understand why it doesn’t work or how it ever worked or whatever situation you happen to be in, and you know, after a day of it, it can get pretty trying.
所以我不介意它,除非它是你已经追逐了很长时间的事情之一,以至于你不知道下一步该做什么,你无法理解为什么它不起作用,或者它是如何起作用的,或者无论你碰巧处于什么情况,你知道,经过一天的努力,它会变得非常困难。
Yeah, debugging can be real torture.
是的,调试确实是一种折磨。
33:52 It can be really, really difficult.
这可能真的非常困难。
There’s a psychological component, I think, of perseverance.
我认为,毅力有一个心理成分。
I think the ones that, you know, take you a day, they resolve one of two ways.
我认为那些需要花费你一天时间的问题,他们可以通过以下两种方式之一来解决。
34:00 Either it’s like, “Oh, extra semicolon,” and then you finally see it…
要么是“哦,多了一个分号”,然后你终于看到了……
…Or it’s some horrible manifestation of cross-threaded apartment nonsense that was really hard.
......或者这是一些交叉线程公寓废话的可怕表现,这真的很难。
But it can go both ways.
但它可以是双向的。
I had a bug.
我有一个错误。
It wasn’t my bug, actually, but it was a manifestation of a bug in Task Manager where every now and then it would say greater than 100% total CPU usage, and this looks pretty silly for a task manager.
实际上,这不是我的错误,但它是任务管理器中错误的表现,它时不时地会显示 CPU 总使用率超过 100%,这对于任务管理器来说看起来相当愚蠢。
So I had tried to resolve it for a long time, and I’d talked to the kernel guys about my issue, and they were unsympathetic, let’s say, because the kernel guys are a special breed, and they weren’t interested in my user land problems.
所以我花了很长时间试图解决这个问题,我和内核人员讨论了我的问题,他们没有同情心,可以说,因为内核人员是一个特殊的品种,他们对我的用户空间问题不感兴趣。
“It’s probably some issue in my code,” right?
“这可能是我的代码中的一些问题,”对吧?
34:40 And they’re probably right, but it wasn’t in this case, and I was sure of it, and so I kept adding asserts all through the code to make sure that the preparatory steps of adding the stuff together were never more than 100, and that the final sum was never more than 100, and finally it never asserted.
他们可能是对的,但在本例中并非如此,而且我确信这一点,所以我不断在整个代码中添加断言,以确保将这些内容加在一起的准备步骤永远不会超过 100,并且最终的总和永远不会超过 100,并且最终它永远不会断言。
But occasionally we would get this bug where people would still see it, and so I finally put my phone number in the assert, and I was like, “If you see this message, call DavePL at 425-836,” my phone number.
但有时我们会遇到这个错误,人们仍然会看到它,所以我最终将我的电话号码放入断言中,我说,“如果你看到这条消息,请拨打 425-836 致电 DavePL”,这是我的电话号码。
And finally, we did get a catch in the actual stress debugger that I was talking about earlier where it happened to somebody with a debugger connected.
最后,我们确实在实际的压力调试器中遇到了一个问题,我之前谈到过,它发生在连接了调试器的人身上。
35:16 We were able to go through, and it was actually a kernel accounting issue, and it wasn’t a Task Manager issue, so they just fixed it in the kernel once I was able to prove that it was in fact a kernel issue.
我们能够解决这个问题,这实际上是一个内核会计问题,而不是一个任务管理器问题,所以一旦我能够证明这实际上是一个内核问题,他们就在内核中修复了它。
And you’d think we would then remove my phone number, but we just commented it out, so it’s shipped, and it’s in all the damn source code leaks for NT that are out there, so…
你可能会认为我们会删除我的电话号码,但我们只是将其注释掉,所以它已经发布了,并且它存在于 NT 的所有该死的源代码泄漏中,所以......
That’s awesome.
太棒了。
…that’s how I find Task Manager code.
...这就是我找到任务管理器代码的方式。
35:32 I search for my phone number on Google, and it will reverse-find…
我在 Google 上搜索我的电话号码,它会反向查找...
Oh, yeah, that’s fantastic.
哦,是的,那太棒了。
…the NT source code.
...NT 源代码。
Can you speak to the assert thing?
你能谈谈断言的事情吗?
35:39 By the way, I saw, I think you tweeted or you said somewhere that if you want to take your asserts really seriously, you add your home phone number in there.
顺便说一句,我看到,我认为你发推文或在某个地方说过,如果你想真正认真地对待你的主张,你可以在其中添加你的家庭电话号码。
It’s true, it’s true.
这是真的,这是真的。
A little facetious, because it’s probably not the smartest thing, but…
有点搞笑,因为这可能不是最聪明的事情,但是……
No, it’s not.
不,不是。
…you will find out.
……你会发现的。
But I mean, assert by itself is already a serious thing, because it stops all execution.
但我的意思是,断言本身就已经是一件严重的事情了,因为它会停止所有执行。
35:52 I mean, this is one of the reasons I really, really love asserts, because they stop everything and force you to take care of the problem.
我的意思是,这是我非常非常喜欢断言的原因之一,因为它们会停止一切并迫使你解决问题。
Yeah, I’m a little religious about my asserts too.
是的,我对自己的主张也有点虔诚。
36:07 I don’t assert things that I hope aren’t true.
我不会断言我希望不是真的事情。
I assert things that I know cannot be true, and I think that’s really the intent of an assertion.
我断言我知道的事情不可能是真的,我认为这确实是断言的意图。
So I’m overstating the obvious, but when it does occur, it’s a bug, plain and simple.
所以我夸大了显而易见的事情,但当它确实发生时,它就是一个错误,简单明了。
It’s not a warning.
这不是警告。
It’s kind of fascinating how often it can really help you figure out the problem, because if you put asserts everywhere, you can get very quickly to the source of the problem.
令人着迷的是,它经常能够真正帮助您找出问题,因为如果您在各处都放置断言,您可以很快找到问题的根源。
Yeah, I tend to…
是的,我倾向于……
36:34 it’s not something I want to suggest you go back and add later.
我不想建议你回去后再添加。
It’s something you should do organically as you build your code.
这是您在构建代码时应该有机地做的事情。
As you’re building.
当你正在建造时。
So for each function, if you’ve got assumptions like, “I know that this pointer is never null,” well, assert that.
因此,对于每个函数,如果您有这样的假设:“我知道这个指针永远不会为空”,那么,断言这一点。
36:40 If you know this count is always less than twice the byte width, assert that.
如果您知道该计数始终小于字节宽度的两倍,请断言。
And don’t be afraid, because if it asserts, it’s doing you a favor.
不要害怕,因为如果它确实如此,那就对你有好处。
I think some people are afraid.
我认为有些人感到害怕。
You know, it’s like when you turn out of an intersection, and you think maybe there’s somebody coming, and you don’t look left.
你知道,这就像当你走出十字路口时,你认为也许有人过来,但你没有向左看。
Or maybe I’m one to do that.
或者也许我就是这样做的人。
But it’s like that.
但就是这样。
People don’t assert because they’re afraid they’re going to fire.
人们不会断言,因为他们担心自己会被解雇。
Well, no, you want to know.
好吧,不,你想知道。
You mentioned Task Manager.
您提到了任务管理器。
37:05 Obviously, we have to talk about this, the legendary program that you created, the Windows Task Manager.
显然,我们必须谈论这个,您创建的传奇程序,Windows 任务管理器。
Tell me every detail of how you built it.
告诉我你如何建造它的每一个细节。
What is Windows Task Manager?
什么是 Windows 任务管理器?
So Windows Task Manager is a way to go in and find out which apps on your system are using the computer, using the hardware, using the CPU, using the memory, and which ones might be using too much or locked up or going crazy.
因此,Windows 任务管理器是一种深入了解系统上哪些应用程序正在使用计算机、使用硬件、使用 CPU、使用内存,以及哪些应用程序可能使用过多、锁定或疯狂的方法。
37:18 And it gives you the ability to terminate and kill those ones.
它使您能够终止并杀死那些人。
So it’s an inspection and a fixing tool.
所以它是一个检查和修复工具。
Yeah, it lists all the processes.
是的,它列出了所有流程。
37:34 I mean, it’s a legendary piece of software.
我的意思是,这是一个传奇的软件。
It’s crazy.
太疯狂了。
You just take it for granted.
你只是认为这是理所当然的。
It’s like the Start menu, right?
它就像开始菜单,对吧?
It’s like genius.
这就像天才一样。
Well, I had the great fortune of working on a lot of things that people are familiar with.
嗯,我很幸运能够从事很多人们熟悉的事情。
37:44 And Task Manager was one of those side projects that I started as something that I wanted for myself and eventually came in-house.
任务管理器是我作为自己想要的东西开始的那些副项目之一,并最终成为了公司内部的项目。
So I started writing it at home and I got the basics up and running.
所以我开始在家写它,并掌握了基础知识并运行起来。
I was using, I think it’s HKey Current Performance or HKey Performance in the registry to get the stats because I didn’t have access to the internal APIs because I was working from home and I don’t call those if I’m working from home.
我使用的是注册表中的 HKey Current Performance 或 HKey Performance 来获取统计信息,因为我无法访问内部 API,因为我在家工作,如果我在家工作,我不会调用这些 API。
38:08 And when I brought it in-house then I was able to call things like NtQuerySystemInformation or NtQueryProcessInformation and get the real answers very quickly, which enabled it to become a very fast and responsive app.
当我将其引入内部时,我能够调用 NtQuerySystemInformation 或 NtQueryProcessInformation 之类的东西,并非常快速地获得真正的答案,这使其成为一个非常快速且响应迅速的应用程序。
So people have come to rely on it because I wrote it to be as reliable as possible.
所以人们开始依赖它,因为我写它是为了尽可能可靠。
I wasn’t worried about the features.
我并不担心这些功能。
It was a basic set of functionality that I wanted in there.
这是我想要的一组基本功能。
I got everything I wanted, but I wanted it to be really robust.
我得到了我想要的一切,但我希望它非常坚固。
And small.
而且很小。
And the original was like 87k.
原版大概是87k。
Okay, can you speak to what it takes to build a piece of software like that that doesn’t freeze?
好的,您能谈谈如何构建一款不会冻结的软件吗?
You don’t assume much, right?
你不会假设太多,对吧?
38:40 If you’re going to call the shell to run an app, well, that could be a network path that’s on a TCP/IP share that takes 90 seconds to time out.
如果您要调用 shell 来运行应用程序,那么这可能是 TCP/IP 共享上的网络路径,需要 90 秒才会超时。
So anytime you do any kind of API call like that, that could take time, you’re going to wind up doing it on a separate thread.
因此,无论何时执行任何类型的 API 调用,都可能需要时间,最终都会在单独的线程上执行。
And so the app becomes a little more complex because everything is multithreaded.
因此应用程序变得更加复杂,因为一切都是多线程的。
Okay, so what programming language were you working in?
好的,那么您使用什么编程语言?
C++.
C++。
So this was for Windows NT?
那么这是针对 Windows NT 的吗?
Yes.
是的。
Okay.
好的。
So this shipped initially in NT 4.0.
所以这最初是在 NT 4.0 中发布的。
Okay, so what are some interesting details about this program?
好的,那么这个程序有哪些有趣的细节呢?
39:07 Because you have to get it as simple as possible, but also as robust as possible.
因为你必须让它尽可能简单,但也尽可能强大。
What are some interesting optimizations, for example, you had to implement?
例如,您必须实施哪些有趣的优化?
There are a couple of things that are a little hardcore now.
现在有一些事情有点硬核。
39:20 I’m surprised I did.
我很惊讶我做到了。
Like, I didn’t want to link to the C runtimes at all.
就像,我根本不想链接到 C 运行时。
So I made sure never to call a runtime call and I didn’t link to them, and that saved me whatever the C runtime is, 96k or something.
所以我确保永远不会调用运行时调用,也没有链接到它们,这节省了我的时间,无论 C 运行时是什么,96k 或其他什么。
So, it almost doubled the size of the app if you just touched any C call.
因此,如果您只触及任何 C 调用,应用程序的大小几乎会增加一倍。
So I was careful not to do that, but then I was actually writing in C++, which is C with objects more than anything.
所以我小心翼翼地不这样做,但后来我实际上是用 C++ 编写的,C++ 中对象比任何东西都多。
But in order to get it to work, I had to go through and call all the object constructors manually from the dispatch table and stuff because you don’t have the runtimes to do it for you.
但为了让它工作,我必须从调度表和其他东西中手动检查并调用所有对象构造函数,因为你没有运行时来为你做这件事。
39:50 So you’re working with a compiler that doesn’t have its runtime, and I don’t want to get off-topic on the technical issues, but it’s a lot of extra work to get it to work, but when you do, it’s incredibly small and tight.
所以你正在使用一个没有运行时的编译器,我不想在技术问题上偏离主题,但要让它工作需要很多额外的工作,但当你这样做时,它会变得非常小和紧凑。
That’s about the size- of the program.
这与程序的大小有关。
40:00 What are some interesting aspects of tracking down every process and how much CPU usage is in that process?
跟踪每个进程有哪些有趣的方面以及该进程中的 CPU 使用率是多少?
One of the cooler things that I saw is…
我看到的最酷的事情之一是……
40:10 I don’t want to say I invented Hamming code, but I kind of invented Hamming code without knowing Hamming code existed.
我不想说我发明了汉明码,但我在不知道汉明码存在的情况下发明了汉明码。
So every column and every row in Task Manager has a bit on whether it’s become dirty or not, and then I can look, basically the same way Hamming code looks in your X and Y columns, to find out which rows have changed, go through, and find out which ones actually need to be repainted.
因此,任务管理器中的每一列和每一行都有一点关于它是否变脏的信息,然后我可以查看,基本上与汉明代码在 X 和 Y 列中查看的方式相同,找出哪些行已更改,遍历并找出哪些行实际上需要重新绘制。
So Task Manager is super efficient and it works in concert with the ListView control, which provides that functionality to go through and repaint as little as an individual cell that changes from frame to frame.
因此,任务管理器非常高效,并且它与 ListView 控件协同工作,后者提供了遍历和重绘的功能,就像帧与帧之间发生变化的单个单元格一样。
So it could paint very fast, it can resize very smoothly, and resizing was probably my biggest personal goal with that app.
所以它可以非常快地绘制,它可以非常顺利地调整大小,而调整大小可能是我使用该应用程序的最大个人目标。
40:51 So you can size it to any size and it still works and even if you have 32 CPUs, which wasn’t possible in the day, it will draw, I think, only eight graphs and then it wraps but it still works today.
因此,你可以将其调整为任何大小,它仍然可以工作,即使你有 32 个 CPU(这在当时是不可能的),我认为它只会绘制八个图表,然后它会换行,但今天仍然可以工作。
So kind of proud of that.
对此感到非常自豪。
It is incredible.
这太不可思议了。
41:06 You’ve gotten the chance to observe the evolution of Task Manager.
您有机会观察任务管理器的演变。
In some ways, it really hasn’t changed much.
在某些方面,它确实没有太大改变。
Maybe there are some prettier aspects to it that fit into whatever version of Windows it’s in, but it’s really basically the same thing.
也许它有一些更漂亮的方面,适合它所在的任何版本的 Windows,但实际上基本上是一样的。
The functionality is very same.
功能非常相同。
41:23 The reporting is more because they’ve added GPU and thermals and things like that, which is really nice to have.
报告内容更多是因为他们添加了 GPU 和散热系统以及类似的东西,这真是太好了。
And we didn’t have that ability in the day, so…
而我们当时没有这个能力,所以……
I mean, what can you say?
我的意思是,你能说什么?
41:32 Do you know about, like, was there any refactoring done or is it basically the same code?
您是否知道是否进行了任何重构或者基本上是相同的代码?
As far as I know, the original code’s still mostly all there so there are layers of drawing code and dark mode code and whatever else, XML, schema code, that goes on top of that that makes it four megabytes instead of 87k but that’s the world we live in, so…
据我所知,原始代码仍然大部分都在那里,所以有层绘图代码和暗模式代码以及其他任何东西,XML,模式代码,最重要的是使它有 4 兆字节而不是 87k,但这就是我们生活的世界,所以......
Yeah, it’s one of those pieces of software you create and just stay once it’s there.
是的,它是您创建的软件之一,一旦存在就留下来。
41:51 It’s just really like the Start menu, and I’m sure if you remove it, people would just lose their mind.
它真的就像“开始”菜单一样,我确信如果你删除它,人们就会失去理智。
Yeah, it might be locked in for a while, on that one.
是的,它可能会被锁定一段时间。
42:02 It might be good.
可能会很好。
Yeah, I thought that would be true for Clippy, but Clippy will make it back one day.
是的,我认为 Clippy 也是如此,但 Clippy 有一天会卷土重来。
42:06 All right, what are some other pieces of software you created at the time that are legendary?
好吧,您当时创建的其他一些传奇软件还有哪些?
So you were part of Space Cadet Pinball, at least porting.
所以你是太空学员弹球的一员,至少是移植的。
Yeah, so they came into my office and said, “Hey, what are you doing?” And I told them what I was doing and they said, “Well, how do you want to spend your next three months?” And I said, “I have no idea.” And they said, “Do you want to port Pinball?” And I’d seen Space Cadet Pinball as a game standalone for the Win95 platform and it had a couple different tables and it was a cool game so I was kind of excited.
是的,所以他们走进我的办公室说:“嘿,你在做什么?”我告诉他们我在做什么,他们说:“好吧,你想如何度过接下来的三个月?”我说:“我不知道。”他们说:“你想移植 Pinball 吗?”我将 Space Cadet Pinball 视为 Win95 平台的一款独立游戏,它有几个不同的桌子,这是一款很酷的游戏,所以我有点兴奋。
42:22 What they wanted was some visual splash for NT to show that NT can do, for then, high-speed graphics or at least responsive graphics.
他们想要的是 NT 的一些视觉效果,以表明 NT 可以实现高速图形或至少响应式图形。
42:48 And so I took a shot, and unfortunately, a lot of the code was in Assembly, and I was on a MIPS, so I had to rewrite the code in C so that I could then port it to all the different platforms.
所以我尝试了一下,不幸的是,很多代码都是用汇编语言编写的,而我使用的是 MIPS,所以我必须用 C 语言重写代码,这样我就可以将其移植到所有不同的平台上。
At the heart of the game is a huge state engine, and it’s like a giant switch statement with, if I remember, like 50 entries in it.
游戏的核心是一个巨大的状态引擎,它就像一个巨大的 switch 语句,如果我没记错的话,里面有大约 50 个条目。
43:06 And it’s got an Easter egg built in.
它内置了一个复活节彩蛋。
And decoding the state, it’s like running a neural network through this thing as you hit it with different states.
解码状态,就像在不同状态下运行神经网络一样。
And I just put it aside and treated it as a black box.
我只是把它放在一边,把它当作一个黑匣子。
So my code runs on top of that and does the drawing and the sound and everything else.
所以我的代码在此基础上运行并执行绘图、声音和其他所有操作。
But the original game is still running.
但原来的游戏仍在运行。
And somebody recently asked me why it is slightly different; the physics are slightly different from the Windows 95 version, but it should be the same code because I’m trying very hard to preserve that.
最近有人问我为什么略有不同?物理原理与 Windows 95 版本略有不同,但它应该是相同的代码,因为我正在努力保留它。
But what it is, is I had a bug where I will draw as many frames per second as I can, which on a modern computer can be 5,000 frames a second for Pinball because it’s a pretty basic game.
但问题是,我遇到了一个错误,我会每秒绘制尽可能多的帧,在现代计算机上,弹球游戏可以达到每秒 5,000 帧,因为这是一个非常基本的游戏。
43:45 And so all your physics are interpolated 5,000 times per second instead of 30 times a second, or whatever you would’ve got on the old one.
因此,所有物理场都会每秒插值 5,000 次,而不是每秒 30 次,或者在旧物理场上插值的任何内容。
So you’re getting arguably better, or at least different physics, but they fixed that since, so…
所以你可以说你正在变得更好,或者至少是不同的物理学,但他们解决了这个问题,所以......
Why is that game so awesome?
为什么这个游戏这么棒?
I think it’s a great design.
我认为这是一个很棒的设计。
43:59 I mean, I take no credit for that.
我的意思是,我对此没有任何功劳。
That’s all totally the guys at Cinematronics.
这完全就是 Cinematronics 的人。
But the original game is a great design.
但原版游戏的设计很棒。
It’s very similar to Black Knight 2000, which I own as an actual physical pinball machine.
它与我拥有的《Black Knight 2000》非常相似,它是一台真正的物理弹球机。
And the layout is actually very similar.
而且布局实际上非常相似。
I don’t know if it was inspired by it or not.
不知道是不是受到了它的启发。
So it’s a good game.
所以这是一个好游戏。
Yeah.
是的。
44:15 Sometimes I think about Tetris, about certain games with pretty primitive graphics that captivate the excitement of a large number of people.
有时我会想到俄罗斯方块,想到某些具有非常原始的图形但能吸引很多人兴奋的游戏。
And maybe it’s the excitement of a large number of people that contributes to the awesomeness of the game.
也许正是很多人的兴奋才造就了这款游戏的精彩。
So when many people together get excited and talk about it, that sort of gets implanted into your head.
因此,当很多人在一起兴奋地谈论它时,这种感觉就会植入你的脑海中。
But that’s one of the great games.
但这是最伟大的游戏之一。
I mean, even like Solitaire and Minesweeper.
我的意思是,甚至像纸牌和扫雷一样。
I mean, there’s just a generation of people that have gone to war in Minesweeper, right?
我的意思是,只有一代人在扫雷中参战,对吧?
Well, those things were included in the OS not as games, but as educational tools to get you to use a mouse.
好吧,这些东西不是作为游戏包含在操作系统中的,而是作为教育工具让你使用鼠标。
Oh, interesting.
哦,有趣。
So Solitaire is there to show you how to do drag and drop.
Solitaire 可以向您展示如何进行拖放操作。
44:54 And Minesweeper’s probably right-click.
扫雷可能是右键单击。
I think you put a flag or some item.
我认为你放了一面旗帜或一些物品。
I’m not a Minesweeper guy, but so each one of them teaches you something.
我不是扫雷爱好者,但他们每个人都会教你一些东西。
Minesweeper guy?
扫雷佬?
45:03 That’s funny.
那很好笑。
Yeah.
是的。
Wow, I didn’t know that.
哇,我不知道。
That’s interesting.
那很有意思。
And that’s true.
这是真的。
But I don’t know how many hours I’ve spent on these games, and millions of people have spent millions of hours on these games.
但我不知道我在这些游戏上花费了多少时间,数百万人在这些游戏上花费了数百万小时。
I used to volunteer teaching computer science at my kids’ school, you know, for the third graders and stuff.
我曾经志愿在我孩子的学校为三年级学生教授计算机科学之类的东西。
45:16 So it’s more like logging in than computer science.
所以这更像是登录而不是计算机科学。
But the kids, of course, all their dads work at Microsoft, so nobody’s impressed by anything you do.
但是孩子们,当然,他们的父亲都在微软工作,所以没有人会对你所做的任何事情印象深刻。
But so one of the kids found out I worked on Pinball, and then they were like, “Whoa, you worked on Pinball?” Because they all knew that in those days.
但其中一个孩子发现我在玩弹球游戏,然后他们就说:“哇,你在玩弹球游戏吗?”因为那时候他们都知道这一点。
Now the kids are probably aged out, they don’t know it anymore, but for a brief period.
现在孩子们可能已经老了,他们不再知道这一点,但只是短暂的一段时间。
You’re behind the Windows activation.
您负责 Windows 激活。
You say it like it’s a bad thing.
你说得好像这是一件坏事一样。
Everything’s a matter of perspective.
一切都是观点问题。
45:44 So tell the story of that.
那么请讲一下这个故事。
What’s Windows activation?
什么是 Windows 激活?
How’d you get involved?
你是如何参与其中的?
So they came to me late in the XP ship process.
所以他们在 XP 发布过程中很晚才来找我。
45:53 I don’t know if the beta had gone out.
我不知道测试版是否已经结束了。
I don’t think the beta had gone out yet, but they had intended to take the Office activation code and then adapt it to Windows and add activation to Windows.
我认为 Beta 版还没有出来,但他们本来打算把 Office 激活码拿来,然后适配 Windows,给 Windows 添加激活。
But whoever was responsible for doing it had slipped it enough times that it wasn’t going to happen.
但无论谁负责做这件事,都已经失误了足够多的次数,所以这件事不会发生。
So I had kind of a reputation for being able to fix things quickly, so they came to me and said, “Can you get this done in time for XP?” “I don’t know, but I’ll try.” So with the help of the guys that were doing the DRM stuff on the DRM side and the research guys doing the math for the product keys and everything else, we cranked it out in time for XP.
因此,我因能够快速修复问题而享有盛誉,因此他们来找我并说:“你能在 XP 期间及时完成此任务吗?” “我不知道,但我会尝试。”因此,在 DRM 方面做 DRM 工作的人员以及对产品密钥和其他所有内容进行数学计算的研究人员的帮助下,我们及时为 XP 做好了准备。
46:26 And I don’t know what its actual impact is for revenue, but I imagine it’s substantial when you start enforcing license keys.
我不知道它对收入的实际影响是什么,但我想当你开始强制执行许可证密钥时,它的影响是巨大的。
I wonder what it is.
我想知道那是什么。
I don’t know.
我不知道。
Because it’s also annoying.
因为这也很烦人。
It is, especially if you have to phone activate.
确实如此,尤其是当您必须通过电话激活时。
46:39 And that was just the case that we had to carry with us as an albatross around our neck, where you’ve got to pass data up to the clearinghouse, the backend systems that are going to approve your key.
这就是我们必须随身携带的情况,就像我们脖子上的负担一样,你必须将数据传递到清算所,即将批准你的密钥的后端系统。
You’ve got to tell it all your hardware parameters, like how much memory and hard drive space and the various things the hardware key is bound to, as well as the product key, and you’ve got it encoded in letters and numbers that somebody’s willing to read in over a phone.
你必须告诉它你的所有硬件参数,比如多少内存和硬盘空间以及硬件密钥绑定的各种东西,以及产品密钥,并且你已经将其编码为人们愿意通过电话读取的字母和数字。
And if you think doing product activation is painful over the phone, could you imagine being the person that worked on the other end of that line?
如果您认为通过电话进行产品激活很痛苦,您能想象自己是在电话另一端工作的人吗?
I mean, that’s just got to be a mind-numbing job to listen to product keys for eight hours a day.
我的意思是,每天听八个小时的产品密钥肯定是一项令人头脑麻木的工作。
Yeah, one of the challenges with Windows, and it’s been a frustration point for me, but I understand from a design perspective it’s very difficult, is so many different kinds of people use Windows.
是的,Windows 面临的挑战之一,这对我来说是一个挫败点,但我从设计角度理解,这非常困难,因为有这么多不同类型的人使用 Windows。
47:13 But it’s been frustrating how over time Windows has more and more leaned into the direction of not the power user, I should say, which is why Linux has always been really wonderful.
但令人沮丧的是,随着时间的推移,Windows 越来越倾向于非高级用户的方向,我应该说,这就是 Linux 一直非常精彩的原因。
But from an activation perspective or from any kind of configuration, it’s been a source of a lot of frustration.
但从激活的角度或任何类型的配置来看,这都是很多挫败感的根源。
Yeah, one of my more popular episodes of late has been why you can’t move the Windows taskbar.
是的,我最近比较受欢迎的一集是为什么你无法移动 Windows 任务栏。
47:49 And I had no idea, but the outrage is palpable amongst people that you—
我不知道,但人们的愤怒是显而易见的,因为你——
Yes.
是的。
…just put it on the left or top and you can’t anymore, and it is an affront to their existence.
......只要把它放在左边或顶部,你就不能再这样做了,这是对他们存在的侮辱。
47:57 And I understand it to a certain extent.
我在一定程度上理解了这一点。
Well, it’s one of the main reasons I really just dislike Windows.
嗯,这是我真的不喜欢 Windows 的主要原因之一。
48:02 There’s a lot of aspects about Windows 11 I dislike.
Windows 11 有很多方面我不喜欢。
One of which is like you can’t customize things as much about the position of the taskbar, just basic customization.
其中之一就是你无法自定义任务栏位置,只能进行基本自定义。
Can we just configure stuff?
我们可以只配置一些东西吗?
Because there’s going to be a small contingent of power users that are just going to enjoy the hell out of this operating system if you just give them that option.
因为如果你给一小部分高级用户提供这个选项,他们就会享受这个操作系统的乐趣。
It costs you nothing.
它不花费你任何费用。
Just give them that freedom.
只要给他们自由就可以了。
Well, it does cost, right?
嗯,确实要花钱,对吧?
48:28 Because the freedom to put the Start menu on the left or the top or the right really increases the complexity of the code that renders the Start menu and lays out the tabs and does all the things, and now it’s a much larger surface for bugs and it’s a much larger piece of code to maintain, so you probably need more developers or another developer or some portion of a developer’s time.
因为将“开始”菜单放在左侧、顶部或右侧的自由确实增加了呈现“开始”菜单、布置选项卡以及执行所有操作的代码的复杂性,现在它是一个更大的错误表面,并且需要维护更大的代码段,因此您可能需要更多的开发人员或另一个开发人员或开发人员的部分时间。
So the question becomes at what point is it still worth it to satisfy the niche needs of a small set of users?
那么问题就变成了,在什么时候仍然值得满足一小部分用户的利基需求?
Those decisions weren’t mine to make, but I could see it from both sides.
这些决定不是我做的,但我可以从双方的角度来看。
I think just like the people who make movies and insert very nuanced details that only a small number of people will realize are there, that’s going to really pay off.
我认为就像那些制作电影并插入只有少数人会意识到的非常微妙的细节的人一样,这将真正得到回报。
49:04 There’s a kind of reputation that builds over time that has a very powerful ripple effect.
有一种随着时间的推移而建立起来的声誉,会产生非常强大的连锁反应。
That I think it has so many benefits, including for hiring great software engineers.
我认为它有很多好处,包括聘请优秀的软件工程师。
It’s like you create this aura of a place that puts love into every detail, that really takes care of the power users, that takes care of the developers, and I think Microsoft has more and more moved in that direction with GitHub and acquiring GitHub and just taking care of the developers.
就像你创造了一个将爱融入到每个细节的地方,真正照顾高级用户,照顾开发人员,我认为微软已经越来越朝着这个方向前进,通过 GitHub 并收购 GitHub 并只照顾开发人员。
But on the Windows interface side, come on, some customization.
但在 Windows 界面方面,来吧,一些定制。
50:04 With VS Code, you can customize everything.
使用 VS Code,您可以自定义一切。
Why can’t we customize the Start menu, all right?
为什么我们不能自定义“开始”菜单,好吗?
And the taskbar, and really every aspect of the Windows interface.
还有任务栏,以及 Windows 界面的各个方面。
I don’t know, maybe you’re right.
我不知道,也许你是对的。
Maybe it increases the complexity of the code.
也许它会增加代码的复杂性。
I suspect that’s just not the case.
我怀疑事实并非如此。
I bet it was.
我打赌是的。
50:24 I bet it was a scheduling decision when they rewrote the Start menu.
我敢打赌这是他们重写“开始”菜单时的一个调度决定。
I think they rewrote it because it’s different than the old taskbar.
我认为他们重写了它,因为它与旧的任务栏不同。
50:31 And somebody was tasked with, “You’ve got to deliver this set of functionality, and if I cut out putting it on the left and the top and the right and two rows of tabs and all the other cool features, I can deliver it four months sooner.” And I’m not saying that’s the right decision, but I’m guessing that might be the kind of thing that motivates it.
有人的任务是,“你必须提供这组功能,如果我把它放在左侧、顶部、右侧以及两行选项卡和所有其他很酷的功能上,我可以提前四个月提供它。”我并不是说这是正确的决定,但我猜测这可能是激发它的原因。
And they’re on such a different release schedule now.
他们现在的发布时间表完全不同了。
It used to be…
它曾经是……
You won’t see much craftsmanship unless somebody owns a component for a long time and it settles to a point that then you can work on and polish it, right?
你不会看到太多的工艺,除非有人长期拥有一个组件并且它稳定到你可以对其进行处理和抛光的程度,对吗?
But if it’s always churning and the UI is changing every release, it’s never going to get that level of polish.
但如果它总是在搅动,并且每次发布时用户界面都会发生变化,那么它永远不会达到那种程度的完善。
Although I think the UI is pretty nice, but…
虽然我觉得 UI 很不错,但是……
Yeah, it is nice, but I think it’s a craftsmanship thing.
是的,这很好,但我认为这是一个工艺问题。
51:06 Just like you with the Task Manager, if there’s a guy or a girl in there who takes ownership of it, who has a passionate…
就像你的任务管理器一样,如果里面有一个男人或一个女孩拥有它,他有热情......
For them, it’s a thing that they take pride in over a period of time, they can by themselves in a short amount of time create something truly wonderful.
对于他们来说,这是他们在一段时间内感到自豪的事情,他们可以自己在短时间内创造出真正精彩的东西。
Right.
正确的。
And like, I think if you have large software engineering teams with managers and scheduling of meetings and all this kind of stuff, yeah, okay.
就像,我认为如果你有大型的软件工程团队,有经理和会议安排以及所有类似的东西,是的,好吧。
51:34 Then your argument applies.
那么你的论点就适用。
But if you allow the flourishing of individuals that create cool stuff and their own sort of side project, which Google is very good at.
但如果你允许个人蓬勃发展,创造出很酷的东西和他们自己的副业项目,谷歌非常擅长这一点。
They’ve tried that, right?
他们已经尝试过了,对吗?
51:55 At Google, yeah.
在谷歌,是的。
Yeah, like have fun with it.
是啊,喜欢玩得开心。
51:56 Like do some crazy stuff and then we’ll integrate it.
就像做一些疯狂的事情,然后我们将整合它。
We’ll try to integrate it into the whole ecosystem.
我们将尝试将其整合到整个生态系统中。
I don’t know.
我不知道。
I don’t know, because to me, it’s such a great joy for an individual developer to create something like customization of the Start menu or the taskbar because you know that millions of people are going to use the taskbar.
我不知道,因为对我来说,创建诸如开始菜单或任务栏自定义之类的东西对于个人开发人员来说是一种巨大的乐趣,因为你知道数百万人将使用任务栏。
And then you know that thousands, tens of thousands of developers might be using to customize even little subtle aspects of the taskbar.
然后您就会知道,成千上万的开发人员可能正在使用自定义任务栏的微小方面。
You know how much joy you create, you give to people to customize, to have some kind of JSON thing where you customize something about the taskbar?
你知道你创造了多少快乐,你给人们定制,有某种 JSON 东西,你可以定制任务栏的一些东西?
Okay, but how do you respond to the Steve Jobs aspect of giving you customization implies that we couldn’t figure out the right answer for you?
好的,但是你如何回应史蒂夫·乔布斯为你提供定制的方面,这意味着我们无法为你找出正确的答案?
52:37 Or maybe there is no right answer and all four answers are equally right.
或者也许没有正确答案,而所有四个答案都同样正确。
I have no idea, but…
我不知道,但是……
Right.
对。
52:51 I think I’ve always— I’m glad Apple exists.
我想我一直很高兴苹果的存在。
It’s a beautiful thing, and that idea of design is wonderful, but I always thought that Windows creates the contrast.
这是一件美丽的事情,这种设计理念也很棒,但我一直认为 Windows 创造了对比。
The point of Windows is to be the operating system that works on all kinds of devices, that’s supposed to be much more open.
Windows 的重点是成为可在各种设备上运行的操作系统,它应该更加开放。
And they’ve moved towards that direction more and more with Windows Subsystem for Linux.
他们已经通过适用于 Linux 的 Windows 子系统越来越朝着这个方向发展。
It’s just this whole developer-friendly ecosystem.
这就是整个开发者友好的生态系统。
The interface should be in the spirit of that, I think.
我认为,界面应该本着这一精神。
But I do think that there could also be security vulnerabilities created with that.
但我确实认为这也可能会产生安全漏洞。
It’s not just the complexity of the code, because Windows is just under attack.
这不仅仅是代码的复杂性,因为 Windows 刚刚受到攻击。
53:30 It’s very difficult to keep it secure.
保证它的安全非常困难。
Anyway, taking that tangent, you also developed ZIP file support for Windows, creating Visual ZIP, which eventually evolved into ZIP folders.
无论如何,顺着这个切线,您还开发了对 Windows 的 ZIP 文件支持,创建了 Visual ZIP,最终演变成 ZIP 文件夹。
Tell the story of that.
讲一下那个故事。
So that was a piece of software that I wrote at home again, and what happened was, I was out with my wife, and I think it was a Sunday afternoon.
这是我再次在家编写的一个软件,当时我和妻子出去了,我想那是一个周日下午。
53:44 We were driving around.
我们开车到处走走。
This is 1993, and we’re living in our apartment, and we’re just seeing what the housing market is like out there.
这是 1993 年,我们住在自己的公寓里,只是看看外面的房地产市场是什么样子。
And there’s a guy, he’s got this beautiful three-bedroom house and a Corvette convertible, ’93 red, torch red, parked in the driveway, and the house is for sale, and it’s like 300K, I think.
还有一个人,他有一套漂亮的三居室房子和一辆克尔维特敞篷车,93年的红色,火炬红色,停在车道上,房子正在出售,我想大概是30万。
And there’s no chance I’m coming up with 300K at that point, or even the down payment on that.
那时我不可能拿出 30 万,甚至连首付都没有。
So I took the flyer, and I cut the picture of the house out, and I taped it to my monitor.
所以我拿着传单,把房子的照片剪下来,然后把它贴在我的显示器上。
And that was my incentive to just write something at night, because when I came home, I was doing two things.
这就是我晚上写点东西的动机,因为当我回家时,我正在做两件事。
54:21 I was, one, expressing a creativity that I couldn’t get out at work when I was just fixing bugs, and I was trying to make some extra money.
我是,一个,表达了一种创造力,这是我在修复错误时无法在工作中发挥出来的,并且我想赚一些额外的钱。
And so I wrote a Shell extension.
所以我写了一个 Shell 扩展。
Before I actually went to the Shell team, I started it, and that’s what led to my interest in going to the Shell team, based on an MSDN sample or MSJ at the time, an MSJ sample that I saw on how to, like, bring up a folder.
在我真正加入 Shell 团队之前,我就开始了它,这就是导致我有兴趣加入 Shell 团队的原因,基于当时的 MSDN 示例或 MSJ,我看到了一个关于如何打开文件夹的 MSJ 示例。
Well, once I had the very basic bring up a folder template, adding ZIP file support to it was just incremental all the way.
好吧,一旦我有了非常基本的文件夹模板,向其中添加 ZIP 文件支持就一直是增量的。
And I released it as a shareware product.
我将其作为共享软件产品发布。
54:50 I think it was 19.95 or 29.95, and I sold, whatever, a couple of hundreds or thousands of copies.
我想是 19.95 或 29.95,无论如何,我卖出了几百或几千本。
And one day, I’m getting ready for work, and I get a call, and it’s a lady, and she says, “Are you Dave Plummer?” I said, “Yeah.” She said, “Are you the guy that wrote Visual ZIP?” I said, “Yeah.” And she said, “Well, this is Betsy from Microsoft, and we’d like you to come by and come in and talk about an acquisition of it.” And I said, “Okay, what building are you in?” And she’s like, “What do you mean?” And I said, “Well, I’ll come by.” And she said, “Well, no, you got to talk to travel, and you got to talk to legal, and this all has to be set up.” And I’m like, “I don’t get it.
有一天,我正准备上班,接到一个电话,是一位女士,她说:“你是戴夫·普卢默吗?”我说:“是的。”她说:“你是 Visual ZIP 的作者吗?”我说:“是的。”她说:“嗯,我是微软的贝特西,我们希望你过来谈谈收购它的事情。”我说:“好吧,你在哪栋楼里?”她说:“你是什么意思?”我说:“好吧,我会过去的。”她说:“好吧,不,你必须和旅行部门谈谈,你必须和法律部门谈谈,这一切都必须安排好。”我想,“我不明白。
We both work at the same place.” Why can’t I just stop by?” I don’t know if I said that literally—
我们都在同一个地方工作。”为什么我不能顺便过来一下?”我不知道我说的是不是字面意思——
55:24 …but it was a few minutes of back and forth where we both realized that she didn’t know I worked there.
……但经过几分钟的来回交流,我们都意识到她不知道我在那里工作。
Yeah, that’s funny.
是的,这很有趣。
They had just cold-called the author and then found out that it was me.
他们刚刚给作者打了电话,然后发现是我。
Yeah, that’s funny.
是的,这很有趣。
And so they made me an offer on it, and it’s the kind of thing where if I don’t accept the offer, well, now my choices are: I can keep selling my own version and quit Microsoft, or I can stop selling my own version and work for Microsoft.
所以他们向我提出了一个要约,如果我不接受这个要约,那么现在我的选择是:我可以继续销售我自己的版本并退出微软,或者我可以停止销售我自己的版本并为微软工作。
55:32 Neither of those is great.
这些都不是很好。
I mean, I’d like to keep my job, of course, but I’d like to still— …have this income stream.
我的意思是,我当然想保住我的工作,但我仍然想——……拥有这样的收入来源。
And the other option was accept their offer, which is what I did.
另一种选择是接受他们的提议,这就是我所做的。
So then I bought a used ’93 red Corvette, and…
然后我买了一辆二手的 93 年红色克尔维特,然后……
And you got to continue building it internally?
你必须继续在内部构建它吗?
I did.
我做到了。
56:00 So we took a lot of features out, right, to simplify, because it had encryption, and it had a number of features that were common in ZIP programs of the day, but probably weren’t appropriate for Windows.
所以我们去掉了很多功能,对吧,为了简化,因为它有加密功能,并且它有许多在当时的 ZIP 程序中常见的功能,但可能不适合 Windows。
And, at the time, encryption was like a munition, so you couldn’t just add encryption willy-nilly to various parts of the operating system, so we took out some things like that.
而且,在当时,加密就像一种弹药,所以你不能随意地在操作系统的各个部分添加加密,所以我们去掉了一些类似的东西。
Multi-volume support, I think, was taken out just to simplify it.
我认为,取消多卷支持只是为了简化它。
Can you speak to ZIP in general, just the history of ZIP and, you know, compression, that whole thing?
您能谈谈 ZIP 的总体情况吗?仅介绍一下 ZIP 的历史以及压缩的整个过程吗?
Yeah, it was really borne out of the BBS era when people were dialing in on modems to download trialware and shareware and other things from BBSs online and to compress them.
是的,这确实是 BBS 时代的产物,当时人们通过调制解调器拨入,从在线 BBS 上下载试用软件、共享软件和其他东西并进行压缩。
56:29 Executables compressed about half their size.
可执行文件的大小压缩了大约一半。
Other stuff compresses much more.
其他东西压缩得更多。
But a guy named Phil Katz came up with a command-line program for MS-DOS called PKZIP, which was able to do compression of programs, and he has a rather tragic arc.
但是一个叫 Phil Katz 的人为 MS-DOS 设计了一个名为 PKZIP 的命令行程序,它能够对程序进行压缩,而他的故事却相当悲惨。
But it became ubiquitous in the entire PC industry, and pretty much everybody was using it.
但它在整个个人电脑行业变得无处不在,几乎每个人都在使用它。
So when Windows came out, there was no way to open up a ZIP file, but everybody had been creating them for a decade, and so that really drove the desire to have the ZIP support right in Windows.
因此,当 Windows 出现时,还没有办法打开 ZIP 文件,但十年来每个人都在创建 ZIP 文件,因此这确实推动了在 Windows 中提供 ZIP 支持的愿望。
Yeah, and that’s another piece of software that’s just kind of with us to this day.
是的,这是我们至今还使用的另一款软件。
Mm-hmm.
嗯嗯。
57:15 And it could be vastly improved, but, you know, it was written in the single-core days, so it doesn’t do anything multi-threaded.
它可以得到很大的改进,但是,你知道,它是在单核时代编写的,所以它不做任何多线程的事情。
And you’ve got a 96-core 7995, well, it uses one of them to unzip your file.
你有一个 96 核的 7995,它使用其中一个来解压你的文件。
What other awesome things were you a part of at Microsoft?
您在 Microsoft 还参与了哪些其他很棒的事情?
57:26 What other pieces of software?
还有哪些软件?
I worked on the initial prototypes of Windows Media Center.
我参与了 Windows Media Center 的初始原型工作。
57:32 So we did—
所以我们做了——
Nice.
不错。
…that in ’96, I believe.
……我相信是在 96 年。
57:35 And we didn’t have, at the time, any sources, so we had like a CD of MPEG video files of Raging Rudolph and I think the original South Park video— …the Christmas one, which is all wildly inappropriate in the workplace today, but— it’s all the content we had until we got actually…
当时我们没有任何来源,所以我们有一张《愤怒的鲁道夫》的 MPEG 视频文件 CD,我认为最初的《南方公园》视频——……圣诞节的视频,这在今天的工作场所是非常不合适的,但是——这是我们拥有的所有内容,直到我们真正得到……
We had them put a satellite dish on the roof, a DSS, whatever the 18-inch dish is, because we couldn’t get cable to the building.
我们让他们在屋顶上安装了一个卫星天线,一个 DSS,无论 18 英寸的天线是什么,因为我们无法通过电缆连接到建筑物。
And so we built up this thing that would eventually look a lot like Media Center, and it was distance viewing UI for Windows, so you could sit with a remote control on a desktop and have, you know…
所以我们建立了这个东西,最终看起来很像媒体中心,它是 Windows 的远距离查看 UI,所以你可以坐在桌面上使用遥控器,然后,你知道……
The current Start menu is not great at 20 feet away.
当前的“开始”菜单在 20 英尺外的效果不太好。
Tell me the story of the infamous blue screen of death.
告诉我臭名昭著的蓝屏死机的故事。
What it is is when Windows has no other option, when the kernel gets into a state where something illegal has happened, so let’s say a device driver is trying to write to a piece of memory it doesn’t own or is trying to free a piece of memory twice, something that just cannot happen, and the kernel has no other option, it will shut the machine down to save your work.
当Windows没有其他选择时,当内核进入发生非法事件的状态时,比方说,设备驱动程序正在尝试写入它不拥有的一块内存,或者试图两次释放一块内存,这是不可能发生的事情,并且内核没有其他选择,它将关闭机器以保存您的工作。
58:17 And…
还有……
Well, not save, but prevent further damage, and it puts up a blue screen and it prints out the stack information, depending how your settings are.
好吧,不保存,但防止进一步损坏,它会显示蓝屏并打印出堆栈信息,具体取决于您的设置。
Sometimes it’s just a sad face.
有时只是一张悲伤的脸。
In the current Windows.
在当前的Windows中。
I wonder what the first version of Windows when the blue screen came to be.
我想知道蓝屏出现时Windows的第一个版本是什么。
So, Windows 3 had a blue screen- but it’s completely unrelated to the blue screen in Windows NT.
因此,Windows 3 出现了蓝屏,但它与 Windows NT 中的蓝屏完全无关。
58:51 And I talked to the guy who wrote the blue screen in Windows NT.
我和在 Windows NT 中编写蓝屏的人交谈过。
His name’s Jon Viert, and the reason he picked white on blue, I had thought, I’d always heard it was because in the labs, you could walk through a lab where we have 50 PCs all running stressed.
他的名字叫乔恩·维尔特(Jon Viert),他之所以选择蓝底白字,我原以为,我一直听说这是因为在实验室里,你可以走过一个实验室,那里有 50 台电脑都在承受压力。
“Oh, that one’s got a blue screen.
“哦,那个有蓝屏。
It’s—” “crashed.” It wasn’t that simple.
它——”“坠毁了。”事情没那么简单。
It was just the MIPS firmware that he was building it on was blue on white, and Visual SlickEdit that he was using as an editor was also the same color scheme.
只是他构建它的 MIPS 固件是蓝底白字,他用作编辑器的 Visual SlickEdit 也是相同的配色方案。
And so you could code, boot, crash, and reboot, all in the same color scheme.
因此您可以使用相同的配色方案进行编码、启动、崩溃和重新启动。
Why do you think so many problems with computers can be solved by turning it off and turning it back on again?
为什么您认为计算机的许多问题可以通过关闭并重新打开来解决?
I think there’s two major things that happen with computers as you run them over time.
我认为随着时间的推移,计算机会发生两件主要的事情。
59:34 One is memory gets used and not freed.
一是内存被使用而不被释放。
And so it accumulates on the heap or in the swap file or wherever, and things get sluggish.
因此它会累积在堆上或交换文件中或任何地方,并且事情会变得缓慢。
And the other is, code gets into a state that the developers didn’t anticipate or didn’t test very well.
另一个是,代码进入了开发人员没有预料到或没有测试得很好的状态。
And maybe that’s a rare state, but now that Notepad or Word or Excel is in that state, your system is goofy.
也许这是一种罕见的状态,但既然记事本、Word 或 Excel 处于这种状态,你的系统就会变得愚蠢。
So if you just reboot the thing or shut it down or restart it, you’re getting a fresh state and there are no memory leaks, so it covers a lot of sins, basically.
因此,如果您只是重新启动该设备或关闭它或重新启动它,您将获得一个全新的状态并且没有内存泄漏,因此它基本上涵盖了很多错误。
And the intricate ways that several pieces of software in a goofy state interact with each other creates sort of a meta goofy state that just the entire system starts acting a little weird.
处于愚蠢状态的多个软件相互交互的复杂方式创建了一种元愚蠢状态,整个系统开始表现得有点奇怪。
1:00:03 And then somehow fixes it.
然后以某种方式修复它。
What are some of the best and the worst code you’ve seen during that time at Microsoft?
您在 Microsoft 期间见过的最好和最差的代码是什么?
What’s some beautiful code and what’s some ugly code that pops to memory?
什么是一些漂亮的代码,什么是一些会突然出现在内存中的丑陋代码?
In terms of beautiful code, there’s two that stand out for me.
就漂亮的代码而言,有两个对我来说很突出。
1:00:31 One is the kernel in general.
一是一般的内核。
When you get down into the Windows kernel-
当你深入了解 Windows 内核时——
1:00:38 …in the actual NT APIs and stuff, it’s very well written, and it’s written to a standard that you don’t see on the user side, or at least is uncommon on the user side.
...在实际的 NT API 和其他东西中,它写得非常好,并且它是按照您在用户端看不到的标准编写的,或者至少在用户端不常见。
On the user side, probably the coolest code I remember seeing was a guy named Bob Day, who wrote a named pipe implementation to eliminate the use of shared memory.
在用户方面,我记得见过的最酷的代码可能是一个名叫 Bob Day 的人,他编写了一个命名管道实现来消除共享内存的使用。
So Windows 95 had a big shared segment amongst all the shell processes where it would store stuff that was common to all the shells.
因此,Windows 95 在所有 shell 进程之间有一个很大的共享段,其中存储所有 shell 公用的内容。
We didn’t want to do that.
我们不想那样做。
Shared memory is a bad idea on NT at an industrial level, so he came up with a way to do it with named pipes, and I remember doing a code review on it, and it was very impressive to walk through the code.
在工业层面上,共享内存对 NT 来说是一个坏主意,所以他想出了一种用命名管道来实现的方法,我记得对它进行了代码审查,浏览代码令人印象深刻。
1:01:15 It was one of those things where it was like, “Oh, I don’t think I could have done that if I was trying.”
这是其中一件事,就像“哦,如果我尝试的话,我想我不可能做到这一点。”
Who’s the greatest programmer you’ve ever encountered?
谁是你遇到过的最伟大的程序员?
You know what?
你知道吗?
1:01:22 I don’t think there is any one.
我认为没有人。
I’ve met a number of great programmers, but I’ll tell you one story that impressed me a lot.
我见过很多伟大的程序员,但我要告诉你一个给我留下深刻印象的故事。
When I was brand new at the company, I’d been there like six weeks, and I’m working on this OLE Presentation Cache that I’d mentioned earlier.
当我刚进公司时,我已经在那里待了大约六个星期,我正在研究我之前提到的 OLE 演示缓存。
And I’m on Windows 95, and I’ve got Excel inserted into Word, and I’m in the kernel debugger, and something’s going wrong in the scheduler.
我使用的是 Windows 95,我已将 Excel 插入到 Word 中,并且处于内核调试器中,调度程序中出现了问题。
And I’ve been there, you know, I’ve barely written any x86 code, and I’m looking at the Windows scheduler, trying to figure out why my thing is deadlocked.
我也经历过这种情况,你知道,我几乎没有编写任何 x86 代码,我正在查看 Windows 调度程序,试图找出为什么我的事情陷入僵局。
1:01:49 And eventually, I get stuck, so I’m kind of out of my element, and I send an email to the Windows 95 kernel team and say, “Could you send somebody by?” So about 10 minutes later, this developer strolls in, and they’re just holding a null modem cable, which is to connect my two machines together so they can debug one with the other in case I didn’t have it, but it was already set up.
最终,我陷入了困境,所以我有点不适应,我向 Windows 95 内核团队发送了一封电子邮件并说:“您可以派人过去吗?”大约 10 分钟后,这位开发人员走进来,他们只拿着一根空调制解调器电缆,用于将我的两台机器连接在一起,以便他们可以调试一台与另一台,以防万一我没有,但它已经设置好了。
And so they sit down, and they’re using WinDbg, which is a horrible debugger.
于是他们坐下来,使用 WinDbg,这是一个糟糕的调试器。
It’s just accursed.
这只是被诅咒了。
1:02:10 But they’re very, very competent with it, and they are just blasting through the call stacks, and they’re checking all these objects in the kernel and trying to find out who’s waiting on what and why things are deadlocked, and what things are signaled and what’s not.
但他们对此非常非常有能力,他们只是爆破调用堆栈,检查内核中的所有这些对象,并试图找出谁在等待什么以及为什么事情会陷入僵局,以及哪些事情已发出信号,哪些没有发出信号。
And it’s just this quicksilver ballet of call stacks flying by, and I’m watching this, and I’m pretty blown away because I’m a good programmer, but this person is an amazing debugger, and I’ve never seen a performance like this.
这只是调用堆栈的水银芭蕾飞过,我正在看着这个,我非常震惊,因为我是一个优秀的程序员,但这个人是一个令人惊叹的调试器,我从未见过这样的性能。
And about five minutes in, I just hear, “Oh, I see.” And then they disconnected and got up and left.
大约五分钟后,我只听到,“哦,我明白了。”然后他们就断开了联系,起身离开了。
And that was Laura Butler, who became a distinguished engineer at Microsoft.
这就是劳拉·巴特勒(Laura Butler),她成为了微软的杰出工程师。
I think she may still be; I’m not sure if she’s retired or not, but…
我想她可能仍然是;我不确定她是否退休了,但是……
1:02:49 So she kind of set my template for, you know, what Microsoft developers were like when they’re debugging and what kernel developers were like, and even what female developers were like, because I had such a small sample set.
所以她为我设置了模板,你知道,微软开发人员在调试时是什么样子,内核开发人员是什么样子,甚至女性开发人员是什么样子,因为我的样本集很小。
But it was a very high standard, so…
但这是一个非常高的标准,所以……
There are few things I love in life more than people who are ultra-competent at anything, really.
生活中我最喜欢的事情莫过于那些在任何事情上都超有能力的人,真的。
1:03:02 But the lower level, the better, in the engineering space.
但在工程领域,级别越低越好。
They’re able to, for example, run or maintain the computer infrastructure.
例如,他们能够运行或维护计算机基础设施。
So not the individual computer, but the computers communicating and working together.
所以不是单独的计算机,而是计算机之间的通信和协同工作。
Those people are just magicians.
那些人只是魔法师。
It’s so inspiring to make…
这真是太鼓舞人心了……
It’s like watching a great carpenter or…
这就像观看一位伟大的木匠或……
I love anything done really, really well.
我喜欢任何做得非常非常好的事情。
Yeah, it’s beautiful to see.
是的,很漂亮。
1:03:30 It’s beautiful to see that humans are able to accomplish that.
很高兴看到人类能够实现这一目标。
Even in civil engineering, when I look at bridges, it’s like the number of people that had to come together to build that, and now millions of people use it every single day.
即使在土木工程领域,当我看到桥梁时,就像必须聚集在一起建造桥梁的人数一样,现在每天都有数百万人使用它。
With software, sometimes you don’t get to see visually just the number of people impacted by a thing.
使用软件,有时您无法仅直观地看到受某件事影响的人数。
So imagine how many people are impacted by Linux and all the different open-source systems that make up Linux.
想象一下有多少人受到 Linux 以及组成 Linux 的所有不同开源系统的影响。
It’s incredible.
太不可思议了。
And Task Manager is an example of a piece of software.
任务管理器就是一个软件的例子。
Just how many people have used that over the years, and how many times?
多年来有多少人使用过它,有多少次?
It’s crazy.
太疯狂了。
It’s probably, is it billions?
大概是,是几十亿吧?
Billions have used that.
数十亿人已经使用过它。
Yeah, two billion a month or something.
是啊,每月二十亿之类的。
Two billion?
二十亿?
Something like that.
类似的事情。
1:04:14 I’ve seen the metrics, and it’s up there.
我已经看到了指标,它就在那里。
Oh, crazy to think.
哦,想想都疯狂。
It is.
是的。
1:04:18 What I love about it, though, and I’m sure you’ve had this experience, where sometimes you design a piece of software, and it’s complex, and you get it working in your head, and you get the plumbing working, and you know how it’s going to run and flow, and then eventually you write the code, and the code does that thing that you had pictured in your head.
不过,我喜欢它的原因是,我相信你也有过这样的经历,有时你设计一个软件,它很复杂,你让它在你的头脑中工作,你让管道工作,你知道它将如何运行和流动,然后最终你编写代码,代码完成你在头脑中想象的事情。
And now there are billions of copies of that thing that I had in my head running on billions of people and machines, and that in itself is really cool to me.
现在,我脑海中的那个东西有数十亿个副本在数十亿人和机器上运行,这本身对我来说真的很酷。
It’s not a vanity thing so much as I’m impressed by it, I guess.
我想,这并不是一件虚荣的事情,而是让我印象深刻。
How’s your programming evolved over the years?
这些年来你的编程是如何发展的?
I take a lot more care with complexity these days.
这些天我更加关注复杂性。
1:04:50 So it used to be you would write code and just keep writing code, writing code, and then at some point, go back and clean it up.
所以过去你会编写代码,然后继续编写代码,编写代码,然后在某个时候返回并清理它。
Well, I write the other way now.
好吧,我现在用另一种方式写。
I try to write really clean initial skeletal code and then flesh it out because I have been involved in too many projects of my own and of other people’s making where things get so messed up that they’re just not fixable.
我尝试编写非常干净的初始框架代码,然后充实它,因为我参与了太多我自己和其他人制作的项目,这些项目变得非常混乱,以至于无法修复。
And so sometimes the work you put in upfront pays off, you know?
所以有时候你前期投入的工作会得到回报,你知道吗?
What programming languages have you used over the years?
多年来您使用过哪些编程语言?
1:05:18 What’s been your main go-tos?
你主要做什么?
For me, it’s been C++ and assembly language.
对我来说,它是 C++ 和汇编语言。
And still to this day, C++ is really what you lean on?
直到今天,C++ 仍然是您所依赖的吗?
Yeah, right now I’m 100% Lua and Python, but that’s just a side project I’m working on.
是的,现在我 100% 使用 Lua 和 Python,但这只是我正在做的一个业余项目。
Can you speak to the Lua and the Python detour that you took, and what do you love about C++?
您能谈谈您所走过的 Lua 和 Python 弯路吗?您喜欢 C++ 的哪些方面?
What I’m doing is I wanted to build an AI to play the game Tempest.
我正在做的是我想构建一个人工智能来玩 Tempest 游戏。
1:05:40 That’s the old Atari game, Tempest.
那是古老的 Atari 游戏《Tempest》。
This is a game that I actually hold the world record on.
这是一款我实际上保持着世界纪录的游戏。
Can you take me to this Atari game, Tempest?
你能带我去玩这款 Atari 游戏《Tempest》吗?
1:05:49 Okay, Atari Tempest.
好吧,雅达利风暴。
What kind of game is this?
这是什么游戏?
So it’s a 3D vector game from 1980.
这是一款 1980 年的 3D 矢量游戏。
Okay.
好的。
And it’s a very complex game.
这是一个非常复杂的游戏。
1:05:59 You’ve got full 360 degrees of motion, you have eight shots on the screen, there are like 11 enemies, there are spikes.
你有完整的 360 度运动,屏幕上有 8 个镜头,大约有 11 个敌人,还有尖刺。
So it’s a very complex game.
所以这是一个非常复杂的游戏。
It’s not like trying to do Pong or something.
这不像尝试打乒乓球之类的。
And what I wound up doing was first taking the ROMs out of the machine and reverse engineering the code.
我最终要做的就是首先将 ROM 从机器中取出并对代码进行逆向工程。
So I got a sense of where all the code in Tempest lives and what it does, where the zero-page variables are, where things live.
因此,我了解了 Tempest 中所有代码的位置及其用途、零页变量的位置以及事物的位置。
And yeah, there’s one.
是的,有一个。
So, oh, wow.
所以,哦,哇。
1:06:23 That’s a very geometric…
这是一个非常几何的...
Okay, what can you explain to me about the gameplay?
好吧,你能向我解释一下游戏玩法吗?
Yeah, that’s me playing the game right there.
是的,那是我正在玩的游戏。
This is literally you playing?
这真的是你在玩吗?
This is me.
这就是我。
1:06:31 Dave is the high score, you’ll see, in the top center there.
你会看到,戴夫是最高分,位于顶部中心。
Can you explain to me what I’m looking at?
你能向我解释一下我在看什么吗?
Well, it’s a 3D geometric world.
嗯,这是一个 3D 几何世界。
1:06:36 It’s basically 3D Space Invaders wrapped into a shape, and the enemies descend from the center of the tube towards the outside, and they all have different behaviors.
它基本上是 3D 太空入侵者包裹成一个形状,敌人从管子的中心向外面下降,他们都有不同的行为。
Wow.
哇。
So long story short, it’s a fairly complicated game to play well, and I wanted to see if I could get an AI to do it.
长话短说,这是一款玩起来相当复杂的游戏,我想看看是否可以让人工智能来完成它。
1:06:51 So once I had figured out where all the interesting parts of the game lived in memory, I added them as parameters and built a Lua app to extract everything from the game’s memory as it’s running and puts them together as parameters, which sends it to the Python side over a socket, and then the Python side does RL learning.
因此,一旦我弄清楚了游戏中所有有趣的部分在内存中的位置,我将它们添加为参数,并构建了一个 Lua 应用程序,以在游戏运行时从游戏内存中提取所有内容,并将它们组合在一起作为参数,通过套接字将其发送到 Python 端,然后 Python 端进行 RL 学习。
I’m using a dueling Deep-Q, and I believe…
我正在使用决斗 Deep-Q,我相信……
Two with two head and tail, and they chase each other and it can play up to about level 36 now, which is way better than most humans.
两个人有两个头和尾巴,互相追逐,现在可以玩到36级左右,这比大多数人类要好得多。
But that’s level 96, so it’s got a ways to go yet.
但那是96级,所以还有很长的路要走。
And you’re the red thing shooting?
你就是那个正在射击的红色东西?
Yes.
是的。
You’re controlling the red thing that’s shooting?
你正在控制正在射击的红色物体?
1:07:30 Okay.
好的。
What are the options?
有哪些选择?
You can just move clockwise or counterclockwise and then you could shoot.
您只需顺时针或逆时针移动即可射击。
Yeah, so you have a rotating knob- …which is an optical spinner, and you have a fire button and a super zapper for emergencies.
是的,所以你有一个旋转旋钮——……这是一个光学旋转器,还有一个点火按钮和一个用于紧急情况的超级灭火器。
1:07:38 But that’s it.
但就是这样。
Fire and rotate, basically.
基本上,开火并旋转。
All right, let’s get back to your favorite C++.
好吧,让我们回到你最喜欢的 C++。
1:07:46 What do you love about C++?
你喜欢 C++ 的什么?
Why have you stayed with it for all these years?
为什么这么多年你一直坚持下去?
Because it allows me to encapsulate my favorite C code in classes.
因为它允许我将我最喜欢的 C 代码封装在类中。
1:07:51 I’m not a big-
我不是一个大-
You’re really a C guy.
你真是个C型的人。
Well, I actually-
嗯,其实我——
Okay, I got you.
好的,我找到你了。
Yeah, I’m really a C guy.
是的,我确实是一个C型的人。
1:07:58 Although I write two kinds of C++.
虽然我写的是两种C++。
I write really modern C++ 20 using no pointers, no strings, or no character strings, so there are…
我编写了真正现代的 C++ 20,没有使用指针、没有字符串或没有字符串,所以有……
you know, it’s basically as safe as Rust as far as I’m concerned.
你知道,就我而言,它基本上和 Rust 一样安全。
Or I write C with classes, which is standard C, but, you know, with polymorphism and encapsulation.
或者我用类编写 C,这是标准 C,但是,你知道,具有多态性和封装性。
That’s most of what my code is, but I try to do both.
这就是我的代码的大部分内容,但我尝试两者兼而有之。
Let me ask you about the whole stretch of time that we kind of skipped over.
让我问一下我们跳过的整个时间段。
1:08:23 You built a lot of software over the years after Microsoft, on the side while at Microsoft and afterwards, a lot of successful pieces of software.
在离开微软之后的这些年里,你在微软兼职期间开发了很多软件,之后又开发了很多成功的软件。
One of your companies was Software Online, and it got into trouble for nagging users too much, I guess-
你们的公司之一是Software Online,它因为过于烦扰用户而陷入了麻烦,我猜——
Yep.
是的。
…
……
1:08:44 to upgrade.
升级。
That’s what I saw.
这就是我所看到的。
What was all that about and what did you learn from that experience?
那是关于什么的?您从这次经历中学到了什么?
That was…
那是……
1:08:49 Other than, like, family health scares, you know, when kids are sick, that was the scariest time of my life.
除了家庭健康恐慌之外,你知道,当孩子生病时,那是我一生中最可怕的时刻。
And the period leading up to it was one of the most invigorating and exciting, because what had happened was while I was at Microsoft, I had written all these shareware utilities and I was selling them on the side and sold one to Microsoft, as we talked about, and they started to do really well.
在此之前的时期是最令人振奋和令人兴奋的时期之一,因为发生的事情是当我在微软时,我编写了所有这些共享软件实用程序,我一边出售它们,一边将其中的一个卖给了微软,正如我们所说,他们开始做得非常好。
And then I discovered banner advertising online.
然后我发现了在线横幅广告。
So I signed up with my credit card for a site, I think it was called Fast Click, and you could say, “I will pay this much for a banner ad impression.
所以我用信用卡注册了一个网站,我认为它被称为“Fast Click”,你可以说,“我愿意为横幅广告印象支付这么多钱。
Here’s my banner.” And it would rotate it in.
这是我的横幅。”它会将其旋转进去。
And I didn’t set a cap on it.
而且我没有设定上限。
I came back on Monday and I saw I had spent like $10,000 in banner ads.
周一我回来时发现我在横幅广告上花了大约 10,000 美元。
1:09:26 I was like, “Holy crap.
我当时想,“天哪。
How am I going to explain this to my wife?
我该如何向我的妻子解释这件事呢?
This is a bug, it’s a mistake, it was my fault.” And I looked at the sales and it had made like $38,000 worth of sales.
这是一个错误,这是一个错误,这是我的错。”我查看了销售额,销售额约为 38,000 美元。
And I was like, “Holy cow.
我当时想,“天哪。
So all I have to do is scale that at some point,” and basically did that for the next several years.
所以我所要做的就是在某个时候扩大规模”,并且在接下来的几年里基本上都是这样做的。
And the reason we got in trouble was the AG came in and they had…
我们遇到麻烦的原因是 AG 进来了,他们……
well, I was blown away because they had like 12 court claims of action and 10 of them were outrageous, which to me as a person with autism, I couldn’t get past.
好吧,我被震惊了,因为他们有 12 项法庭诉讼主张,其中 10 项是令人愤慨的,这对我作为一个患有自闭症的人来说,是无法克服的。
It’s like, I know these 10 things are absolutely not true.
就像,我知道这十件事绝对不是真的。
Why are we even here talking about them?
为什么我们还要在这里谈论它们?
And then all they care are the two things that might be true.
然后他们只关心这两件事可能是真的。
1:10:03 And the two things that might be true were that it was a 30-day trial version, and after your 30 days were up, it would then, if you continued to run it and not buy it or uninstall it, it would remind you once a day.
有两件事可能是真的,那就是它是一个 30 天的试用版,在你的 30 天结束后,如果你继续运行它而不购买它或卸载它,它会每天提醒你一次。
Not like every 10 minutes, but once a day or every time you booted your computer, but most once a day.
不是每 10 分钟一次,而是每天一次,或者每次启动计算机时一次,但大多数情况下是每天一次。
And the AG contended that was too often; it amounted to spam.
总检察长认为这种情况太频繁了;这相当于垃圾邮件。
And so we agreed with them to limit it to once a week, I believe.
所以我们同意他们将其限制为每周一次,我相信。
And, you know, there had to be a button to just uninstall with one click.
而且,您知道,必须有一个按钮可以一键卸载。
So we did those kinds of things.
所以我们做了这些事情。
The other one was, in those days, when somebody bought a piece of software, even if they bought it online and got a download, they fully expected there would be media showing up at their house.
另一个是,在那些日子里,当有人购买一个软件时,即使他们在网上购买并下载,他们也完全希望有媒体出现在他们的家里。
1:10:38 So in the year 2001, which were 2001-2003 we’re talking about, if you bought software, there was an expectation that a disc would show up.
所以在 2001 年,也就是我们所说的 2001-2003 年,如果你购买了软件,就会期望会出现一张光盘。
And so we made that the default, was to fulfill by disc and it was $3.95 or $4.95 extra, and it was very obvious, but it was a checkbox and it was turned on to ship the disc to your house.
因此,我们将默认设置为通过光盘履行,额外费用为 3.95 美元或 4.95 美元,这非常明显,但它是一个复选框,打开后会将光盘运送到您家。
Because we found if we didn’t do that, we got all these calls, people would wait, they’d order, two weeks later call, “Where’s my disc?” And we’d look, “Oh, you didn’t order a disc.” “Well, cancel it all.
因为我们发现,如果我们不这样做,我们就会接到所有这些电话,人们会等待,他们会订购,两周后打电话,“我的光盘在哪里?”我们会看,“哦,你没有订购光盘。” “好吧,全部取消吧。
1:11:04 I don’t want it because I’m not waiting for it.” And so we got a lot of returns and we didn’t include the disc, and so we decided to include the disc, but that is an a priori violation of negative affirmation billing in Washington State because you’re giving them a default higher purchase price.
我不想要它,因为我没有等待它。”所以我们得到了很多回报,但我们没有包括光盘,所以我们决定包括光盘,但这先验地违反了华盛顿州的负面肯定计费,因为你给了他们默认的更高的购买价格。
What about the software user relationship?
软件用户关系如何?
1:11:18 It’s interesting, like, how often to annoy the user with a thing.
这很有趣,比如,经常用某件事惹恼用户。
Right?
正确的?
If you never mention anything, they might never discover something they actually want.
如果你从不提及任何事情,他们可能永远不会发现他们真正想要的东西。
But if you mention it too much, then they can get annoyed.
但如果你提得太多,他们就会生气。
Yeah.
是的。
1:11:46 And what you don’t want is you don’t want them to have to do it or buy it or do something to get rid of it.
你不想要的是你不希望他们必须这样做或购买它或做一些事情来摆脱它。
That’s one of the things that bothers me with…
这是困扰我的事情之一……
1:11:51 I think Windows does that a little bit still to this day, where it bothers me by asking me certain questions, like, “Do you want this?” For example, I really don’t like to use my Microsoft account to log into Windows.
我认为 Windows 至今仍然这样做,它会问我某些问题,例如“你想要这个吗?”,这让我很困扰。例如,我真的不喜欢使用我的微软帐户登录Windows。
I think now it’s basically required.
我认为现在基本上是需要的。
I think there’s just no way around it.
我认为没有办法解决这个问题。
But they make it so difficult to not do that.
但他们很难不这样做。
It’s almost like they think they can just trick me into…
就好像他们认为他们可以欺骗我……
It really does feel like I’m getting tricked into not doing what I want to do.
确实感觉我被欺骗了,没有做我想做的事。
1:12:32 It’s…
这是……
I have to, like, think, “Okay, I need to click skip,” and then it’ll do something, “Are you sure?” Like, I have to use too much of my brain to do the thing I need…
我必须想,“好吧,我需要点击跳过”,然后它会做一些事情,“你确定吗?”就像,我必须用太多的大脑来做我需要的事情......
As an interface, you know what I’m trying to do.
作为一个界面,你知道我想做什么。
You’re trying to trick me into not doing the thing I want to do.
你试图欺骗我不做我想做的事。
And what I hate about that is, like…
我讨厌的是,就像……
It’s probably effective, sure, for converting people, but it’s really not good long-term for taking care of the interests of the user.
当然,这对于转化人们来说可能是有效的,但从长远来看,它对于照顾用户的利益来说确实不好。
Yeah, the one that really throws me is the user recommended settings.
是的,真正让我困惑的是用户推荐的设置。
1:13:06 So I just did a Windows upgrade, I went through the steps, and, you know, I’m going through this new dialog or wizard, and “use recommended settings” sounds like the thing you should do, but I’m pretty sure that resets you to using the Edge browser and…
所以我刚刚进行了 Windows 升级,完成了这些步骤,而且,你知道,我正在经历这个新的对话框或向导,“使用推荐的设置”听起来像是你应该做的事情,但我很确定这会将你重置为使用 Edge 浏览器,并且......
…And all this other stuff.
……还有所有其他的东西。
So yeah, recommended by them, but not recommended for me.
所以是的,他们推荐的,但不推荐给我。
And that’s the difficulty.
这就是困难所在。
That’s a really good example.
这真是一个很好的例子。
1:13:25 What effect do you think that does in resetting the default browser to Edge?
您认为将默认浏览器重置为 Edge 会产生什么影响?
Do you think you’re going to really earn the loyalty of a user if you do that?
您认为如果这样做就能真正赢得用户的忠诚度吗?
Don’t you think that there are actually…
你不觉得其实有……
What you’re going to create…
你要创建什么......
You’re going to create some passive loyalty from some user base, so on the metrics, it might actually look like you’ve increased the number of Edge users, but really, it’s that reputation hit you take over time where it just forms where the Edge is the thing that you can’t quite trust.
你将从一些用户群中建立一些被动的忠诚度,所以从指标上看,你实际上可能增加了 Edge 用户的数量,但实际上,随着时间的推移,你的声誉受到了打击,它只是形成了你不能完全信任 Edge 的地方。
Unfairly, because I think Edge is a really great browser, but just this unpleasant feeling.
不公平,因为我认为 Edge 确实是一个很棒的浏览器,但就是这种不愉快的感觉。
I don’t know what that is, and…
我不知道那是什么,而且……
Well, you don’t want your operating system to be an adversary, right?
好吧,您不希望您的操作系统成为对手,对吗?
1:14:10 And sometimes Windows can feel adversarial.
有时 Windows 会让人感觉有敌意。
Like, it doesn’t have your best interests at heart, and that bugs me to a certain extent.
就像,它并没有把你的最大利益放在心上,这在某种程度上让我烦恼。
I mean, we have this feeling, I think we just have general distrust when somebody is super nice to you and is basically selling something.
我的意思是,我们有这种感觉,我认为当有人对你超级好并且基本上在卖东西时,我们只是普遍不信任。
1:14:20 There’s a certain aura about that kind of interaction.
这种互动有一种特定的氛围。
And when an operating system is interacting with you in that way, it’s like…
当操作系统以这种方式与你交互时,就像……
Yeah, I would much rather pay $199 for Windows Pro per year, or 20 bucks a month, or whatever the fee schedule would be, and not be upsold any further and not have my data monetized, and those kinds of things, so…
是的,我宁愿每年支付 199 美元购买 Windows Pro,或者每月 20 美元,或者任何费用表,而不是进一步向上销售,也不让我的数据货币化,以及诸如此类的事情,所以......
Did you learn about finding the right balance from that?
您是否从中学到了如何找到适当的平衡?
Yeah, I mean, I’m way more self-aware now.
是的,我的意思是,我现在更有自我意识了。
1:14:50 There are things I would do much differently, particularly in terms of the advertising.
有些事情我会做很多不同的事情,特别是在广告方面。
I always figured…
我一直以为……
There’s a guy named David Ogilvy, and he did this ad long ago for the Volkswagen Beetle where it had a picture of a Beetle, black and white, and it just said, “Lemon,” and there was a block of text below it.
有一个叫大卫·奥格威的人,他很久以前为大众甲壳虫做了这个广告,广告里有一张甲壳虫的图片,黑白的,上面只是写着“柠檬”,下面还有一段文字。
So it’s clickbait-y and then informational, and I always tried to follow that pattern.
所以它是标题诱饵,然后是信息性的,我总是试图遵循这种模式。
But there are three ways to sell something, I think, and you can use sex, fear, or greed.
但我认为,出售东西有三种方式,你可以使用性、恐惧或贪婪。
Sex doesn’t work really well for software.
性对于软件来说并不是很有效。
Fear works well for antivirus and stuff, but not so much for optimization and make your computer faster utilities.
恐惧对于防病毒和其他东西很有效,但对于优化和让你的计算机更快的实用程序却不太有效。
1:15:24 And so I always tried to cater to the greed aspect.
所以我总是试图迎合贪婪的一面。
You know, make your computer faster, get more RAM available, whatever the value proposition is.
你知道,无论价值主张是什么,让你的计算机更快,获得更多可用内存。
But I realize now that I’m looking at that with my knowledge, and as an autistic person, I now have an appreciation that other people are going to look at it with their background knowledge and may conclude something different.
但我现在意识到,我正在用我的知识来看待这个问题,作为一个自闭症患者,我现在很欣赏其他人会用他们的背景知识来看待它,并可能得出不同的结论。
So I might be scaring people where I was just trying to incentivize or get their greed instinct going.
所以我可能会吓到那些我只是想激励或激发他们贪婪本能的人。
So I’d be more sensitive about that kind of thing today.
所以我今天对这类事情会更加敏感。
Ridiculous question, but what do you think are the top three Windows operating systems?
可笑的问题,但您认为排名前三的 Windows 操作系统是什么?
1:15:50 The different versions?
不同版本?
I’m a fan of Windows 2000 server.
我是 Windows 2000 服务器的粉丝。
1:15:59 That’s
那是
Really?
真的吗?
1:16:02 Okay.
好的。
…
……
Wait, wait, pl-
等等,等等,PL-
That’s what I ran my business on and I ran my brother’s business.
这就是我经营我的生意和我兄弟的生意的基础。
1:16:04 We set up multiple salons all VPNed to one another and using the SQL Server and…
我们建立了多个沙龙,所有沙龙都通过 VPN 连接并使用 SQL Server 和……
I don’t know if I ever got to experience Windows 2000 server, so when was XP out?
我不知道我是否曾经体验过Windows 2000 server,那么XP是什么时候出来的呢?
2001.
2001年。
What was before XP?
XP之前是什么?
2000.
2000年。
2000.
2000年。
1:16:21 Was that good?
这样好吗?
Yeah, I liked it.
是的,我喜欢它。
1:16:23 I mean, it doesn’t have the visual flash that came with XP, but as a system, and especially as a server operating system, it was great for the day.
我的意思是,它没有 XP 附带的视觉 Flash,但作为一个系统,特别是作为一个服务器操作系统,它当时非常棒。
But then XP was, hmm, I would say probably from a completeness perspective and impact and how long it lasted, it was probably the greatest Windows for consumers, the operating system.
但当时 XP,嗯,我想说,也许从完整性的角度、影响以及它持续的时间来看,它可能是消费者最伟大的 Windows 操作系统。
I would think so.
我也这么认为。
1:16:44 It’s certainly got the longevity for it.
它确实有很长的寿命。
There are people who still run it.
仍然有人在运营它。
I mean, I’d still run it on stuff if you could get security updates ’cause it does 98% of what I need Windows to do, but…
我的意思是,如果你能获得安全更新,我仍然会在东西上运行它,因为它可以完成我需要 Windows 完成的 98% 的任务,但是……
Yeah, that was incredible.
是的,那太不可思议了。
1:16:52 I mean, so Windows 95, I’ll probably put Windows XP as the number one for me and then Windows 95 two.
我的意思是,对于 Windows 95,我可能会将 Windows XP 列为第一,然后 Windows 95 第二。
What’s your metric?
你的衡量标准是什么?
1:17:01 Personal preference or industry impact or…
个人偏好或行业影响或……
Industry impact, stability, just there’s certain, like, just like with programming, you have code smell.
行业影响、稳定性,就像编程一样,你有代码味道。
1:17:05 Just, like, how well all the features were orchestrated together, how there’s a design philosophy that permeated the whole thing and was consistent.
就像,所有功能如何精心编排在一起,如何有一种设计理念渗透到整个事物中并且保持一致。
Not too many features, not dumbed down too much.
没有太多的功能,也没有被简化太多。
Right.
正确的。
But not overcomplicated.
但并不过分复杂。
1:17:27 How often it crashes to blue screen.
崩溃并蓝屏的频率。
All of those things.
所有这些事情。
I don’t know if it’s a very apt description, but I think of it as crisp.
我不知道这是否是一个非常恰当的描述,但我认为它很清晰。
1:17:33 So there’s not a lot of rough edges.
所以没有太多粗糙的边缘。
It does what it does, does it snappy and…
它做了它该做的事情,它很敏捷并且......
You said you play slot machines, and given that you love hardware and software, you’re the perfect person to ask, how do slot machines work?
你说你玩老虎机,鉴于你热爱硬件和软件,你是最适合问老虎机如何工作的人?
Well, I’m happy to ruin them for you.
好吧,我很乐意为你毁掉它们。
Okay.
好的。
So- It’s ironic to me that I play slot machines because I know it’s a losing bet overall, but there’s a whole dopamine feast there of bright lights and high contrast colors that I enjoy.
所以-对我来说,玩老虎机是很讽刺的,因为我知道这总体上是一场失败的赌注,但那里有我喜欢的明亮灯光和高对比度颜色的多巴胺盛宴。
1:17:52 So I do play them.
所以我确实玩它们。
But what happens is, internally, there’s basically a black box mechanism that does nothing more than generate the next random number and what the outcome is in terms of probability and payout.
但发生的情况是,在内部,基本上有一个黑匣子机制,它除了生成下一个随机数以及概率和支付方面的结果外,什么也不做。
And then the game says, “I’ve got to make up a movie to go along with that.” And maybe it’s three bars or whatever it is, but there’s no correlation.
然后游戏会说:“我必须制作一部电影来配合它。”也许是三个条形或其他什么,但没有相关性。
It’s not spinning the reels, seeing where they land, and looking that up to see what you won.
它不是旋转卷轴,看看它们落在哪里,然后查看它以查看您赢得了什么。
It’s completely the other direction.
这完全是另一个方向。
It determines whether or not or if you won and then makes something up to fit that scenario.
它决定你是否获胜,然后做出一些适合该场景的事情。
That, that indeed is ruining it for everyone.
那,那确实正在毁掉每个人的一切。
A little bit.
一点点。
What kind of code runs them?
什么样的代码运行它们?
I don’t really know.
我真的不知道。
1:18:35 I tried to get down and get inside access to one, and it was very hard.
我试图下楼进入其中,但非常困难。
They don’t want to tell you a lot about them, and I’m sure it’s not that deep of a secret, but…
他们不想告诉你太多关于他们的事情,而且我确信这不是那么深的秘密,但是......
They’re all basic Windows PCs, but they’re basic Windows PCs on top of a very secure enclave of some kind that I don’t know a lot about.
它们都是基本的 Windows PC,但它们是建立在某种我不太了解的非常安全的飞地之上的基本 Windows PC。
Yeah, it has to be extremely secure, right?
是的,它必须非常安全,对吧?
Yeah.
是的。
1:18:56 Well, in the 70s or 80s, there was a tech in Vegas who went around and he was burning his own ROMs for the slot machines.
嗯,在 70 年代或 80 年代,拉斯维加斯有一位技术人员四处走动,他正在为老虎机烧写自己的 ROM。
With a backdoor in them, so when he serviced the machine, he would just put his ROM in.
它们有后门,所以当他维修机器时,他只需将 ROM 放入即可。
Nice.
不错。
And he’d come back six months later and…
六个月后他回来了……
Nice.
不错。
Invoke the backdoor and…
调用后门并...
I love humans so much.
我非常爱人类。
1:19:09 Anyway, do you have other favorite kinds of systems like that?
不管怎样,你还有其他喜欢的类似系统吗?
I like a lot of old hardware.
我喜欢很多旧硬件。
1:19:15 I restore cars, so I do a lot of 1960s muscle cars, cars and trucks.
我修复汽车,所以我修复了很多 20 世纪 60 年代的肌肉车、轿车和卡车。
Nice.
好的。
And old computers, so I restore PDP-11s.
还有旧电脑,所以我恢复了 PDP-11。
1:19:21 It’s been my fascination and my special interest for the last six months or so, and I’ve built a number of those.
在过去六个月左右的时间里,这是我的着迷和特别兴趣,我已经建立了其中的一些。
Yeah, I’ve seen you posting videos about it, the PDP-11/83.
是的,我看到您发布了有关 PDP-11/83 的视频。
1:19:30 What’s that whole project?
整个项目是什么?
So basically, what it is, is I had built a number of PDP-11s.
基本上,我已经建造了一些 PDP-11。
1:19:40 And so over the years, I had acquired all these parts and I decided, “Well, let me build the best PDP-11 that I can.” And so it was kind of a quest to, just like you try to max out a PC, I tried to max out a PDP-11.
多年来,我已经获得了所有这些部件,我决定,“好吧,让我尽我所能建造最好的 PDP-11。”所以这是一种追求,就像你试图最大限度地发挥 PC 的性能一样,我也试图最大限度地发挥 PDP-11 的性能。
So it’s got four megabytes of memory, which would be massive in the day.
所以它有四兆字节的内存,这在一天中来说是巨大的。
And yeah, that’s it there.
是的,就是这样。
And it’s got lots of blinking lights, and I had to rewrite the BSD kernel to make the lights work and…
它有很多闪烁的灯,我必须重写 BSD 内核才能使灯工作并且......
What are we looking at here?
我们在这里看什么?
1:20:05 What’s…
什么是……
So the very top is a PDP-11/70 control panel, which we can largely ignore, and then there’s two chassis below that.
所以最上面是一个 PDP-11/70 控制面板,我们基本上可以忽略它,然后下面有两个机箱。
1:20:09 One has-
其中一个有——
What are the different knobs?
有哪些不同的旋钮?
1:20:15 Sorry to ask dumb questions here.
很抱歉在这里问愚蠢的问题。
The knobs, they, uh- …
旋钮,它们,呃-……
1:20:18 control what view you get of the LEDs.
控制 LED 的视图。
Oh.
哦。
So normally, you see the data bus and you can see the address bus.
所以通常情况下,您可以看到数据总线,也可以看到地址总线。
1:20:22 And you can pause the machine, you can edit the add- address on the bus, and you can deposit stuff into memory with the switches.
你可以暂停机器,你可以编辑总线上的地址,你可以用开关将东西存入内存。
Man, the haptic plus the LEDs.
伙计,触觉加上 LED。
1:20:32 That’s what you imagine a computer to be.
这就是你想象中的计算机。
Yeah.
是的。
That’s so cool.
太酷了。
1:20:39 That’s so cool.
太酷了。
And then these are what?
然后这些是什么?
What are these?
这些是什么?
These are DU1, DU2?
这些是DU1、DU2?
Yeah.
是的。
1:20:45 It’s a weird floppy drive.
这是一个奇怪的软盘驱动器。
It’s a dual floppy drive with one stepper motor.
它是一款带有一个步进电机的双软盘驱动器。
So both heads seek together like Siamese twins.
所以两个头就像连体双胞胎一样一起寻找。
Okay.
好的。
1:20:52 So what, what kind of stuff are you doing with this?
那么,你用这个做什么?
What are you- …
你是什么——……
are you trying to restore them?
你想恢复它们吗?
Yeah.
是的。
1:20:57 So I restore them and-
所以我恢复它们并且-
Does it actually run?
它真的运行了吗?
1:20:58 Oh, all the blinking lights are real?
哦,所有闪烁的灯都是真的吗?
Yeah, it’s all real.
是的,这一切都是真的。
Wow.
哇。
Then I had to rebuild the kernel and all that, so I had to learn the BSD kernel.
然后我必须重建内核等等,所以我必须学习 BSD 内核。
1:21:04 I’m pretty familiar with it now to get…
我现在已经很熟悉了……
‘Cause you can’t just add a device driver, right?
因为你不能只添加设备驱动程序,对吧?
You’ve got to rebuild the kernel to add support for whatever device.
您必须重建内核以添加对任何设备的支持。
So you add a new disk controller.
因此,您添加了一个新的磁盘控制器。
It’s time to build the kernel, so you gotta go find the source and find the code and…
是时候构建内核了,所以你必须去寻找源代码并找到代码......
And you can run code on this?
你可以在上面运行代码吗?
1:21:20 You’ve written a couple books on autism.
你写了几本关于自闭症的书。
Being autistic yourself, I was wondering if you could tell me about, like, fundamental differences about the mind of a person with autism versus a, let’s say, a neurotypical individual.
作为一个自闭症患者,我想知道你是否可以告诉我自闭症患者与神经正常人的思想之间的根本差异。
Well, the fundamental theory of thought for autism is called monotropism.
嗯,自闭症的基本思想理论称为单向性。
1:21:34 And basically what that means is that my brain does one thing and does it very intensely, and then when it’s done I can move on and do something else.
基本上,这意味着我的大脑做一件事,并且非常强烈地做,然后当它完成时,我可以继续做其他事情。
But I’m not a multitasker.
但我不是一个多任务处理者。
I’m a serial single-tasker by any stretch.
无论如何,我都是一个连续执行单一任务的人。
Autism usually brings with it sensory sensitivities and repetitive behaviors, behavioral issues that compound it.
自闭症通常会带来感官敏感性和重复行为,以及使其更加复杂的行为问题。
And if they rise to the level where an individual can’t moderate or accommodate them in their life, it becomes a disorder.
如果它们上升到一个人无法在生活中调节或适应它们的水平,它就会变成一种疾病。
And that’s probably one to two percent of the population.
这可能占总人口的百分之一到百分之二。
What’s the biggest benefit of life with autism?
自闭症患者生活中最大的好处是什么?
I can bring to bear an incredible amount of focus and dedication on a particular task.
我可以对某项特定任务表现出难以置信的专注和奉献精神。
1:22:11 It has to be something I love, it has to be something that’s rewarding, it has to be something I can make progress on, and there have to be all these things that are true about it.
它必须是我喜欢的东西,它必须是有价值的东西,它必须是我可以取得进步的东西,而且必须是所有这些都是真实的。
And it could be like a kid playing with trains.
这可能就像一个孩子玩火车一样。
I get that same feeling.
我也有同样的感觉。
That said, you also said that you struggle with ADHD.
也就是说,您还说您患有多动症。
Yeah, a fair bit.
是的,有一点。
So that’s part of the component, like, maintaining the focus?
那么这是该组件的一部分,例如保持焦点?
Actually, acquiring the focus is the issue.
事实上,获取焦点才是问题所在。
1:22:38 So I’m very easily distracted.
所以我很容易分心。
I fall asleep with noise-canceling headphones or I can’t fall asleep, that kind of thing.
我戴着降噪耳机睡着了,或者睡不着,诸如此类。
But once I get locked in, I’m very hard to distract.
但一旦我陷入困境,我就很难分散注意力。
So it’s kind of a paradox.
所以这是一个悖论。
Oh, that’s fascinating.
哦,这很有趣。
It’s hard to get into that state.
很难进入那种状态。
Okay.
好的。
1:22:54 What’s the biggest challenge of life with an autistic mind?
自闭症患者生活中最大的挑战是什么?
That I don’t know what anybody else is thinking.
我不知道别人在想什么。
1:22:58 So I know what I would think about this interaction if I was in your position and I was you.
所以我知道如果我处于你的位置并且我就是你,我会对这种互动有什么看法。
And that’s the best I can do.
这就是我能做的最好的事情。
But I think most neurotypical people have a sense of, “Well, Lex probably feels this way or that way ’cause he’s acting this way and his reactions are this and his facial expressions say this and…” That’s all kind of lost on me.
但我认为大多数神经质的人都会有这样的感觉,“好吧,莱克斯可能有这样或那样的感觉,因为他这样做,他的反应是这样,他的面部表情是这样的……”这对我来说有点迷失。
So I run a little proxy NPC game for everybody I deal with.
因此,我为每个与我打交道的人运行了一个小型代理 NPC 游戏。
So I guess that makes social interaction a little bit complicated.
所以我想这会让社交互动变得有点复杂。
It can be, yeah.
可以是,是的。
1:23:22 Telephone is especially hard because I rely on a lot of other cues, and when somebody is just on the phone and I just have their voice, there’s so much that’s implied between people that I miss.
打电话尤其困难,因为我依赖很多其他线索,当有人打电话而我只能听到他们的声音时,我想念的人之间暗示着很多东西。
And so I’m much better on FaceTime, where if somebody makes a joke, they might smile after- Whereas on the phone, I don’t know if you’re being sarcastic or serious and that kind of thing, so…
所以我在 FaceTime 上表现得更好,如果有人开了个玩笑,他们可能会微笑——而在电话里,我不知道你是在讽刺还是认真之类的,所以……
So that’s probably gotten you into trouble over the years a bit.
所以多年来这可能给你带来了一些麻烦。
Yeah.
是的。
1:23:45 There’s lots of times with my wife, too, where…
我和妻子也有很多次,在那里……
Well, there’s a certain literalism that comes with autism.
嗯,自闭症有一定的字面意义。
And we spent years where she would say something and I’d say, “But that doesn’t make sense.” She’d say, “You know what I mean.” I’m like, “No, I know what you said and I’m not being just combative here.
我们花了很多年的时间,她会说一些话,我会说,“但这没有意义。”她会说:“你知道我的意思。”我说:“不,我知道你说的,我不只是在这里好斗。
I literally only know what you said,” and I don’t have that.
我真的只知道你说的话,”但我不知道。
And I remember we’ve been in meetings with people, and you know, if there’s three or four people in the meeting and I’m the only autistic person, I’ll tell them that they’ve got this communication loop going on and I have to…
我记得我们一直在与人开会,你知道,如果会议中有三四个人,而我是唯一的自闭症患者,我会告诉他们,他们已经建立了这种沟通循环,我必须……
You gotta tell me what’s going on because I really don’t know what’s being said here.
你必须告诉我发生了什么事,因为我真的不知道这里在说什么。
So…
所以……
You told me related to this that there was an early, somewhat awkward encounter with Bill Gates.
你告诉我与此相关的是,早期与比尔·盖茨的相遇有些尴尬。
1:24:19 Can you share the story of that interaction and how autism comes into play here?
您能分享一下这种互动的故事以及自闭症是如何在这里发挥作用的吗?
Yeah.
是的。
1:24:32 My very first summer at Microsoft when I got the internship, Bill had all the interns over.
我在微软的第一个夏天,当我获得实习机会时,比尔就让所有实习生都结束了。
I guess it was 20 or maybe 25 of us, that got hired that year over to his house for burgers and beers and just chat in the backyard.
我猜那一年我们有 20 人或 25 人被雇到他家去吃汉堡和啤酒,然后在后院聊天。
And of course, it’s still Bill Gates, and he’s a big enough deal even then that you’re a little nervous.
当然,仍然是比尔·盖茨,而且他的地位已经足够大了,以至于你会有点紧张。
And so my manager, Ben, who was sort of my mentor at the time, took me over to introduce me to Bill because he knew him.
因此,我的经理本(当时是我的导师)接手我,将我介绍给比尔,因为他认识他。
And he’s explaining, “This is Dave.
他解释道:“这是戴夫。
He’s our intern from Canada.
他是我们来自加拿大的实习生。
And in the space of four months, he’s done this feature and just copy and smart drive,” and he listed off all the stuff I was doing.
在四个月的时间里,他完成了这个功能,只是复制和智能驱动,”他列出了我正在做的所有事情。
1:25:05 But I stopped because I’m like, “Well, actually, it was three months.” And I had to interrupt them, and they both kind of, “What?” And they looked at each other, and I realized that was the wrong time to…
但我停下来了,因为我想,“好吧,实际上,已经是三个月了。”我不得不打断他们,他们都说,“什么?”他们互相看着对方,我意识到现在是错误的时间……
…Correct a guy.
……纠正一个人。
But…
但是……
Yeah.
是的。
1:25:17 So you, like, little inaccuracies?
所以你觉得有一点不准确吗?
Oh, drive me crazy.
哦,让我发疯。
And then you, of course you don’t…
然后你,当然不……
1:25:22 The impact that might have on a casual social interaction, it’s not trivial for you to be aware of that.
这可能会对休闲社交互动产生影响,你意识到这一点并不是微不足道的。
Yeah.
是的。
1:25:38 I’m much better than I used to be.
我比以前好多了。
Before, I didn’t know and I didn’t know how injecting a correction meaninglessly into a conversation could impact or make the other person feel.
以前,我不知道也不知道在谈话中毫无意义地进行纠正会如何影响或让对方感受到。
Now I have a better sense of it, but…
现在我对此有了更好的认识,但是……
What advice would you have for folks who have an autistic mind on how to flourish in this world?
对于如何在这个世界上蓬勃发展,您对那些有自闭症思维的人有什么建议?
In terms of prosperity and finances, the biggest thing I can say is sell what you can do and not yourself.
就繁荣和财务而言,我能说的最重要的事情就是出售你能做的事情,而不是你自己。
1:25:56 Because if you go into a job interview and you try to wow them with your personality and how amazing you are, it may or may not go well.
因为如果你参加工作面试,并试图用你的个性和你的出色表现来让他们惊叹,那么面试可能会顺利,也可能不会。
But if you go in with your portfolio of work and say, “Look, here’s my GitHub history and here are the awesome projects I contributed to, and here’s the actual algorithm I wrote, and this is what I do,” I think you get a lot further with that.
但如果你进入你的工作组合并说,“看,这是我的 GitHub 历史记录,这是我贡献的出色项目,这是我编写的实际算法,这就是我所做的”,我认为你会得到更多。
So, whether you’re playing the piano or writing code.
所以,无论你是弹钢琴还是写代码。
That said, so much of software engineering on large teams has a social component to it, right?
也就是说,大型团队中的许多软件工程都有社交成分,对吗?
It does, and that was a liability for me.
确实如此,这对我来说是一种责任。
How do you…
你怎么…
1:26:31 I mean, what have you learned about how to solve that little puzzle?
我的意思是,关于如何解决这个小难题,你学到了什么?
I think the biggest deficit for me was when I started to manage people, because now you’re concerned about their hopes, dreams, aspirations, what motivates them.
我认为对我来说最大的缺陷是当我开始管理员工时,因为现在你关心他们的希望、梦想、抱负以及激励他们的因素。
1:26:36 They have entire lives that are kind of a mystery to me, because I assume they want to be motivated and led and encouraged and compensated exactly as I would.
他们的整个生活对我来说有点神秘,因为我认为他们想要像我一样受到激励、领导、鼓励和补偿。
And that’s not always the case.
但情况并非总是如此。
Some people need a lot more affirmation, some people just want money, some people want to be in the important meetings and make decisions.
有些人需要更多的肯定,有些人只是想要钱,有些人想要参加重要的会议并做出决定。
But I was largely oblivious to that.
但我基本上没有注意到这一点。
And so eventually I had to learn that everybody that you’re managing has their own set of incentives and priorities, and they’re completely different from what I think they probably are.
所以最终我不得不了解到,你所管理的每个人都有自己的一套激励措施和优先事项,而且它们与我认为的可能完全不同。
So you could, I guess, make things more explicit and just communicate better about, like, ask them about what their interests are.
所以我想,你可以让事情变得更明确,更好地沟通,比如询问他们的兴趣是什么。
Yeah.
是的。
1:27:19 And that’s something I started doing, is overtly asking.
这就是我开始做的事情,公开询问。
Because it’s hard for me to nudge somebody there.
因为我很难推动那里的人。
I’m not good with that kind of social dance, so…
我不擅长那种社交舞,所以……
Yeah, part of the social dance is there’s a lot of stuff that’s unsaid.
是的,社交舞的一部分就是有很多没有说出来的事情。
1:27:27 You can kind of figure out…
你可以弄清楚……
You can read people.
你可以读懂人。
But if that’s…
但如果那是……
With autism, it might be a little bit difficult to do that, and so you have to make things more explicit.
对于自闭症患者来说,做到这一点可能有点困难,所以你必须让事情变得更明确。
Plus, like, sarcasm and satire and humor might be difficult.
另外,讽刺、讽刺和幽默可能会很困难。
I would love to be a fly on the wall in some of your earlier interactions with Microsoft.
在您早期与 Microsoft 的一些互动中,我很乐意成为墙上的一只苍蝇。
I mean, some of the greatest engineers have a mind like this, so…
我的意思是,一些最伟大的工程师都有这样的想法,所以……
Yeah, I’ve had laptops thrown at me and stuff, and I’m sure it was my own fault, so…
是的,有人向我扔笔记本电脑之类的东西,我确信这是我自己的错,所以……
You write about the 10-second autism test.
你写了关于 10 秒自闭症测试的文章。
1:28:01 Could you explain how this works?
您能解释一下这是如何工作的吗?
Yeah.
是的。
1:28:05 Now, there is, of course…
现在,当然有……
Anything that has two answers has a high error rate, but…
任何有两个答案的事情都有很高的错误率,但是……
So what’s more important to society as a whole from the people, is it cooperation or creativity?
那么对于整个社会来说,从人们的角度来看,到底是合作更重要,还是创造力更重要?
And if you had to pick one, which is the most important?
如果你必须选择一个,哪一个是最重要的?
And most neurotypical people will generally lean towards cooperation, whereas people on the spectrum tend to lean towards creativity as individual problem-solvers.
大多数神经典型的人通常倾向于合作,而患有此谱系的人则倾向于作为个人问题解决者的创造力。
Of course, there’s some kind of error rate there.
当然,其中存在某种错误率。
So if you want to double your precision, you can use a second test, which is you ask, “There’s a room with 10 chairs, and six people come in and sit down in those chairs.
因此,如果你想使精度加倍,你可以使用第二个测试,即你问:“有一个房间,有 10 张椅子,有 6 个人进来坐在这些椅子上。
1:28:28 How many chairs are left?” Now, some people are going to say four, but I’m going to say 10, because that’s how many chairs are still there.
还剩几张椅子?”现在,有些人会说四张,但我会说十张,因为那是仍然有多少张椅子。
Literally true.
确实如此。
And I’m not being a dick.
而且我不是一个混蛋。
Yeah, okay.
是啊,好吧。
I’m not trying to be complicated, but that is how my mind works.
我并不是想变得复杂,但这就是我的思维方式。
1:28:46 And so when I see that question, it’s like it depends how you answer it.
所以当我看到这个问题时,就好像这取决于你如何回答它。
So you’re how literally you take things?
那么你对待事物的态度是怎样的呢?
Yeah.
是的。
1:28:57 Everything is very literal for me.
一切对我来说都是非常字面意义的。
I remember as a kid, my grandfather was building a planter holder in the kitchen for my mom.
我记得小时候,我的祖父正在厨房里为我妈妈制作一个花盆架。
And he was using these big angle brackets that I thought were a little overkill, and I said, “Do you think that’ll be big enough to hold the plant?” And he says, “It’ll be big enough to hold a horse.” And I was only five, but I was very confused about, A, why you would bring a horse into your kitchen, why you would put a horse up on a planter, and all of these things that didn’t make any sense to me when obviously it was a figure of speech.
他使用了这些大尖括号,我认为这有点过分了,我说,“你认为它足够大来容纳植物吗?”他说:“它足够大,可以容纳一匹马。”我当时只有五岁,但我很困惑,A,为什么你要把一匹马带进你的厨房,为什么你要把一匹马放在花盆上,所有这些对我来说没有任何意义,因为这显然是一种修辞手法。
But for a lot of my life, I took figures of speech as literal, so…
但在我一生的大部分时间里,我都将修辞格视为字面意思,所以……
You’ve mentioned emotional post-processing as a strategy you use to replace social interactions so you can sort of reverse engineer to help you understand the neurotypical world.
您提到情感后处理是一种用来取代社交互动的策略,这样您就可以进行逆向工程来帮助您理解典型的神经世界。
1:29:26 I think this is going to be useful to a lot of people.
我认为这对很多人都有用。
What does that entail?
这意味着什么?
How does that help you?
这对你有什么帮助?
So if I meet somebody, particularly somebody new, and it’s my first couple interactions with them, so even meeting you today, then I will go home later and replay all of the moments where I had choices to make.
因此,如果我遇到某人,特别是新认识的人,这是我与他们的第一次互动,所以即使今天见到你,我也会稍后回家并重温所有我必须做出选择的时刻。
1:29:43 And probably the most uncomfortable ones first, to find out, what did I do wrong in that moment?
也许首先是最不舒服的,要找出我在那一刻做错了什么?
What did I miss?
我错过了什么?
What was the other person thinking?
对方在想什么?
How can I improve that kind of situation next time, and do I need to go fix it or make a phone call, that kind of thing in a bad…
下次要怎样改善这种情况,需要去修理还是打电话之类的事情,不好了……
you know, in an extreme case.
你知道,在极端的情况下。
But…
但是……
And that’s happened a couple times in my life.
这在我的一生中发生过几次。
Like, I had a car restored that my dad had bought new in ’69.
比如,我修复了一辆我父亲在 69 年买的新车。
I still have it, so we’ve had it 50 years.
我还留着它,所以我们已经拥有它 50 年了。
1:30:18 About 20 years ago, I had it restored, and it was a three-year process of craftsmen working on this car for thousands of hours.
大约 20 年前,我把它修复了,工匠们花了三年时间,花了数千个小时来修复这辆车。
I go out to pick it up and I’m inspecting the car and I’m very impressed with the work, and I’m saying, “Oh, this is nice and this is great,” and everything else.
我出去取车,检查汽车,我对工作印象深刻,我说,“哦,这很好,这太棒了”,以及其他一切。
Then I fly home and write the check and the car gets delivered.
然后我飞回家并写下支票,汽车就被交付了。
And then I realized probably 10 years later that I had a whole bunch of craftsmen that had worked on my car for three years, and I probably should have blown some smoke up their butts about what a great job they did, but I never did that because it’s not what I wanted or needed in that moment.
然后大概10年后我意识到,我有一大群工匠在我的车上工作了三年,我可能应该对他们的工作做得多么出色表示赞赏,但我从来没有这样做,因为这不是我当时想要或需要的。
And I was completely oblivious to that.
我完全没有注意到这一点。
1:30:51 So I sent an email to the manager, or to the owner of the place, and I said, “I don’t know if you remember this, but 10 years ago, I picked up my car and I probably looked unimpressed, but I want you to know that I was very impressed with everything and the quality and everything else.” And he wrote back.
所以我给经理或店主发了一封电子邮件,我说:“我不知道你是否还记得这一点,但十年前,我拿起我的车,我可能看起来不为所动,但我想让你知道,我对一切、质量和其他一切都印象深刻。”他回信说。
He’s like, “I’ve thought of that moment often.” (laughs) So I’m like, “Now I’m glad I brought it up.”
他说:“我经常想起那一刻。” (笑)所以我想,“现在我很高兴我提出了这个问题。”
Yeah, there’s subtle things about human interaction that mean a lot to people, and if you ask them straight up, they might not be able to articulate that, but it means a lot.
是的,人际交往中有一些微妙的事情对人们来说意义重大,如果你直接问他们,他们可能无法清楚地表达出来,但这意义重大。
1:31:08 And when it’s off, when something is off, it bothers them.
当它关闭时,当某些东西关闭时,他们就会感到困扰。
Right.
正确的。
But to reverse engineer that, to figure that out for a person who might not sense those little subtleties of human interaction is tough.
但要进行逆向工程,对于一个可能感觉不到人类互动的细微之处的人来说,要弄清楚这一点是很困难的。
That’s a good point to jump in there, too, on empathy because there is some perception in the community that people with autism lack empathy, and I don’t think that’s the case at all.
关于同理心,这也是一个很好的切入点,因为社区中有些人认为自闭症患者缺乏同理心,但我认为事实并非如此。
1:31:32 I can only speak for myself.
我只能代表我自己说话。
I feel fairly empathetic, but I think the problem is a communication one, and it works in both directions, whereas I don’t know how you’re feeling, so it’s hard for me to be empathetic with it until you communicate to me what it is you’re experiencing.
我感觉相当有同理心,但我认为问题在于沟通问题,而且它是双向的,而我不知道你的感受如何,所以在你向我传达你正在经历的事情之前,我很难产生同理心。
And then once I know, once I have an understanding of what’s going on in your head, I can feel incredibly sorry for you.
一旦我知道了,一旦我了解了你脑子里在想什么,我就会为你感到无比的遗憾。
But until then, I’m going to assume you’re going to handle it just like I would in your position, in my case, with what I know now.
但在那之前,我假设你会像我在你的位置上一样处理它,就我而言,根据我现在所知道的。
What advice would you give to people on the other side?
您会给另一边的人什么建议?
1:32:06 How can they help you be a better friend or partner or colleague?
他们如何帮助您成为更好的朋友、合作伙伴或同事?
How should they communicate with you to help, like, give more information?
他们应该如何与您沟通以提供帮助(例如提供更多信息)?
Yeah.
是的。
1:32:18 Be really specific.
一定要具体。
And don’t assume I’m going to pick up on clues and nuance and subtlety.
不要以为我会发现线索、细微差别和微妙之处。
So if you’re trying to nudge me into a particular behavior, you’re much better off saying, “Dave, this is what you need to do.”
因此,如果你试图促使我采取某种特定行为,你最好说:“戴夫,这就是你需要做的。”
Have I failed in any way today?
我今天有什么失败的地方吗?
No, not yet.
不,还没有。
All right.
好的。
1:32:33 What score would you give me out of one to ten?
满分一到十,你会给我打几分?
Am I a six?
我是六级吗?
A seven?
七?
7.5.
7.5。
Communication?
沟通?
1:32:43 7.5?
7.5?
(laughs) Floating point.
(笑)浮点数。
Nice.
好的。
Masking.
掩蔽。
You got to tell me what that is.
你必须告诉我那是什么。
It’s a significant experience for many on the spectrum.
对于许多自闭症患者来说,这是一次重要的经历。
What is masking?
什么是掩蔽?
And tell me about any of the experiences you’ve had with masking.
告诉我你在掩蔽方面的经历。
So masking is, and it’s probably not the right way to describe it, but it’s the act of acting normal.
所以掩饰就是,这可能不是描述它的正确方式,但它是表现正常的行为。
1:33:00 And that is, how do I conduct myself in a social situation in a way that other neurotypical people are going to receive and accept it the right way?
也就是说,我如何在社交场合表现得让其他神经正常人能够以正确的方式接受和接受?
And everything you do in a social interaction, from waving my hands to making facial expressions to tone of voice to posture, it’s a huge contrivance and it’s work.
在社交互动中你所做的一切,从挥手到做出面部表情,从语气到姿势,都是一个巨大的发明,而且很有效。
So it comes natural to most people, it’s just what they do, and cool people do it really well.
所以这对大多数人来说是很自然的,这就是他们所做的,而且很酷的人做得很好。
But for somebody on the spectrum, you’ve got to fake it all.
但对于患有自闭症谱系障碍的人来说,你必须伪造一切。
Yeah.
是的。
1:33:41 Acting normal.
表现正常。
There’s a song by Rush, you know the band?
Rush 有一首歌,你认识这个乐队吗?
1:33:44 Limelight.
聚光灯。
And it’s written by Neil Peart.
它的作者是尼尔·皮尔特。
I only speculate about people who have passed on, so I’ve got a sense he was probably on the spectrum.
我只是猜测那些已经去世的人,所以我有一种感觉,他可能属于自闭症谱系障碍中。
But the line is something like, “All the world’s indeed a stage, and we are merely players, performers and portrayers, each another’s audience.” And he talks at length in the song about not being able to treat strangers as friends and being able to fake an affect and all that, so it seems like he’s struggling with masking a lot in the song.
但台词是这样的:“世界确实是一个舞台,而我们只是演员、表演者和描绘者,彼此都是观众。”他在歌曲中详细谈到了无法将陌生人视为朋友以及能够假装感情等等,所以看起来他在歌曲中努力掩饰很多东西。
I have no idea, but that was what I took from it.
我不知道,但这就是我从中得到的。
You described meltdowns as an overwhelming experience.
您将崩溃描述为一种压倒性的经历。
1:34:13 Can you describe meltdowns?
你能描述一下崩溃吗?
What typically triggers a meltdown?
通常什么会引发崩溃?
Generally, it is…
一般来说,它是……
1:34:22 it’s when you’re emotionally overwhelmed to the point that you can’t manage your behavior anymore.
当你的情绪被压垮,以至于无法再控制自己的行为时。
So you see it in the movie Rain Man when he’s trying to get on the airplane and he’s kind of forced and he starts losing it.
所以你可以在电影《雨人》中看到,当他试图登上飞机时,他有点被迫,然后开始失去控制。
That’s a meltdown.
那是一种崩溃。
Or I’ve seen it on…
或者我在...上看到过
They did kind of a…
他们做了某种……
Well, actually, probably the best portrayal I’ve seen in media is…
好吧,实际上,我在媒体上看到的最好的描述可能是……
What’s the TV show where the doctor is autistic?
医生患有自闭症的电视剧是什么?
He’s…
他是……
Anyway, there’s a TV show where a doctor’s autistic and he’s a surgeon and he is eventually banned from surgery because of his autism, and he’s always wanted to be a surgeon and he has a complete meltdown, and it’s a pretty good portrayal on television.
不管怎样,有一个电视节目,一个医生患有自闭症,他是一名外科医生,他最终因为自闭症而被禁止接受手术,他一直想成为一名外科医生,但他彻底崩溃了,这是电视上很好的描绘。
What is actually happening?
到底发生了什么?
1:34:56 Like, there’s a threshold you cross that it’s just like…
就像,你跨越了一个门槛,就像……
Yeah.
是的。
1:35:00 The switch flips.
开关翻转。
It’s like a blue screen essentially-
本质上就像蓝屏 -
Yeah.
是的。
1:35:05 Kind of.
有点儿。
…
……
for the brain algorithm?
对于大脑算法?
So the switch flips.
所以开关翻转了。
1:35:07 You go to a primitive brain.
你进入了一个原始的大脑。
Your frontal cortex shuts down to an extent, I think, so you don’t have the benefit of decision-making and filtering.
我认为,你的额叶皮层在一定程度上关闭了,所以你无法从决策和过滤中受益。
You’re a very reptilian brain in that state.
在那种状态下,你的大脑非常像爬行动物。
And it’s really a panic state.
这确实是一种恐慌状态。
And so it’s a panic and a fight or flight response to not being able to tolerate the current reality.
因此,这是对无法容忍当前现实的恐慌和战斗或逃跑的反应。
And perhaps it’s been so frustrating or you’ve been so randomized or you had a bad travel day or an argument at work or whatever, it’s added up to the point that something has now triggered you and your brain loses its ability to adequately moderate your behavior.
也许这太令人沮丧了,或者你太随意了,或者你在旅行中度过了糟糕的一天,或者在工作中发生了争吵,或者其他什么,加起来,现在有一些事情触发了你,你的大脑失去了充分调节你的行为的能力。
What about love and relationships?
爱情和人际关系又如何呢?
1:35:41 What are some of the challenges of that and…
其中有哪些挑战以及……
You know, there’s a show, Love on the Spectrum.
你知道,有一个节目,《频谱上的爱》。
I’ve heard of it.
我听说过。
1:35:47 I’ve not seen it, but I’ve heard of it.
我没见过,但我听说过。
Because certain aspects, like literal interpretation of things, it just makes the complexity of romantic relationships even more explicit in that context.
因为某些方面,例如事物的字面解释,只会使浪漫关系的复杂性在这种情况下更加明显。
You know, I’ve been married 31 years and together for 37, so a long history there, and I think our first indication that we knew we were very different was we were sitting in the car one night out front of the house at dark and across the street there’s kind of a nice house, and it has these big brick pillars that are linked by, like, anchor chains and it forms a fence around the yard.
你知道,我已经结婚31年了,在一起也有37年了,那里有很长的历史,我想我们知道我们非常不同的第一个迹象是,一天晚上天黑的时候我们坐在房子前面的车里,街对面有一座漂亮的房子,它有这些大砖柱,它们像锚链一样连接起来,在院子周围形成了栅栏。
1:36:01 And I’m looking at these things ’cause they’re about two feet square and they got capstone and I’m like, “You know, I wonder if they’re hollow or are they backfilled?” Are they filled with concrete or what?” And my now wife looks at me and she’s like, “What’s wrong with you?” “Why do you have a place in your head that cares about that?”
我正在看这些东西,因为它们大约有两平方英尺,并且有顶石,我想,“你知道,我想知道它们是空心的还是回填的?”它们是用混凝土填充的还是什么?”我现在的妻子看着我,她说:“你怎么了?” “为什么你脑子里有一个地方关心这个?”
Yeah.
是的。
1:36:36 That’s great.
太好了。
And we just knew in the moment that I was passionately involved and caring, and she was passionately involved, and why would you even worry about that kind of thing?
那一刻我们就知道我热情地参与和关心,她也热情地参与,为什么你会担心这种事情呢?
1:36:37 We knew we were very different.
我们知道我们非常不同。
Yeah.
是的。
1:36:47 Very specific, seemingly irrelevant details.
非常具体,看似无关的细节。
But- …I was never good with people.
但是——……我从来不善于与人相处。
1:36:51 I don’t get it when people like me, I guess.
我想,当人们喜欢我时,我不明白。
And so my son is the same way, because they don’t fall very far from the tree.
我的儿子也是这样,因为他们不会掉到离树很远的地方。
I got them a T-shirt that says, “If you’re hitting on me, please let me know and be specific, because I’m clueless.” And it’s very similar for me.
我给他们买了一件 T 恤,上面写着:“如果你在挑衅我,请告诉我,并且具体一点,因为我一无所知。”这对我来说非常相似。
I mean, I had to be around a long time and kind of grow on people because I had no game, I had no ability to do the social dances that that whole thing requires.
我的意思是,我必须待在很长一段时间里,并在人们身上成长,因为我没有游戏,我没有能力跳整件事所需的社交舞。
So my only option is to just be myself, and that works for some people.
所以我唯一的选择就是做我自己,这对某些人来说是有效的。
Were you able to say, like, “I love you,” that kind of stuff?
你能说“我爱你”之类的话吗?
Yeah.
是的。
1:37:26 I mean, her family was way more open with that kind of thing than mine was.
我的意思是,她的家人对这类事情的态度比我的要开放得多。
So it was a growing period for me.
所以这对我来说是一个成长时期。
But, yeah, that’s not a problem I have.
但是,是的,这不是我的问题。
Okay.
好的。
1:37:33 All right.
好吧。
But it seems unimportant.
但这似乎并不重要。
Like, what is that actually accomplishing?
比如,这实际上实现了什么?
Well, now we do a lot of affirmation and checking.
嗯,现在我们做了很多肯定和检查。
1:37:41 In the last couple of years, we do a thing where she’ll just be like, “You good?” I’m like, “Yeah.” And there’s two steps to that.
在过去的几年里,我们做了一件事,她会说:“你还好吗?”我说:“是的。”有两个步骤。
There’s the “Are you good?” and then there’s my response, because if I’m like, “Yeah,” she knows something’s up.
还有一句“你还好吗?”然后是我的回应,因为如果我说“是的”,她就知道出事了。
Yeah.
是的。
1:37:55 So,
所以,
And so there’s always this pinging back and forth because there’s not the ability to read people just from looking at them to know what’s going on, so we have this explicit check mechanism, I think, where we develop that.
所以总是会有这种来回的反馈,因为我们没有能力仅仅通过观察人们来了解他们正在发生什么,所以我认为,我们有这种明确的检查机制,我们开发它的地方。
So there’s a vast chasm between yeah and neh.
所以“是”和“不”之间存在着巨大的鸿沟。
1:38:05 Again, that subtlety of human communication.
再次强调人类交流的微妙之处。
You’ve written about the experience that people have of feeling, quote, “a little bit autistic.” Could you elaborate on this concept?
你写过人们的经历,引用的话,“有点自闭症”。您能详细解释一下这个概念吗?
Yeah, I think a lot of people, maybe 10 to 20% of the population, is somewhere on the autism spectrum, but isn’t impacted by it enough that it rises to the level of a disorder.
是的,我认为很多人,也许是人口的 10% 到 20%,都属于自闭症谱系,但受到的影响还不足以上升到障碍的程度。
1:38:25 But they still have many of the characteristics that arise from autism.
但他们仍然具有许多自闭症的特征。
And I think if they can understand and identify and manage some of those behaviors in an optimal way, they can both leverage them and take advantage of some of the skills and mediate some of the deficits and problems that come with it.
我认为,如果他们能够以最佳方式理解、识别和管理其中一些行为,他们就可以利用这些行为并利用一些技能并调解随之而来的一些缺陷和问题。
And I wrote it mostly for my kids because none of them, as far as I know, have ASD, but they’ve all got certain aspects of my behavior that are particularly related to it, so I thought I’d write a little manual for them, basically.
我主要是为我的孩子们写的,因为据我所知,他们都没有患有自闭症谱系障碍,但他们都有我的行为的某些方面与此特别相关,所以我想我基本上应该为他们写一本小手册。
Hmm.
嗯。
1:39:02 Why do you think so many programmers, like excellent, great programmers and great engineers, are on the spectrum?
你认为为什么这么多程序员,比如优秀的、伟大的程序员和伟大的工程师,都属于这个谱系?
I think it’s that single-minded focus and the ability to reduce a problem, and to be ultimately curious about what’s inside stuff.
我认为这是一种一心一意的专注和减少问题的能力,以及最终对里面的东西感到好奇的能力。
1:39:08 That’s been an obsession for me my whole life: what’s inside?
这一直是我一生的痴迷:里面有什么?
I gotta take my mom’s oven apart because I gotta know how the flip clock works.
我得把妈妈的烤箱拆开,因为我得知道翻转时钟是如何工作的。
And I think that’s a good habit to have if you’re gonna be a programmer.
我认为如果你想成为一名程序员,这是一个好习惯。
And being willing, being excited to get into the details.
并且愿意、兴奋地了解细节。
1:39:26 Yeah.
是的。
What’s a cool thing you hope to program to build this year?
您希望今年计划开发什么很酷的东西?
What are you working on?
你在做什么?
So we got the RL learning how to play Tempest.
所以我们让 RL 学习如何玩 Tempest。
Where are you on that, by the way?
顺便问一下,你对此有何看法?
Like, what’s the ETA on success and dominance?
比如,成功和统治力的预计到达时间是多少?
Like victory?
喜欢胜利吗?
Well, it’s very close to working.
嗯,离工作很近了。
1:39:47 I think now it’s tweaking the model size and layers and stuff like that to get it to learn past the one threshold.
我认为现在它正在调整模型大小和层以及类似的东西,以使其学习超过一个阈值。
But, you know, it’s a couple thousand lines of Lua and it’s a couple thousand lines of Python, and they all interact and they all work, so it’s like 95% of the work is done now.
但是,你知道,这是几千行 Lua 和几千行 Python,它们都相互作用并且都工作,所以现在好像 95% 的工作已经完成。
It’s tuning hyperparameters and hoping for the best.
它正在调整超参数并希望得到最好的结果。
So it’s already a success in a sense, but now you’re seeing how far can this go?
所以从某种意义上来说这已经是成功了,但现在你知道这能走多远吗?
Yeah, my goal was to be able to beat me.
是的,我的目标是能够击败我。
That’s tough for.
这很难。
It is, but lots of games now are, you know, they play them better than humans, but maybe not games this complex.
是的,但是现在很多游戏,你知道,它们比人类玩得更好,但也许不是这么复杂的游戏。
What other cool things are you working on?
您还在做哪些其他很酷的事情?
1:40:19 What do you hope to build this year?
今年你希望打造什么?
The PDP-11 stuff, I’m trying to get what’s called an RA82 drive.
PDP-11 的东西,我正在尝试购买所谓的 RA82 驱动器。
1:40:22 It’s the big 14-inch monster that spins at 3600 rpm and sounds like a washing machine.
这是一个 14 英寸的巨型怪物,转速为 3600 rpm,听起来像洗衣机。
And then I’ll find the controller card and write the code and integrate it into the driver and try to get that all working.
然后我会找到控制器卡并编写代码并将其集成到驱动程序中并尝试使其全部正常工作。
What kind of code are you trying to run on it?
您想在其上运行什么样的代码?
I’m going to have to get the driver stack to work, so I have to incorporate the driver for it into the kernel.
我必须让驱动程序堆栈正常工作,因此我必须将其驱动程序合并到内核中。
You built a machine recently with one terabyte of RAM.
您最近建造了一台具有 1 TB RAM 的机器。
1:40:43 How did that happen and why?
这是怎么发生的以及为什么?
We have a project called GitHub Primes.
我们有一个名为 GitHub Primes 的项目。
1:40:52 If you just search for GitHub Primes, you’ll find it, and it is…
如果你只搜索 GitHub Primes,你就会找到它,它是......
GitHub Primes.
GitHub Primes。
…a single set of prime number algorithms implemented in about 100 different languages.
…以大约 100 种不同语言实现的一组素数算法。
1:40:57 So it’s the exact same algorithm, and we require that you follow certain rules to make it fair.
所以这是完全相同的算法,我们要求您遵循某些规则以使其公平。
Then you express that algorithm in whatever language you choose to the best of your ability, and we run a benchmark every night, and we compile the results and find out which languages are fastest.
然后,您尽自己最大的能力用您选择的任何语言表达该算法,我们每晚都会运行基准测试,然后编译结果并找出哪种语言最快。
Is this the one?
是这个吗?
1:41:16 Oh, so this is it.
哦,原来是这样啊。
You’re using this for?
你用这个做什么?
Oh, so-
噢,所以——
So-
所以——
This machine runs those tests?
这台机器运行那些测试?
1:41:25 Okay, you’ve got to tell me about this project.
好吧,你必须告诉我这个项目。
This is an epic project.
这是一个史诗般的项目。
So you’re comparing the performance of the different programming languages.
因此,您正在比较不同编程语言的性能。
Of all these languages.
所有这些语言中。
1:41:34 So they all get built into an individual Docker container, and then they all run.
所以它们都被构建到一个单独的 Docker 容器中,然后它们都运行。
And so-
所以——
This is an incredible project.
这是一个令人难以置信的项目。
1:41:38 This is really, really cool.
这真的非常非常酷。
It’s really measuring the performance of the different languages.
它确实衡量了不同语言的性能。
So what have you learned about which languages?
那么对于哪些语言你学到了什么?
Which language usually wins?
哪种语言通常会获胜?
Zig, I think right now.
齐格,我现在想。
Zig.
齐格。
It does, it varies.
确实如此,它有所不同。
1:41:52 People will make an improvement to the C++ then it’ll pass for a while, and then the Zig guys will get angry and come back and make it faster.
人们会对 C++ 进行改进,然后它会过去一段时间,然后 Zig 的人会生气并回来让它变得更快。
So Zig, Rust, C++, C?
那么 Zig、Rust、C++、C 呢?
1:41:59 And what kind of code is being run?
正在运行什么样的代码?
What’s the piece of code that they’re trying to run to measure the performance?
他们尝试运行来衡量性能的代码是什么?
So what they’re doing is they’re solving the primes up to 100 million as many times per second as they can in a five-second loop.
所以他们正在做的是在五秒的循环中每秒尽可能多地求解素数 1 亿次。
And so it’s a loop, got it.
所以这是一个循环,明白了。
1:42:17 Over and over and over and over and over again.
一遍又一遍,一遍又一遍。
Yeah, on all cores.
是的,在所有核心上。
So what-
那又怎样——
Across all CPUs.
跨所有 CPU。
What about, like, how the program is written?
那么程序是如何编写的呢?
1:42:22 Does that vary?
这有什么不同吗?
No.
不。
1:42:25 So you can do anything you want, but it has to be a prime sieve.
所以你可以做任何你想做的事,但它必须是一个优质的筛子。
You’re allowed to use one bit per integer at most, so you can’t use a byte, which is cheaper and easier.
每个整数最多只能使用一位,因此不能使用字节,这样更便宜、更容易。
There are a number of rules like that that you have to allocate the memory within your timed loop.
有许多类似的规则,您必须在定时循环内分配内存。
And so we have a set of rules and we have some solutions that don’t follow the rules like the 6502 because you’ve only got 64K, you can’t do 100 million sieve.
所以我们有一套规则,我们有一些不遵循 6502 等规则的解决方案,因为你只有 64K,你无法进行 1 亿次筛分。
So there’s a lot of solutions like that that we run as exhibition projects, but among the main languages, they all follow the same rules, and so it really should just be the how the algorithm is expressed in that language.
因此,我们作为展览项目运行了很多类似的解决方案,但在主要语言中,它们都遵循相同的规则,因此实际上应该只是算法在该语言中的表达方式。
And many of them use the same backend compiler, so it really is how you’re expressing it and the limitations or the benefits of that language.
其中许多都使用相同的后端编译器,因此这实际上是您表达它的方式以及该语言的局限性或优点。
They’re allowed to be multiple submissions per language?
每种语言可以多次提交吗?
Yeah, yeah.
是啊,是啊。
1:43:07 So if you look in the C, there’s like five, I think.
所以如果你看一下 C,我想大概有五个。
Okay.
好的。
1:43:10 And then they, some of them might use different compilers, or no?
然后他们中的一些人可能会使用不同的编译器,或者不?
Yeah, some are GCC, some are Clang, LLVM.
是的,有些是 GCC,有些是 Clang、LLVM。
I’m looking at a snapshot here from a couple years ago, Zig was at the top, then Rust, then Nim, Haskell.
我正在看几年前的快照,Zig 位于顶部,然后是 Rust,然后是 Nim、Haskell。
1:43:17 Oh, no, this is not, this is not ordered by slowness, or is it?
哦,不对,这不是,这不是按慢排序的吧?
It is.
是的。
So C would be 1.5 times as long as Zig.
所以 C 的长度是 Zig 的 1.5 倍。
Wow.
哇。
1:43:31 Okay.
好的。
Fascinating.
令人着迷。
Well, it’s a super cool project.
嗯,这是一个超级酷的项目。
And we’ve got in crazy languages like PowerShell.
我们还拥有像 PowerShell 这样的疯狂语言。
1:43:36 There’s a version in PowerShell, and stuff like that.
PowerShell 中有一个版本,诸如此类。
So this is automated, like in terms of organization of like how the submissions are done, there’s a structure to it?
所以这是自动化的,就像在组织方面,比如如何完成提交,有一个结构吗?
1:43:41 That’s cool.
太酷了。
Yeah, there’s two guys over in Europe Rucker and Tudor basically own this now.
是的,欧洲现在有两个人 Rucker 和 Tudor 基本上拥有这个。
1:43:47 I started as just three languages, I did Python, C#, and C++.
我一开始只使用三种语言:Python、C# 和 C++。
And I checked them in and I published the episode, and then people started throwing more solutions in there and it just got out of hand, so I had to get somebody to manage that one and they’ve been great doing that for me.
我签入了他们并发布了这一集,然后人们开始在那里投入更多解决方案,结果就失去了控制,所以我必须找人来管理这个解决方案,他们为我做的很棒。
What’s the happiest moment for you when you’re programming and building a thing?
当你编程和构建一个东西时,你最快乐的时刻是什么?
1:44:05 Like, what do you enjoy most?
比如,你最喜欢什么?
I think the most fun for me is when I build something complex, and I’ve thought through how it should work, and then I run it and it does work that way.
我认为对我来说最有趣的是当我构建一些复杂的东西时,我已经思考过它应该如何工作,然后我运行它,它确实以这种方式工作。
1:44:11 That creates intense satisfaction.
这会产生强烈的满足感。
So seeing the results come out the way that I planned them and have it work, because it rarely does the first time, but…
因此,看到结果按照我计划的方式出现并使其发挥作用,因为第一次很少会出现这种情况,但是……
Yeah.
是的。
1:44:28 Or especially if it does work the first time.
或者特别是如果它第一次确实有效的话。
I never trust that.
我从来不相信这一点。
1:44:31 I always feel like I’m missing something.
我总觉得自己错过了什么。
That’s true.
确实如此。
1:44:33 But, you know, with compiled languages like C++, that’s always a good feeling.
但是,您知道,对于 C++ 这样的编译语言,这种感觉总是很好。
You write a bunch of code, and you compile it all, it compiles without warnings, without errors.
你写了一堆代码,然后全部编译,它编译时没有警告,没有错误。
It’s a cool feeling.
这是一种很酷的感觉。
What do you think is the future of programming?
您认为编程的未来是什么?
So now, I don’t know how much you’ve got to really experience the impact of LLMs with code generation.
所以现在,我不知道你需要在多大程度上真正体验到法学硕士对代码生成的影响。
Have you used Cursor much, Cursor VSCode with code generation?
你用过Cursor吗,Cursor VSCode 与代码生成?
Yeah, I’ve done a ton of it for the Python side because I’m not great with Python, and I’m kind of new to it.
是的,我在 Python 方面做了很多工作,因为我不太擅长 Python,而且我对它还很陌生。
1:45:05 So I found it very helpful because I’ve learned a lot from watching the code that it generates if I don’t know how to do something.
所以我发现它非常有帮助,因为如果我不知道如何做某事,我可以通过观察它生成的代码学到很多东西。
Because if I were to write Python from scratch, it’s going to be about four times as long as what the AI can crank out because Python can be pretty terse if you’re good at it.
因为如果我从头开始编写 Python,它的长度大约是 AI 所能生成的时间的四倍,因为如果你擅长的话,Python 可以非常简洁。
Oh, that’s cool.
哦,那太酷了。
1:45:23 So you essentially learned Python for this project?
那么您基本上是为了这个项目而学习了 Python 吗?
Yeah.
是的。
So this is a good case study of a great programmer in C++ quickly learning a language.
所以这是一个伟大的 C++ 程序员快速学习语言的很好的案例研究。
Yeah, I’m vibe coding my way through it, I guess.
是的,我想我正在通过编码来完成它。
Vibe coding your way through it.
通过 Vibe 编码。
1:45:38 I mean, that is a really powerful use case to learn a language for.
我的意思是,这是学习语言的一个非常强大的用例。
If you’re already a good programmer, to learn either a new language or a new way to approach a problem by having it generate it because you already you probably understand the Python code it generates.
如果您已经是一名优秀的程序员,那么可以学习一门新语言或一种通过让它生成问题来解决问题的新方法,因为您可能已经了解它生成的 Python 代码。
Yeah.
是的。
Like without actually looking up any of the syntax.
就像没有实际查找任何语法一样。
Yeah, it’s all pretty self-explanatory once you see it but, you know, creating it from whole cloth is a little different, so.
是的,一旦你看到它,一切都是不言自明的,但是,你知道,用整块布料创建它有点不同,所以。
Yeah, but you still have to learn how to program in order to use it in that way.
是的,但是您仍然需要学习如何编程才能以这种方式使用它。
Oh, and to read it and to know what to tell it to do next and all that, yeah.
哦,阅读它并知道接下来要做什么等等,是的。
1:46:08 I don’t think you can vibe code yourself if you’re just new and haven’t coded but if you’re a good programmer, AI can make you incredibly powerful.
如果你是新手,还没有编码过,我认为你无法自己编写代码,但如果你是一名优秀的程序员,人工智能可以让你变得异常强大。
What do you think is the future of programming, like 5, 10, 20 years from now, this whole process?
你认为编程的未来是什么,比如 5 年、10 年、20 年之后的整个过程?
1:46:19 Now, vibe coding is kind of a fun meme thing because you still have to be…
现在,氛围编码是一种有趣的模因,因为你仍然必须……
The people that don’t know how to program and are just vibe coding are almost entirely creating systems that are not usable in production.
那些不知道如何编程并且只是进行氛围编码的人几乎完全创建了在生产中无法使用的系统。
They’re not…
他们不是……
It’s very difficult-
这是非常困难的——
1:46:38 It’s very difficult to create a product.
创造一个产品是非常困难的。
And the people who are already great programmers kind of vibe code just for…
而那些已经是优秀程序员的人的代码只是为了……
in the way that you’re doing it.
以你正在做的方式。
They’re basically…
他们基本上是……
it’s just a fancy autocomplete, and they end up editing it, or it’s a way to learn a new API, or new language, or a new whatever, a new specific use case, or maybe a different kind of gooey component or something like that.
这只是一个奇特的自动完成功能,他们最终会对其进行编辑,或者这是学习新 API、新语言、新事物、新特定用例、或者可能是不同类型的粘性组件或类似内容的一种方式。
But as they get smarter and smarter, we don’t know where the ceiling is.
但随着它们变得越来越聪明,我们不知道天花板在哪里。
That might change the nature of what it means to be a programmer.
这可能会改变程序员的本质。
So do you think about that?
那么你有没有想过呢?
I do.
我愿意。
1:47:12 I don’t want to say prompt engineer, but I think it’s going to be something like that in the sense that if you’re an architect building a bridge, at some point, guys were down there welding beams together, but now you’re dragging things around in AutoCAD and assembling from big pre-formed sections.
我不想说“快速工程师”,但我认为这会是这样的,如果你是一名建造桥梁的建筑师,在某些时候,人们会在那里将梁焊接在一起,但现在你在 AutoCAD 中拖动东西并从大型预成型部件进行组装。
And I assume that’s what programming will be like.
我想这就是编程的样子。
You won’t be in there throwing individual lines of code around; you’ll be moving components and interfaces and describing to the AI what those interactions should be and letting it build the components.
你不会在那里乱扔单独的代码行;您将移动组件和接口,并向人工智能描述这些交互应该是什么,并让它构建组件。
But I think we’re still quite a ways from it being able to whole cloth generate…
但我认为我们距离能够生成整块布还有很长的路要走……
You can’t say, “Give me a Linux kernel that’s compatible with Linux.” One day, we’ll be able to, and it’ll crank it out, but we’re not there yet.
你不能说:“给我一个与 Linux 兼容的 Linux 内核。”有一天,我们将能够做到,而且它会成功,但我们还没有做到这一点。
Does it make you sad that we’re climbing the layers of abstraction so quickly so you, somebody that used to do machine code and then assembly, then C and C++, that we’re getting to a point where we’re vibe coding with natural language?
我们如此快速地攀登抽象层,以至于你这个曾经做过机器代码、然后是汇编、然后是 C 和 C++ 的人,现在已经到了用自然语言进行振动编码的地步,这会让你感到悲伤吗?
Yeah, I kind of came up at a really fortunate time, I think, because I had to come up with the technology over the course of 30 or 40 years, so I understand TTL logic, and I can use AI to write code, and I kind of know all the pieces in between.
是的,我想,我是在一个非常幸运的时刻出现的,因为我必须在 30 或 40 年的时间里想出这项技术,所以我理解 TTL 逻辑,我可以使用人工智能来编写代码,我也知道其中的所有部分。
1:48:07 There certainly are holes in my knowledge, but I think the only way to have got that level of knowledge or the completeness of that picture is to have lived it for that long.
我的知识当然存在漏洞,但我认为获得这种知识水平或完整图像的唯一方法就是长期生活在其中。
And it’s going to be hard to duplicate that for people starting now.
对于现在开始的人来说,很难复制这一点。
What do you think is the meaning of this whole thing?
你认为这整件事的意义是什么?
1:48:32 Of existence of life, whatever is going on here?
生命的存在,这里到底发生了什么?
Making cool stuff.
制作很酷的东西。
1:48:44 I guess, fundamentally, what I care about is being able to make complex things that are useful to other people, which leverages my abilities in a way that allows me to be creative and to create things that other people can use in a way that if I was limited to painting or sculpting or whatever in the classic arts, I would be hopeless.
我想,从根本上来说,我关心的是能够制作对其他人有用的复杂东西,这可以利用我的能力,使我能够发挥创造力,创造出其他人可以使用的东西,如果我仅限于绘画、雕塑或其他古典艺术,我将毫无希望。
And so for me, that’s really the meaning of life, and then maybe you raise a couple of good kids to hand the baton off to.
所以对我来说,这确实是生命的意义,然后也许你养育了几个好孩子,将接力棒交给了他们。
Yeah, and you’ve created a lot of cool stuff over your life that impacted millions, probably billions of people, and now you’re inspiring…
是的,你一生创造了很多很酷的东西,影响了数百万人,可能是数十亿人,现在你正在鼓舞人心……
1:49:14 You’re creating cool stuff for everyone to see on your YouTube, and you’re inspiring people in that way.
您正在创作很酷的内容供每个人在您的 YouTube 上观看,并且您以这种方式激励人们。
So for everything you’ve done in the past and everything you’re doing now, I’m a big fan.
因此,对于你过去所做的一切和现在所做的一切,我都是你的忠实粉丝。
I’m really grateful for what-
我真的很感激什么——
Great.
太棒了。
…
……
1:49:40 you’re doing and grateful that we got a chance to talk today.
你正在做并且很感激我们今天有机会交谈。
Thank you, brother.
谢谢你,兄弟。
Thank you.
谢谢你。
Thanks for listening to this conversation with Dave Plummer.
感谢您收听戴夫·普卢默的对话。
1:49:46 To support this podcast, please check out our sponsors in the description.
为了支持这个播客,请在说明中查看我们的赞助商。
And now, let me leave with some words from Bjarne Stroustrup, creator of C++ and somebody who, by the way, I interviewed a long, long time ago, Episode 48 of the podcast.
现在,让我以 Bjarne Stroustrup 的话结束,他是 C++ 的创建者,顺便说一句,我很久以前采访过播客的第 48 集。
He said, “There are only two kinds of languages.
他说:“世界上只有两种语言。
The ones people complain about and the ones nobody uses.” Thank you for listening, and hope to see you next time.
那些人们抱怨的东西,那些没人使用的东西。”感谢您的收听,希望下次再见。
本集资源与出处
- 视频在 YouTube 收看
- 音频官方 MP3 直链来自 lexfridman.com 官方播客 RSS
- 官网Lex Fridman 官网本集页面
- 文稿官方 Transcript(lexfridman.com)