本集简介
双语字幕
仅展示文本字幕,不包含中文音频;想边听边看,请使用 Bayt 播客 App。
以下是与戴夫·普拉默的对话,他是一位程序员,也是微软的老牌软件工程师,曾参与Windows 95、NT和XP的开发,打造了许多令人惊叹的工具,其中一些如著名的Windows任务管理器,已被数亿人持续使用。没错,就是Windows任务管理器。还有Windows中的zip解压缩支持功能。他还将《太空军校生弹珠台》(即3D弹珠台)的代码移植到了Windows平台。
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. Yes. The Windows task manager. And the zip unzip compression support in Windows. And he ported the code for Space Cadet Pinball, aka three d Pinball to Windows.
如今,他因其精彩的YouTube频道“Dave's Garage”而深受众多程序员和工程师喜爱,你绝对应该去看看。此外,他还写了一本关于自闭症及其人生故事的书《自闭症百万富翁的秘密》,书中提供了关于如何在自闭症背景下处理人际关系、职业和日常生活的有趣见解。综合这些因素,这是一次关于编程、计算、技术历史与未来,以及在传说中的车库中打造酷炫事物的超级有趣对话。现在,快速提一下我们的赞助商。
Today, he's loved by many programmers and engineers for his amazing YouTube channel called Dave's Garage. You should definitely go check out. 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. And now, a quick few second mention of your sponsor.
详情请查看描述或访问lexfreedman.com/sponsors。这是支持本播客的最佳方式。我们有Uplift Desk,这家了不起的公司长期为我提供所有办公室和袖珍工作室家具。Zogdoc是一个连接患者与顶级医疗保健提供者的平台。Fin是用于客户服务的AI代理。
Check them out in the description or at lexfreedman.com/sponsors. It's the best way to support this podcast. We got Uplift Desk, which is an incredible company that has been my go to for a long time for all my office and pocket studio furniture. Zogdoc, which is a platform that connects patients with top rated healthcare providers. Fin for AI agent for customer service.
Alio Capital面向那些了解全球市场动荡的人。最后是Shopify,我们曾与DHH讨论过二十小时的公司,因为他们使用Ruby on rails并证明了其可扩展性。总之,明智选择吧朋友们,现在进入正题。我尽量让赞助内容有趣,但如果你跳过,请务必看看赞助商。我喜欢他们的东西,也许你也会。
Alio Capital for folks who understand the turmoil of global markets. And finally, Shopify, a company that we've talked about for twenty hours with DHH, because they use Ruby on rails and they show that it can scale. Anyway, choose wisely my friends and now onto the full batteries. I try to make them interesting, but if you skip, please do check out the sponsors. I enjoy their stuff, maybe you will too.
如需联系我,无论何种原因,请访问lexfreedman.com/contact。好了,开始吧。本集由一家我赞不绝口的公司赞助。事实上,今天我收到了Uplift desk的另一张桌子。
To get in touch with me, for whatever reason, go to lexfreedman.com/contact. Alright. Let's go. This episode is brought to you by a company that I cannot sing enough praises to. In fact, today, I got another desk from Uplift desk.
我拥有的桌子数量,它们带给我的快乐是无法估量的。正如我所说,它是我所有办公室和播客工作室家具的首选。我有一张放Linux主机的桌子,一张放Windows主机用于编辑的桌子。还有一张桌子上放着我正在研究的四足机器人——一个大四足机器人和一个小型四足机器人宝宝。
The number of desks I have, the amount, the quantity of joy they bring to my life is immeasurable. Like I said, it's my go to for all office and podcast studio furniture. I have a desk with a Linux box, I have a desk with a Windows box I do editing on. I have a quadruped sitting on top of another desk that I'm working on. There's a there's a big quadruped, and it's it's a four legged robot, and then there's a mini baby quadruped.
它们都放在桌子上,我正在研究它们,它们连接到Linux主机,但需要频繁拆装。当然还有播客中你看到的那种木质色调的播客桌。我有三张这样的桌子,已经使用多年。早在Uplift desk成为赞助商之前很久很久就在用了。今天我又在播客工作室添置了一张新桌子,那里有更多机器人、Linux笔记本,我正在那里进行更多机器人相关的开发工作。
They're they're both sitting on the desk, and I'm working on them, and it's connecting to the Linux box, but there's a lot of I have to take them apart. I have to bring them back together. And then, of course, the podcast desk that you see on the podcast, that sort of woody color. I have three of those desks, and I've been using that for many years. Long, long, long, long, long before Uplift desk was a sponsor, and I just got a new desk today in the podcast studio where I have some more robots, Linux laptop, and I was doing some more development to do some robotics related stuff in the podcast studio.
总之,这些都是升降桌。可定制的选项多得惊人。我可以为这些家伙担保——好人、好桌子、好人体工学设计,简直太棒了。访问upliftdesk.com/lex并使用代码lex,可获赠四件免费配件、免费当日送货、免费退货、15年保修以及额外订单折扣。就是upliftdesk.com/lex。
Anyway, the these are standing desks. You can customize the amount of options, it's incredible. I can vouch for these guys. Good people, good desks, good ergonomics, just incredible. Anyway, go to upliftdesk.com/lex and use code lex to get four free accessories, free same day shipping, free returns, a fifteen year warranty, and an extra discount off your entire order that's upliftdesk.com/lex.
本集也由Zocdoc赞助,这是一个连接患者与顶级医疗保健提供者的平台。如果你像我一样总忘记在问题恶化前看医生——你知道,体检、确保一切正常这些事我总是不做,并且非常焦虑。焦虑的主要原因,至少在我看来,是缺乏找医生的工具——那种易用、快速、高效、可访问且选择众多的工具。而Zocdoc在这方面做得极其出色,我推荐他们,这是我找医生和医疗保健提供者的首选平台。
This episode is also brought to you by Zocdoc, a platform that connects patients with top rated healthcare providers, if you're anything like me remembering to go see a doctor before things go terribly wrong. You know, checkups, making sure everything's okay is is a thing I just don't do, and I'm very stressed about. And really the main reason for the stress is because, at least in my perception, a lack of tooling for finding a doctor, for having easy to use, fast, efficient, accessible, huge number of choices, tooling. Okay? And so ZocDog does that incredibly well, I can recommend them, that's my go to place to find a doctor, to find a healthcare provider.
说这些话正在激励我自己去做检查,因为我很久没看医生了。希望我的话能激励我,或许也能激励你——如果你像我一样一直回避这个问题,因为总觉得没事直到某天出事。到那时你会后悔没早点访问zocdoc.com/lex。就是z0cd0c.com/lex。本集还由Finn赞助,这是一款世界级的热门客户服务AI代理,受到5000名客户服务主管的信任。
Me saying these words is motivating me to do so because I haven't seen a doctor in quite a while, and so hopefully my words motivate me and perhaps even motivate you if you're anything like me and have been avoiding this topic because everything's gonna be fine until it's not. One day it's not going to be fine and you're going to regret not going to zocdoc.com/lex. That's z0cd0c.com/lex. This episode is also brought to you by Finn, a world class popular AI agent for customer service. They are trusted by 5,000 customer service leaders.
它们甚至获得了包括Anthropic和Synthesia在内的顶级AI公司的信任,这就是它们可信的证明。当一家正规AI公司委托你的AI公司为其处理AI事务时,这便验证了你的专业性。平均59%的问题解决率,90天内最高100万美元退款保证。其核心是Fin AI引擎——一个持续优化的系统,能让你不断循环分析、训练、测试、部署,使系统越来越智能,最终让客户满意。
They're even trusted by top AI companies including Anthropic and Synthesia. That's how you know they're legit. When a legit AI company trusts your AI company to do some AI thing for you, that's how you know you're legit. 59% average resolution rate, ninety day money back guarantee up to $1,000,000. It's powered by the Fin AI engine, which is a continuously improving system that allows you to analyze, train, test, deploy, and repeat that loop over and over and over until the thing gets smarter and smarter and smarter, and your customers are happy.
访问fin.ai/lex了解如何变革客户服务并扩展支持团队。网址是fin.ai/lex。本期节目也由Alio Capital赞助,这款应用让我特别兴奋,因为不仅我在使用它,还通过它学习投资知识。这款投资应用由深谙全球市场与日益分裂世界宏观经济的人士设计——正如我之前提到的,这种分裂体现在政治、社会和经济层面。
Go to fin.ai/lex to learn more about transforming your customer service and scaling your support team. That's fin dot a I slash lex. This episode is also brought to you by Alio Capital, a company, an app that I'm especially excited about because not only am I using it, I'm learning about investment from it. It's an investment app that's designed by people who understand global markets and the macroeconomics of a world that is increasingly becoming divided. As I've mentioned before, politically divided, socially, economically divided.
Allio由Altitude AI驱动,能实时识别通胀、利率和全球风险变化,并相应调整你的投资组合。如果你的投资工具没有加入这剂AI调味料,你可能错过了这个AI飞速进化的领域。我认为使用至少部分依托AI的投资工具非常明智。Alio Capital在这方面表现卓越,适合主动型或被动型投资者——设置后即可忘记,不必焦虑,只需知道投资交给了可靠平台。可通过应用商店、Google Play下载,或发送Lex至511511。
Allio is powered by Altitude AI, which identifies shifts in inflation, interest rates, and global risks, and then adapts your portfolio in real time. If your investment tooling doesn't have a little bit of the AI spice in that delicious recipe, I suspect that you might be missing out on the quickly evolving space where AI is getting smarter and smarter and smarter. So I think it's very wise to be using tooling that's leveraging at least in part AI for doing the investment. Alio Capital does that extremely well, and is doing so for hands on or hands off investors, set it and forget it, try not to think about it, it all stresses me out, I just wanna know that whatever investment I'm doing is in good hands. Anyway, download their app in the app store, Google Play, or text Lex to 511511.
Alio Capital(拼写为a l l I o),发送Lex至511511。哦,还有这句免责声明:投资存在风险,可能损失本金。历史表现不预示未来结果。详见条款细则,可能产生税费。最后朋友们,本期节目也由Ruby on Rails赞助。
That's a l l I o capital, text Lex to 511511. Oh, and here comes the one small print thing I'm supposed to say, investing involves risks including the potential loss of principal. Past performance does not guarantee results. See terms and conditions, tax fees may apply. And finally, friends, this episode is brought to you by Ruby on Rails.
开个玩笑。实际赞助商是Shopify——这个平台能让任何人通过精美网店随处销售。为什么提到Ruby on Rails?如果你想见证爱情,甚至重新坠入爱河,不妨收听我与DHH六小时的对话,他阐述了对Ruby语言的深爱,以及这种热爱如何催生出传播世界之美的Ruby on Rails。
No. I'm just kidding. It's brought to you by Shopify, a platform designed to anyone to sell anywhere with a great looking online store. Why do I mention Ruby on Rails? If you're not familiar and you wanna know what love is, you wanna watch somebody fall in love and maybe you yourself fall in love all over again, then listen to the six hour conversation with DHH, where he elucidates his deep love for the Ruby language, and why that makes his creation of Ruby on Rails a continuation of the beauty that he spreads throughout the world.
Shopify CEO Toby Ludwig显然也看到了Ruby on Rails的这种美,据我所知Shopify大量基础设施基于此框架。Toby和团队出色证明了其扩展性——他是真正深入代码层的工程师型领导者,这种既能编码又通晓各环节运作的领袖令人钦佩。我曾与Toby相处,他同时也是个能在技术与哲学间自如切换的可爱之人,这类对话总是充满乐趣。
Anyway, the CEO of Shopify, Toby Ludwig, clearly saw the same kind of beauty in Ruby on Rails and that's why so much of the software infrastructure of Shopify as far as I understand is done on Ruby on Rails and Toby and the Shopify team have been really good at showing that the thing scales. I mean, he's a legit engineer. An engineer, design, a leader that goes to the ground floor and still is coding, still wants to understand how every piece works. It's really incredible. I love those kinds of leaders and I got a chance to hang out with Toby, and he's also just a sweet person and a mind that goes effortlessly between the technical and the philosophical, which is some of the most fun people to talk to.
现在你可以通过shopify.com/luxe(全小写)享受1美元/月试用期,立即将业务提升至新高度。这里是Lex Friedman播客,支持我们请查看简介中的赞助商或访问lexfreedman.com/sponsors,欢迎订阅、评论并分享给可能感兴趣的朋友。
Anyway, you, my friend, can sign up for a $1 per month trial period at shopify.com/luxe. That's all lowercase. Go to shopify.com/luxe to take your business to the next level today. This is the Lex Friedman podcast. To support it, please check out our sponsors in the description or at lexfreedman.com/sponsors, and consider subscribing, commenting, and sharing podcast with folks who might find it interesting.
现在有请Dave Plummer。还记得你的第一台电脑吗?我记得——虽然很久之后才拥有,但
And now, dear friends, here's Dave Plummer. Tell me about your first computer. Do you remember? I do. I didn't own my first computer for a long time,
我使用的第一台电脑是TRS-80 Model I Level I 4K机型。五年级或六年级时(大约11岁),我骑车到当地Radio Shack。那里除了音响设备,还有堆标着‘电脑’的箱子。我向店员询问时,他们说刚到货还没组装。当时我挺早熟,就说‘我来帮你们组装吧’。
but the first computer I ever used was a TRS 80 model one level one four k machine. And I rode my bike in fifth or sixth grade, so was about eleven to the local Radio Shack. And you know, they had the standard component stereo systems, everything else Radio Shack had, but they had a stack of boxes that was labeled computer. And so I was asking the people that worked there about it, and they said, just got it, and they hadn't set it up yet. And so 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?
完全不知道。我是说,这不会比组合音响更糟。唯一的问题是,Tandy公司以其无限的智慧,对电源、视频和卡带使用了相同的五针DIN接口,所以它们看起来一模一样。如果插错了,就会把它炸掉。所以我仔细看了标签。
Absolutely not. I mean, it's no worse than a component stereo. The only thing is that Tandy and their infinite wisdom used the same five pin DIN connector for power, video, and I think cassettes, so they're all identical. And if you plug them in wrong, you'd blow it up. So I read the label.
然后让它运转起来,开始摆弄它,对电脑一无所知。所以我往里面输入英文命令,你知道,输入'print two plus two'能完美运行,但用这种基础的一级解释器输入更简单的英文是走不了多远的。
And got it working, wound up playing with it, and not knowing anything about computers. So I'm typing English commands into it, and you know, print two plus two works perfectly, yet more simple in English that you enter into a basic level one interpreter is not gonna get you very far.
所以你是在尝试用英语和它交流。
So you're trying to talk to it in English.
是啊,当时不懂。我现在还留着六年级写的一个程序草稿,逻辑上勉强说得通,但在当时任何解释器上都不可能运行成功。我花了好一阵子才搞明白它们到底是怎么回事。不过我每周四和周六都骑车去那里,他们很慷慨地让我使用那些机器。
Yeah. Didn't know any better. And I still have an old full scap that I wrote in sixth grade of a 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 graciously let me use the machines.
这是什么时候的事?79或80年吧。
When was this? 7980.
明白了。那时候的计算技术发展到什么水平了?我们具体在讨论什么?
Okay. What was the state of the art of computing back then? So what are we talking about?
嗯,当时三大机型已经面世。有TRS-80 Model I,PET 02/2001,还有Apple II差不多同时推出的。Apple II。
Well, the big three had come out. There was a TRS 80 model one. There was the PET 02/2001, and the Apple two came out roughly simultaneously. Apple two.
你会说这是有史以来最伟大的电脑吗?
Would you say that's the greatest computer ever built?
事后看来可能是。不过我觉得这个称号应该给Commodore 64。
Probably in retrospect. Well, I would probably give that to the Commodore 64.
是啊,我们在这点上看法一致。那是我第一台电脑,可能是在它发布多年后才拥有的。但没错,Commodore 64确实了不起。不过Apple II对个人电脑历史的影响确实巨大。
Yeah. You and I agree on this. That was my first computer, probably many years after it was released. But yeah, Commodore 64 is incredible. But yes, Apple two had a huge impact on the history of personal computers.
对,这很难
Right. It's hard
衡量长期影响,但我认为64本身可能影响了更多人,这就是我选择它的原因。
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.
你这么认为?销量确实更高。Commodore 64卖出了很多台。
You think so? The sales are certainly higher. So Commodore 64 sold a lot.
是啊,那些数字简直难以置信。
Yeah. I mean, the numbers are hard to believe.
取决于你相信哪个数据,但即便是中间值估计也相当高。好吧,酷。所以你最终升级到了Commodore 64。跟我聊聊那台机器吧。
It depends which numbers you believe, but even the medium estimates are pretty high. Alright. Cool. So you eventually graduated to the Commodore 64. Like, tell me about that machine.
你在Commodore 64上都做些什么?
What did you do on the on the Commodore 64?
呃,我做的第一件事就是把它的软驱给烧坏了,这很不幸因为这不是保修机。我父母当时没什么钱,所以我们是从Computer House买的,而不是大零售商。这意味着它坏掉后得寄回德国之类的地方修理。于是我就没了软驱,只能用磁带机——这在当时已经是最好的选择了。我写些小程序,还有个能从磁带加载的机器语言监视器。没有内置汇编器,但有反汇编器,所以可以用十六进制输入6502的操作码。
Well, the first thing I did was overheat the floppy drive on it, which is unfortunate because it wasn't a warranty machine. We had 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. 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. Didn't have an assembler built in, but had a disassembler, so you could enter the op codes in sixty five zero two in hex.
如果规划得仔细,你就能写出些基础程序。我就是这样入门的。我在上面写的第一个程序是《Galaga》的克隆版。虽然是个很烂的克隆,但主要敌人会随时间推移发动攻击。全部是用手工编写的机器语言写的,而且6502不能重定位。
And if you were careful about planning, you'd be able to write some basic programs. So that's kinda how I learned. And the first thing I ever wrote on it was a clone of 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 sixty five zero two.
所以如果你要在中间添加代码,就得手动跳转到别处,做完工作再跳回来。简直就是可怕的意大利面条式代码。但最后居然都能运行。我还做了备份想留给未来的学者什么的——天知道我当初在想什么。好吧。
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. 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. Okay.
然后我把空白软盘的内容复制到了数据软盘上。那就是我第一次接触数据管理的经历。所以我再也没有我第一个程序的副本了。
And I copied my blank floppy onto my data floppy. So that was my first experience with data management. And so I don't have a copy of my first program anymore.
那种感觉是怎样的,你还记得吗?就是做了件,恕我直言,有点蠢的事?这其实也是编程体验的一部分。
What was that feeling like, 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 destroy several weeks of work, and you know it was because you rushed, or you did something stupid, you made an unwise choice.
等等。能详细说说当时的编程情况吗?所以真的是机器语言?连汇编语言都算不上?
Wait. Wait. Can you tell me about the programming involved in that So it's literally machine language. So machine so it's not even assembly.
还不是汇编,因为系统里还没有汇编器。我本应该先写个汇编器作为第一个任务的,但当时没那么聪明,所以...
Not assembly yet, because there's no assembler built in. So I should have run an assembler written an assembler as my first task, but I wasn't that clever, so
写汇编器有多难?小菜一碟吧?
How hard is that to do? Trivial.
我觉得这种事会让人印象深刻。你反复犯同样的错误。比如C语言里有些语法问题,一旦犯错就永远忘不掉。对,这就是其中之一。
And it's one of those things that sticks, I think. 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 gonna forget and get raw. Yeah. And it's just one of those.
那么用机器码编程对程序员来说最大的限制是什么?
Like, what are then the limitations of programming in machine code as a programmer?
最大的问题是必须完全按顺序编写。至少在6502这种架构下,你无法后期插入代码,只能在末尾添加。某种程度上就像在磁带上编程。
The biggest issue is you have to write completely sequentially because at least in that variant sixty five zero two, you can't add things later. 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 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. K. Alright.
然后你把它删了。确实删了。那么,你是什么时候第一次爱上编程的?当你意识到,这玩意儿很特别的时候。
And then you erased it. I did. Alright. When did you first fall in love with programming? When you figured out, like, this is a this is something special.
我觉得对我来说分两个阶段。从TRC-80一代机开始,我就立刻对这些机器着迷了。我唯一想做的就是骑车去那里,花更多时间捣鼓它。我也确实这么做了,直到人家都不太欢迎我了。另一个顿悟时刻是在大学二三年级,那时我意识到:我热爱编程,却完全不知道未来要做什么。
I think there was two stages for me. I always knew immediately that I fascinated with these machines from the TRC 80 model one. It's all I wanted to do is 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 university when I realized, I love programming, but I have no idea what I'm gonna do.
是去某个地方让录像机的12点闪烁?还是去开发操作系统?毕业后到底要做什么我毫无头绪。但我热爱正在做的事,这给了我很大安慰。
Am I gonna make the 12 flash on a VCR somewhere? Or am I gonna go work on an operating system? I have absolutely no idea what I'm gonna 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, because I kinda love doing it, so
所以船到桥头自然直?对,只要跟随这种感觉,
So you'll figure it out? Yeah. As long as you're following this kind of feeling,
我就知道自己终于找对方向了。是的。
this I know I was in the right area, finally. Yeah.
明白了。你高中辍学了。
Alright. You dropped out of high school.
是啊,这可不是明智之举。好吧。
Yeah. Not the smartest move. Okay.
但你最终重返校园并取得了学业上的巨大成功,总体而言,作为一名程序员、开发者、软件创造者都非常成功。你是如何找到方向的?能讲讲辍学后又重新找回道路的历程吗?
But you ended up going back to school and being very successful at school, and just in general, successful as a programmer, 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. You just go less and less and less until you realize it's gonna 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.
于是我不上学了,必须找份工作。我在7-11便利店和油漆仓库之类的地方打工。其实7-11的工作挺有意思,他们总在轮换那些足够聪明能做夜班的人——既要处理账目又要做行政工作,夜班要干的活很多,但这些人都有不得不在7-11工作的个人原因。我就是其中之一,因为我没有高中文凭。
And so now, I'm not at school, and I have to get a job. So I'm working at seven Eleven, and a paint warehouse, and stuff like that. And seven 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, stuff they make the night shift do, but that have reasons personally that they need to work at seven Eleven. And I was one of those people because I had no high school diploma.
在7-11工作期间有哪些难忘的时刻?这份工作的艰辛让你领悟到了什么?
What are some memorable moments from that time at seven Eleven? Maybe what do you appreciate about the difficulty of that job?
对我来说最糟的可能是...虽然被持刀抢劫什么的也挺刺激,但最恶心的是测油尺。我们要用一根15到20英尺(约4.5-6米)长的木尺,上面标着英寸和英尺刻度。把它插进汽油罐再抽出来,根据汽油浸湿的位置读数——因为根本没有电子传感器。
Probably the worst moment for me. I mean, I got held up at knife point and stuff, that's all entertaining. But the worst the most the the suckiest part for me was doing the gas dips. We've got a long it's 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, then you bring it up and you measure where the gasoline sits because there's no electronic sensor.
嗯。我第一次操作时失手掉了测油尺,赶紧去抓——结果手上扎了上千根木刺,当时气温零下40度(约零下40摄氏度),简直糟透了。哦天,那一刻我意识到:绝不能一辈子干这个。
Mhmm. So I'm doing that, and the first time I do it, I drop the pole, and I regrab it. Well, that's about a thousand splinters of wood into your hands, and it's 40 below out, and that really sucked. Oh, wow. I realized, I don't wanna do this for my whole life.
我明白这个道理,所以
I knew that, so
好的。所以你当时就站在那儿,手上扎满木刺冻僵了。
Okay. So you stand there frozen with splinters in your hand.
就在某个时刻,我突然顿悟:下次必须做出改变。但三秒后我就意识到这想法有多荒谬对吧?不过那确实是我人生的转折点。虽然已经21岁,我还是去找了本地高中的校长问:能让我复学吗?
And at some point, I have a revelation about my life that next time I'm gonna do it differently. 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 gotta 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. It was his main reason. And I said, between now and then, somebody's gonna 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. You know, just if you can linger on that, the slow dropping out, 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 kinda have to to be part of society to do certain things. Right.
一旦你意识到不必跟随大众,你的人生要么会变得精彩绝伦,要么会异常艰难。
And if you realize, like, you don't have to do what everybody else is doing, you can either have an incredible life or a really difficult life.
问题在于,这个过程里你只是在做小决定——今天不去上课而已。对,你只做了这个决定。但次数多了,实际上你已做了重大抉择。
Well, problem with that process is you're making a much smaller decision. I'm just not gonna go to class today. Yeah. And that's all you're deciding. But you do that enough times, you're making a much bigger decision.
嗯,这才是问题所在。
Mhmm. And that's the problem.
所以想过非主流生活的话,最好明确做出重大决定。然后你才能心安理得地退出。别让自己...最终命运会替你决定。好吧。
So it's better to make if you wanna live life in a nonstandard way, it's better to make the big decision explicitly. And then you can stop going. Yeah. Don't allow yourself to make the the It'll be made for you eventually. Okay.
不过你后来重返校园,大学期间非常出色,而之前你并不是个好学生。
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.
确实。高中时我是个差生。甚至大学第一学期我仍不认真,几何补考勉强得了90分——那是为补修十二年级没通过的几何课。这吓到我了,我意识到:靠着1%的运气或教授放水,我差点就此终结大学生涯。幸好这些补习课成绩不会出现在正式成绩单上。
No. I was a terrible student in high school. And even my first semester of college, I still wasn't taking it quite serious because I got Mercy passed in Geometry 90, which is like the makeup class for the Geometry twelfth grade class that I didn't have. And that scared me because I realized by 1% or the grace of the professor who let me through, I just about ended my entire university career here. So fortunately, those marks don't count on any transcript because they're remedial classes.
于是下学期我有了全新开始,真正为自己而学,这才改变了一切。
And 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?
理想情况下,学校里总会有你喜欢的某些方面。无论是艺术、计算机科学、还是工艺课,什么都好。所以去选那些课程,然后咬牙坚持完成困难的部分,因为这比以后再做要容易得多。当然,这话从50岁的人嘴里说出来容易,对15岁的孩子来说就难多了。
Well, ideally, there's some aspect of school that you do enjoy. Whether it's arts, whether it's computer science, whether it's shop class, whatever. 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, it's harder to say when you're 15,
但是,是啊。
but Yeah.
这很有道理。
It makes a lot of sense.
好的。你加入微软的故事是怎样的?我们怎么从7-11便利店跳到微软的?
Alright. What's the story of you joining Microsoft? How do we get to there? From seven eleven to Microsoft? Yeah.
这是个
It's a
巨大的跨越。当时我重返校园,大概是大三那年。暑期我在一家电话公司打工,负责将他们的UBNet网络转换为TCP/IP现代网络架构。这工作主要是更换网卡,但还要解决为什么config.sys文件突然不让Lotus运行了——因为可用内存比之前少了10KB。那真是个计算机行业的黑暗时代,但我还是坚持做了。
big jump. So I had gone back to school, and I think it was my third year of university. I was working for a phone company for the summer as a summer job, and I'm doing conversions of their UBNet to TCPIP and modern networking. Which really a must, swapping cards, but then figuring out why the config dot sys doesn't allow Lotus to run anymore because it's got 10 k less than it used to. And it's just a horrible time to be working in computers, but I was doing it.
有天午餐时间,我拿着本叫《微软:比尔·盖茨与微软的崛起》(记得副标题是《硬盘》?)的书在美食广场阅读。这本书客观记录了微软的发家史、运营模式和企业文化。我完全被迷住了,因为这听起来正是我梦寐以求的工作环境。
And at lunch, I'm sitting in the food court with the old and the board, 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. 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.
但当时我在萨斯喀彻温省,能怎么办呢?后来我翻出自己大学期间开发的Hypercache软件注册卡——这是个Amiga电脑的文件系统缓存程序(因为Amiga原系统没有这功能)。我一张张查看那些手写邮寄地址的4x6英寸卡片,想找有没有微软邮箱的用户。
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. And so I went through my registration cards, because in those days, had a four by six card that people would fill out with their name and their address, and if they had an email, their email, and they send it in, they get notifications of updates and so on when it's shareware.
最后找到三四个微软员工,我就直接发邮件说'我是萨斯喀彻温大学的操作系统专业学生,正在寻找机会'。有位叫Alistair Banks的先生回复说可以引荐,后来通过电话面试,我暑假就去了MS DOS部门工作——这多亏了Ben Slifka的破格录用。
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 a operating system student in Saskatchewan looking for an opportunity. I don't remember exactly what I said. But one guy, Alistair Alistair Banks, he wrote back and he said, know somebody that I can put you in contact with. And he put me in contact with a guy named Ben Slifka, did a phone interview, who eventually went to pirate me to work in MS DOS for the summer.
我就是这样到那里的。
So that's how I got there.
你通过谈论超级现金自学成才。你开发了一款软件
You put yourself to school by talking about hyper cash. You build 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?
是的。它赚了不少钱。我是说,我卖出了几千份。每份20美元或40美元。
Yeah. It made decent money. I mean, I sold a couple thousand copies. Yeah. $20 a copy or $40 a copy.
那程序是用什么语言写的?
And what program what language was it written in?
C语言。C语言。所以有一些汇编代码。真正执行数据进出缓存工作的紧凑代码是68,000汇编。其他都是C语言。
C. C. 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. Everything else was C.
好的。这是类似文件系统IO的东西吗?
Okay. This is like file system IO?
设备块IO。所以任何从驱动器服务的块都会先经过我的缓存,这是一个n路关联缓存。它会尝试匹配驱动器的几何结构,并根据你试图一次读取整个磁道的情况进行预取,诸如此类。
Device block IO. 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 prefetch based on you're trying to read a whole track at one time, that kind of thing.
那时候尝试把你的软件推广出去是什么感觉?比如,你是怎么找到客户的?
What what was it like trying to get your software out there at that time? Like, where how were you able to find customers?
是的,这很有趣。我记得最初是在Usenet和一些Amiga论坛上发布试用版,让大家免费试用30天。后来几家零售商开始进货。有次我和现在的妻子坐在她车里——她当时有部手机,因为她父亲特别担心她的安全。
Yeah. It's interesting. I think I started on Usenet and some of the Amiga forums posted, here's my trial version, try it out for thirty days, see what you like. And eventually got picked up by a few retailers. And I remember I was with my now wife in her car, she had a cell phone because her dad was very concerned about her safety.
那时是八十年代末,车顶装着天线,后备箱里放着巨大的机箱。突然有家软件零售商来电说要花20美元单价采购50份,对我来说就是一千美元,在1989年可是笔大钱。后来不少公司都开始批量采购。
And so this is late eighties, and she's got the antenna on the roof, and the big box in the trunk, the whole deal. But we got a call from one of the software retailers that wanted to buy 50 copies at $20, which to me is a thousand bucks, which in 1989 or whatever year it is, was a big deal. And so eventually, a number of companies just bought inventory.
让我们回到那个年代。比尔·盖茨和微软的故事非常精彩。你认为当时微软为何能主导软件和个人计算机领域,并在之后数十年保持领先?
Let's go to that time. 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. And I've been in academia, and I've been in industry to a certain extent. And you know that 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 gonna speak because I wanna look stupid. Mhmm.
明白了。比尔·盖茨本人有哪些特质促成了微软的成功?
Okay. What are 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 in every desk. 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,
比如说非常简单的产品。MS DOS严格来说并不复杂,但完美契合了当时市场需求。没错,MS DOS改变了游戏规则——而你加入的正是这个团队。
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. Yeah. I mean, MS DOS changed the game. And that's actually the team you joined, the MS DOS team.
我记得你是在Windows 95发布前加入的。聊聊MS DOS的故事吧,它的成功应该是微软崛起的关键转折点。
And I think you joined before Windows 95 Yeah. Was released. So tell me about the story of MS DOS. It's success of MS DOS was probably pivotal to the success of Microsoft.
是的。在DOS之前微软主要是语言公司,为多种计算机开发BASIC,还有Fortran和Pascal编译器。但让MS DOS成为每台PC标配的协议,使他们确立了几十年都受益的行业标准。
Yeah. 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. 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 leverage for decades going forward.
某种程度上他们很幸运,但另一方面这个决策确实高明。虽然没向IBM收取高额授权费,但确立标准带来的长期优势无可估量。
And to a certain extent, they lucked into that. And on on on other hand, they were smart to have done it. So because I they didn't charge IBM a lot of money for it, but making it a standard really played out to their advantage over time.
那时候MS DOS还没有图形界面。你能简单说说MS DOS到底是什么吗?
So at that time, MS DOS, no graphical interface. Can you just speak to what the heck MS DOS is?
它本质上是个命令启动器。你输入命令名称后,系统会查找当前目录或特定文件夹路径,若存在就加载到内存执行。这就是MS DOS 90%的功能。虽然它有环境变量、一些复杂功能和内置的小型脚本语言,但本质上只是个操作系统外壳,让你能使用电脑资源如硬盘或CPU,且不支持多任务处理。
It's largely a command launcher. So you type in a name of a command, it looks 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. 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.
没有图形界面。不过微软在DOS 5.0里为编辑器和Quick Basic添加了基于文本的图形界面,DOS 4.0还有个类似图形文件管理器的DOS Shell。他们做过这些尝试,但主要还是命令行模式。
There's no graphical interface. Now Microsoft did add a text based graphical interface for things like an editor and quick basic in DOS five, I believe. And it was a DOS shell, which was sort of a graphical file manager in MS DOS four. So they experimented with it, but it's largely a command prompt.
它能与外部设备通信吗?比如驱动之类的?MS DOS作为操作系统有多大的扩展性?
Did does it have ability to communicate with external devices, so drivers and all that kind of stuff? Like how expansive of an operating system was MS DOS?
它受限于最初的x86指令集,只能寻址640K内存。后来通过高端内存和扩展内存等补丁方案突破限制,但要避免占用基础内存需要很多复杂操作。
Well, it was limited by the original x 86 instruction set, which limited it to six forty k. 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.
你在MS DOS上编程是什么体验?除了640KB内存限制,还有什么有趣的细节?
Yeah. I mean, you so you programmed on MS DOS. What what's it like? What are some interesting details there? Like you said, there's the memory constraints of six forty kilobytes.
640KB是永远的上限。作为系统开发者更要谨慎,因为你每多用10KB内存,全球每台电脑就少10KB可用。这是种重大责任。
Yeah. Six forty k 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. So if you use 10 k needlessly, you're gonna every machine in the world now has 10 k less. So that's kind of a big responsibility.
比尔·盖茨真说过那句...
Is that a true quote from Bill Gates where he said
'640KB对任何人都够用了'?不,不是他说的。
Nobody will ever need more than six forty k. Yeah. No. It's not him. Okay.
这话被归到他头上,但并非事实。
It's been attributed to him, but not real.
好的。那么我想问,作为实习生加入MS DOS及之后时期,你参与过哪些有趣的项目?
Okay. So I mean, what are some interesting aspects that we that you were able to do as an intern and when you joined at MS DOS and beyond?
我最初的工作是改进SmartDrive磁盘缓存程序,因为我对磁盘缓存很熟悉。嗯。当时CD-ROM刚兴起,微软书架是少数能支持的应用之一。我为其添加了CD-ROM缓存功能——要知道,巧妙设计的话,缓存能让CD读取速度提升数十倍。
One of the first things I did was to take SmartDrive, the disk cache, because I am familiar with disk caches Mhmm. And to add CD ROM caching to it, because I was new. CD ROMs were just just coming out. Microsoft Bookshelf is one of the few products you could run for it. And as you can imagine, caching a CD speeds it up by dozens of times if you're smart about it.
这个优化带来了显著的性能提升,是个很棒的项目。更重要的任务是将SmartDrive和后来的DoubleSpace压缩引擎迁移到高端内存区。嗯。在不深入技术细节的前提下,x86架构有个A20地址线——我可能记反了,正确率五五开吧。
So it it was a big performance win and a nice thing to work on. A bigger part of that was moving a bunch of smart drive and eventually the double spaced compression engine up into what's known as high memory. Mhmm. And without rat holeing on the technical aspect of it, on the x a six, there's something I believe called the a 20 line. And I probably have this backwards, or I got a fifty fifty shot at it.
当A20线激活时,内存指针会在1MB处回绕。嗯。否则指针会继续向上寻址。通过组合段寄存器和偏移寄存器,可以访问超过1MB的内存空间,从而额外获得64KB内存。
But if you've got the a 20 line asserted, then your memory pointers wrap at the one megabyte mark. Mhmm. 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 64 k.
把代码放在那里,再从低内存跳转过去,就能多榨出64KB内存。我们为几个产品实现了这个方案。当时我完全不懂高端内存——毕竟之前是Amiga程序员,去微软前从没写过x86代码。
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 64 k out of the machine that way. And we did that for a couple of the products, and that's I had no idea what high mem was because I was an Amiga programmer, and I'd never written any x 86 code before I got there. So
听起来你参与了个很酷的优化项目。对了,当时Windows 95也在同步开发吧?你有机会和那个团队合作吗?
So that was like a cool optimization that you got to be a part of. Yeah. So what about Windows? There was a parallel development of Windows 95, right, at that time. Did you get did you get a chance to interact with those folks?
其实我参与过三四个月的Win95开发,在COM/OLE团队负责演示缓存——比如当Word文档插入Excel表格时,不需要每次都加载Excel来渲染,我们用增强图元文件做缓存。这个功能随Win95发布了,但入职半年后我转到了Shell团队,之后就一直做NT系统。
I actually worked on Windows 95 for about three or four months. I was on the comm 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, you don't want Excel to have to be loaded to render it every time, so there's a presentation cache of enhanced meta files. And I was working on that. 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.
明白了。95和NT有什么区别?
Okay. And what's 95? What's NT?
Win95是16位系统Windows 3.1的进化版——3.1是首个流行的Windows版本。95增加了32位支持、VXD驱动等新技术,还有全新界面。当时具有革命性,人们甚至彻夜排队购买。
Windows 95 is an evolution of the original 16 bit Windows three one, which was the very first popular version of Windows. And it adds 32 bit support, and then VXD drivers, and a bunch of new technology, and an entirely new user interface. And it's something that at the time was revolutionary. People lined up at night to wait in line to buy the thing.
能带我们回到那个年代吗?为什么95相比3.1是巨大飞跃?毕竟苹果早有图形界面,3.1也有图形界面,95的突破性体现在哪里?
Can you just take us back to that time and describe why '95 was such a big leap from 03/01? So Apple already had a graphical interface. Windows 03/01 had a graphical interface. Why was Windows '95 such a gigantic leap?
我不想把它做得像开始菜单那样基础,但我认为这是其中很重要的一部分。记得我第一次看到它时,确实如此。我无法具体说出它哪里与众不同又令人惊叹,但我意识到我想参与其中,这就是我开始编写一个外壳扩展的原因,后来这个扩展在某个阶段变成了压缩文件夹功能。嗯。我只是被这个新外壳深深吸引,这最终让我加入了那个团队。
I don't wanna make it as basic as the start menu, but I think it's a big part of it. I know when I first saw it Yeah. 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. But Mhmm. I was just fascinated by the new shell, and that's why I wound up working on
正是这个团队将那个外壳带到了NT系统,也就是今天的Windows。你会说这是有史以来最伟大的操作系统吗?什么是有史以来最具影响力的操作系统?
the team that brought that shell over to the NT in what's Windows today. Would you say that's the greatest operating system ever? What's the most impactful operating system ever?
Windows 95在我心中排第二。我认为OS/360会是第一名。
Windows 95 would be number two for me. I think OS three sixty is gonna be number one.
好吧,有意思。
Okay. Interesting.
想象一下,你可以在1962年用一台机器编写COBOL程序,然后跳进时光机,来到波基普西市,启动一台IBM z17大型机,在今天运行这个程序。而且他们已经这样运行了这么多年。这些都是商业领域的应用,我们作为消费者很少接触。但我觉得它对商业领域的影响力,可能就像Windows 95对家庭用户的影响力一样大。然后Linux在我这里大概排第三。
Could you 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 z 17 mainframe and run it today. 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. And then probably Linux would be number three for me.
我把Linux看得比Unix更重要,虽然这样说不太准确,因为没有Unix就没有Linux。但Unix、BSD等系统的影响主要在学术领域。它们是由程序员为程序员开发的。
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. It's by programmers, for programmers.
所以,是的,Linux创造了——我是说,它最大规模地体现了开源精神。对吧?它几乎创造了一个社区。它创造了一种编程精神,这种精神一直延续至今。确实如此。
So, yeah, Linux created I mean, it was the embodiment of the open source spirit at its largest scale. Alright? So it almost created a community. And it it it created a spirit of programming that propagates to this day. That's true.
确实如此。规模很重要。
That's true. Like, scale matters.
是的。现在它在服务器领域的普及程度——我不确定是否达到了System/360的水平,但几乎无处不在。
Yeah. And its penetration on the server side of things now is don't I if it's equivalent to what System three sixty achieved, but it's almost ubiquitous.
所以,是的。这个世界——我是说,这是宇宙中一个安静的秘密——它运行在Linux上。好了。那么跟我聊聊那时候的工作日吧。那时候的工作日是什么样的?
So Yeah. The world I mean, this is the quiet secret of the universe, is it runs on Linux. Okay. So tell tell me about the days, your workdays. What what were they like back then?
回到MS DOS和Windows 95的时代。带我了解一个高效的工作日。
Back back in the MS DOS, Windows ninety five days. Take me through a productive day.
嗯,你的一天从下载通讯录开始,当时微软有约一万到一万五千名员工,我们都使用MS Mail。我们刚从名为Miss Piggy的PDP 11主机迁移过来,那台机器运行的是Whizmail,现在我们改用MSmail。但MSmail有个固定通讯录,每位用户每天早上都必须下载。当一万人同时下载一万人的通讯录时,情况就会变得相当混乱。我记得那时我们用的是10兆比特的网络。
Well, your day starts coming in, you gotta download the address book, which is Microsoft has between ten and fifteen thousand employees at this point, and we're all on MS mail. We're just getting off of the PDP 11 called Miss Piggy, which ran Whizmail, and we're running MSmail. But MSmail has a fixed address book that every user must download every morning. And when there's 10,000 people downloading 10,000 people, it gets pretty messy. And I think we're on 10 megabit networking at the time.
所以你的第一个小时都在下载通讯录,这总是令人沮丧。但你会利用这段时间查看夜间崩溃报告,这些崩溃来自我们称为'压力测试'(NNT)的流程。所有闲置的机器整夜都在运行测试程序试图让自己崩溃。如果成功崩溃,它们会通过串行线缆连接到另一台机器的调试器,你可以远程调试那台崩溃的机器。等你到办公室时,故障已经过初步分类。
So your first hour is downloading the address book, which was always frustrating. 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. All the machines that are unused run tests all night long and they try to crash themselves. And if they manage to crash themselves, they 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.
比如发现开始菜单有崩溃,就会把这个bug分配给Dave。所以你到岗后的第一件事就是连接调试,因为得把那台机器还给它的主人并解锁。这就是你每天的第一个小时——基本就是在处理夜间压力测试产生的bug分类。之后可能就要回归编码了,不幸的是80%时间都在修bug,至少在我的职业生涯里是这样。
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 gotta get that machine back to the guy that owns it and unlock the machine. So that's your first hour of your day. It's 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.
我的工作主要是移植代码和修复缺陷。很少编写新代码,当然也有例外。我会私下写很多新代码来释放压力。从日常重复性工作——总是修复别人代码的bug中解脱出来,这是非常宝贵的学习经历。
It 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 Mhmm. From a day day to day grind of always fixing bugs in other people's code, which is amazing learning experience.
所以你在微软做了很多移植工作?是把Windows 95代码移植到NT系统上吗?
So you did a lot of the at Microsoft, you did a lot of the porting of what is it? Windows 95 code to NT?
没错。我们把整个Windows 95用户界面移植到NT系统,其中一项重要工作就是将其转为Unicode编码。所有8位字符都要改成16位,指针处理变得相当混乱——你可以想象这种代码转换的复杂度。
Yeah. We took the entire Windows 95 user interface, and we ported it to NT, which me meant making it Unicode for one thing. So everything that was eight bits is now 16 bits, so pointers it's it's quite a mess when you switch the code over, as you can imagine.
能详细说说移植工作具体涉及哪些内容吗?
Can you give us insights in what is involved in porting?
这就像闯进别人家里翻箱倒柜,看到他们不想让你发现的东西。你会找到挂在墙上的精美画作,也会在床头柜里发现些令人不安的物件。我曾见过一段200多字符宽的代码,里面夹杂着各种脏话。虽然在我离职前这些都被清理干净了,但那些代码确实算不上世界级的专业水准。
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. Yeah. You find all the good stuff, the pretty pictures hanging on the wall, and you find some disturbing stuff in the nightstand. I saw a code that was like 200 some characters wide with, you know, profanity and swears in it. And 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.
没错。我是说,这就是程序员的故事。你以为自己写了一段代码,以为永远不会有人看到,但有时候,往往这段代码会被后来很多人看到,包括五年后的你自己。你自己回头看自己的代码。好吧。
Yeah. I mean, that's the that's the story of programmers. You think you write a piece of code, and you think you'll never you'll never be seen by anybody, and sometimes, oftentimes, that code is gonna 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.
那么跟我讲讲Windows NT吧。那也是个巨大的飞跃。
So tell me about Windows NT. That was a giant leap too.
确实如此。它基本上是从零开始设计的。他们从数字设备公司挖来了戴夫·卡特勒,他曾为他们开发过VMS和RSX-11等操作系统。我记得是在DECwest的Prism和Micah项目被取消后,他带着整个团队转投了微软。
It was. 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. And so he came over after I believe it was Prism and Micah were some projects at Deck West that got canceled. 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.
具体交易细节我不清楚,但整个团队都过来了。戴夫·卡特勒、马克·卢科夫斯基等DEC的精英都来了。他们虽然从零开始,但也参考了OS/2作为起点。不过OS/2是用汇编语言写的,而NT要用C语言编写。至于他们借鉴了多少,我其实并不确定。
And I don't know the specific of the deal, but they all showed up. So you had Dave Cutler and Mark Lukowski and all these really smart guys from Deck. And they did basically a clean sheet, but they also had OS two as a starting point. But OS two is, of course, written in assembly language, and NT is gonna be written in c. 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.
你说戴夫·卡特勒是Windows背后的灵魂人物?能详细说说吗?
You said that Dave Kautner is the man, the mind behind Windows. Can you can you explain?
戴夫·卡特勒是内核架构师。就像Linux世界的林纳斯,Windows世界有戴夫·C。戴夫·C。明白吧。
So Dave Cutler is the architect of the colonel. So he is Linus in the Linux world. It's Dave C in the Windows world. Dave C. Okay.
当然也有其他人做出重大贡献,但我觉得他始终是核心推动力。他现在应该有85岁了,仍坚持每天写代码。作为微软院士,据我所知至今仍去公司上班。
And it's not that there weren't other people who contributed, of course, huge pieces to it. 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. He still codes every day. He's a Microsoft fellow.
就我所知,他至今仍坚持上班。所以
He as far as I know, still goes into work. So
你能谈谈那家伙的天才之处吗?比如,与他共事、与Dave Culler互动后,你觉得他的思维有什么有趣的地方?
Can you speak to the genius of that guy? Like, what's what's interesting about his mind, having having worked with him, having interacted with Dave Culler?
嗯,这家伙聪明绝顶。但他也像个农夫,会一直盯着你确保事情完成且不出错,绝不允许任何垃圾代码混进他的操作系统。嗯,他对此零容忍。
Well, the dude's wicked smart. But he's also like a farmer. 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. Mhmm. And he won't tolerate it.
在这方面他是个真正的严师,但我认为这很值得,因为让微软开发者接受Dave Cutler那种数字设备公司式的领导风格,是个巨大的范式转变。
And he's a real taskmaster in that regard, but I think it really paid off because it was a very big paradigm shift for Microsoft developers to be subjected to the Dave Cutler digital equipment style of leadership.
从那段经历中,你对大规模协作的软件团队成功之道有何领悟?当时微软有很多杰出工程师,如你所说,Dave Culler他们必须从头创建全新系统,其中许多至今仍在使用。
What did you learn from that about successful software teams where there's a large number of people collaborating? Because Microsoft had a lot of brilliant engineers back then. And like you said, Dave Culler, 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?
工具决定一切,我认为这是首要因素。当然人才也至关重要。但工具集的影响巨大——如果我们当时有Git,事情会轻松无数倍。
Tools are everything, I think, for one. And people are everything. We'll just give that to the granted. But the tool set is a huge factor. If we would've had Git, it would've been immensely easier.
我们当时用diff和手工增量文件来管理代码。能创建源代码分支对当时的我来说简直是奢侈,那功能要是有就太方便了。
We were using diff and, you know, manual deltas Mhmm. To do the sporting and stuff. So being able to fork a branch of source code would be a luxury that is new to me. So at the time, it would have been really handy.
那时你去隔壁串门时,有哪些令人难忘的对话?
What were some memorable conversations from that time when you walked over next door?
有件事我不在场:一个新人在团队里负责Cairo项目(本应是下一代革命性操作系统,比95版更先进,但最终流产),他在NT开发邮件组(几千人订阅)上怒喷NT系统启动体验有多烂。
Well, what 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. And Cairo was gonna be the next future operating system, was gonna be beautiful and have a whole new user interface. Newer than when it was '95. And it never materialized. But while they were working on it, one of the guys who was 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.
收到的回复是封史诗级骂战邮件——真该保存下来。我不点名是谁写的,他自己心里有数。那简直是愤怒邮件的艺术品,就像Lioness偶尔发的那些关于内核问题的暴怒邮件,情绪如出一辙。
And 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. Kinda like the ones you see Lioness send every now and then about colonel stuff. So it's a very similar sentiment.
当时有没有那种学术辩论?就是火药味很浓的那种
Were there like kind of intellectual debates? Like there's some some heated stuff
是的。
It was.
是和工程师们吗?
With engineers?
对,争论变得激烈起来。当一群高智商的人相互竞争时,技术优劣对某些人来说反而成了次要的,重点变成了在辩论中压倒对方。很多时候这种争论已经失去了建设性,但当时这种情况相当普遍。
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.
是啊。我在编程语言设计社区见过这类争论,比如Guido van Rossum(Python之父),这些社区的领导者会被这种争论耗得精疲力尽。因为人们几乎忘记了最初的目标,开始对细节吹毛求疵。工程师们聚在一起,甚至会为最愚蠢的语法细节争论不休。
Yeah. I've I've seen those kind of debates in, like, programming language design communities, like Guido van Rasam, the leaders of those communities that can wear them down. Because people get, you almost, like, 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 that's for programming language. I'm sure there's internal battles about specific kernel components.
没错。有个我输掉的争论至今想起来还让我耿耿于怀...
Yeah. I mean, there was one that I lost that still bugs me to this day, I think. And
因为至今...
because I still
是这样,当时我们在移植shell时正把整个系统从ANSI编码转向Unicode。每个字符从8位变成了16位。问题是我当时在用MIPS架构的机器做RISC移植,而MIPS不允许非对齐地址访问。当你把两个ID列表(本质是路径组件)拼接时——比如C盘根目录和Windows系统32文件夹——如果字符总数是奇数,地址就会不对齐。
think I was 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. Now the problem is I'm on a MIPS box because I'm porting it to risk. And you can't have unaligned addresses. But if you take two ID lists, which are basically path components, you take the one for c colon backslash, take the one for Windows, take the one for system 32, and you add them together.
我不得不花费大量精力启用异常处理,通过非对齐字节访问手动提取字符串。在MIPS机器上读取这种非对齐ID列表的字符串,工作量是正常情况的百倍到千倍。我主张虽然Windows 95开发已进入晚期且发布了首个测试版,我们仍应保证ID列表始终是偶数字节长度,或通过某种hack规避这个问题,让其他硬件上的代码能高效运行。结果这场讨论演变成了吼叫比赛和人身攻击,我输了。
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. It's just a it's literally like a 100 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. So I'm having the argument that even though it's late and the winner is 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 other hardware can just blaze through it. And it became a shouting match and sort of a personal match, I lost that one.
直到今天我仍认为,现在Windows里运行的那段代码比它应有的速度慢了几千倍,只是没人关心——毕竟它已经够快了。
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 because it's plenty fast.
不过确实。
But Yeah.
本可以快得多的。
It could be a lot faster.
是啊。所以你提到MIPS和RISC时,需要理解到多底层的程度?就是软件最底层,甚至你们开发时涉及的硬件层面。
Yeah. So yeah. I mean, you mentioned MIPS and RISC. How deeply did you have to understand the lowest level? So the lowest level of the software and even the hardware with the stuff you were building.
比如,要成功完成NT系统那些工作——还有更早的MS TOS——需要理解哪些抽象层级?
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 MS TOS?
这么说吧,每天得有半天时间耗在调试上。而且大部分时候都得泡在纯汇编语言的调用堆栈里,因为根本没有源码级调试。
Well, about half your day is gonna be spent debugging. And and most of the time is gonna be spent in call stacks that are in pure assembly language, because there's no source level debugging.
嗯。
Mhmm.
不像现在用Visual Studio,触发断点就直接跳转到源代码。你能看源码,但当时看到的全是机器反汇编出来的原始代码。所以...
So it's not like we're in Visual Studio and you hit a break point, then it pops up and there's the source code. You can go look at the source code, but you're looking at the raw assembly dump from the machine at all So
即使用C语言编程,调试也是在汇编层面。
even if you're programming in C, the debugging is in assembly.
没错,百分之百。所以我们都练就了调试四种架构的本事,不过我MIPS经验多些,相关任务就常分给我。
Yeah. 100%. So you get reasonably adapted debugging all four, but I had more experience in MIPS, so MIPS stuff would come my way.
这简直是耐力考验。能聊聊那种折磨吗?特别是没有现代调试工具的汇编调试。现在的编程新人可能不明白,编程不全是创造美好的事物,对吧?
That's a real endurance event. I mean, can you speak to that? The the torture that's debugging, especially that kind of debugging without the 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.
是的。我觉得职业生涯中20%的时间在创造,80%在调试和修复。
Yeah. I would say that 20% of my professional life has been creating, and 80% has been debugging and fixing.
没错。
Yeah.
我的意思是,我因为擅长解决问题而获得声誉,所以这类工作总会找上我,导致我花更多时间做这些。我不是那种以创意UI天才闻名、不断涌现新想法的人。所以我专攻棘手问题。但你会变得非常擅长。我并不介意,除非遇到那种追查太久却束手无策的情况——搞不懂为什么失效,或者它曾经怎么生效的,诸如此类。
And I mean, I got a better reputation as somebody 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. 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. It can be really really difficult. There's a psychological component, think, of perseverance.
那些耗时一天的bug通常有两种结局:要么是'哦,多了个分号'这种终于发现的简单错误,要么就是跨线程部门那些极其棘手的烂摊子。两种情况都有可能。
I think the ones that, you know, take you a day, they resolve one of two ways. Either it's like, oh, extra semicolon, and then you finally see it. Yeah. Or it's some horrible manifestation of cross threaded department nonsense that was really hard. But it can go both ways.
我遇到过个bug——其实不是我的问题——是任务管理器的bug表现:偶尔会显示CPU总使用率超过100%。这对任务管理器来说很可笑。我尝试解决很久,和内核组讨论时他们...可以说缺乏同情心。内核开发者比较特殊,他们对用户层问题没兴趣,认为肯定是我代码的问题。
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. So I had tried to resolve it for a long time, and I 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. There's probably some issue in my code.
对吧?他们可能没错。但这次例外,我确信问题不在我。于是我在代码里到处加断言,确保累加步骤永远不会超过100,最终总和也绝不会超100。
Right? 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 that the preparatory steps of adding this stuff together were never more than a 100. And that the final sum was never more than a 100.
结果断言从未触发。但偶尔还是有人报这个bug。最后我把电话号码写进断言提示:'看到此消息请致电APL 425836(我号码)'。终于有次在之前提到的调试器里抓到了现场——正好有人连着调试器时复现了问题。
And finally, it never asserted. 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 the APL at 425836, my phone number. 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.
我们成功排查后发现,这实际上是一个内核记账问题,而非任务管理器的问题。在我证明这确实是内核问题后,他们就在内核中修复了它。你可能会以为我们会随后移除我的电话号码,但我们只是将其注释掉了。所以它被发布出去,现在所有泄露的NT源代码里都能看到。这就是我如何找到任务管理器代码的方法——我在谷歌上搜索我的电话号码,就能反向找到
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 And that's That's how I find task manager code, is I search for my phone number on Google, and it will reverse find
是啊。
Yeah.
NT的源代码。
Fine. The NT source code.
你能谈谈断言(assert)这件事吗?对了,我记得你在推特或某个地方说过,如果你想非常严肃地对待断言,就把家里的电话号码写进去。没错,这是真的。
Can you speak to the assert thing? By the way, I saw I think you tweeted or you said somewhere that if you wanna take your asserts really seriously, you add your your home phone number in there. Yeah. It's true.
确实如此。虽然有点开玩笑,因为这可能不是最明智的做法,但你会发现的。
It's true. A little facetious because it's probably not the smartest thing, but you will find out.
但我的意思是,断言本身就已经是很严肃的事了,因为它会停止所有执行。这正是我非常喜欢断言的原因之一——它们会中止一切,迫使你解决问题。
But I mean, assert by itself is already a serious thing, because it stops at all execution. This is one of the reasons I really, really love asserts, because they they stop everything and force you to take care of the problem.
是的。我对断言也有点执着。我不会对那些我希望不成立的事情使用断言,我只断言那些我知道绝对不可能为真的事情。我认为这才是断言的真正意图,所以我可能是在强调显而易见的事实。
Yeah. I'm a little religious about my asserts too. 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.
但当断言触发时,这就是一个纯粹的bug,不是什么警告。
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 a search everywhere, you can get very quickly to the source of the problem.
没错。我倾向于...这不是我建议你后期回头补充的东西,而是应该在开发过程中自然融入的实践。所以对于每个函数,如果你有前提条件——比如你知道这个指针永远不会为空,那就断言它。如果你知道这个计数永远小于两倍字节宽度,也断言它。不要犹豫,因为如果断言触发,它是在帮你。
Yeah. I tend to it's not something I wanted to suggest you go back and add later, it's something you should do organically as you build your As you're building it. So for each function, if you've got assumptions, like, I know that this pointer is never null, well, assert that. 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, 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. Yeah. Or maybe I don't wanna do that, but it's like that. People don't assert because they're afraid they're gonna fire.
你想什么时候了解?你提到了任务管理器。显然我们必须谈谈这个——你创造的传奇程序,Windows任务管理器。告诉我你开发它的每个细节。Windows任务管理器是什么?
When do you wanna know? You mentioned task manager. Obviously, we have to talk about this, the legendary program that you created, the Windows task manager. Tell me every detail of how you built it. What is Windows task manager?
Windows任务管理器是一个可以查看系统中哪些应用程序正在占用计算机资源、使用硬件、CPU和内存的工具,它能识别哪些程序可能占用过多资源、卡死或崩溃,并允许你终止这些进程。所以它是个诊断与修复工具。
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, 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. I mean, it's a legendary piece of software. It's crazy. I mean, you just take it for granted.
就像开始菜单一样。对吧?是的。简直是天才之作。
It's like the start menu. Right? Yeah. It's like genius.
我很幸运参与开发了许多人们熟悉的项目。任务管理器是我为自己开发的副业项目之一,后来被公司采纳。我在家里开始编写它,完成了基础功能的搭建。当时我通过注册表中的HKEY性能数据获取统计信息,因为在家办公无法调用内部API。嗯。
Well, I had the great fortune of working on a lot of things that people are familiar with. And task manager is 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 kind of the basics up and running. And I was using, I think it's HKEY current perform 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. Mhmm.
当我把项目带回公司后,就能调用类似anti_query_system_information或anti_query_process_information这样的接口快速获取真实数据,这让它成为响应极快的应用程序。人们依赖它是因为我尽可能确保其可靠性。我不追求花哨功能,只专注实现基础功能集,但要求它必须极其稳定。
And when I brought it in house, then I was able to call things like anti query system information or anti query process information and get the real answers very quickly, which enabled it to become a very fast and responsive app. 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. And I got everything I wanted, but I wanted it to be really robust.
而且体积要小。最初版本只有87KB左右。
And so that and small. And the original was like 87 k.
明白了。你能谈谈开发这种不会卡死的软件需要哪些关键点吗?
Okay. Can you speak to what it takes to build a piece of software like that that doesn't freeze?
你不能做太多假设。比如通过shell调用程序时,那可能是需要90秒超时的TCP/IP网络路径。所以任何可能耗时的API调用,都应该放在独立线程中处理。这使得应用程序稍显复杂,因为所有操作都需要多线程处理。
You don't assume much. Right? 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 ninety seconds to time out. So anytime you do any kind of a p l API call like that that could take time, you're gonna wind up doing it on a separate thread. And so the app becomes a little bit more complex because everything is multi threaded.
好的。那么你当时用的是哪种编程语言?C语言。所以这是为Windows NT开发的?
Okay. So what programming language were you working in? C. So this was for Windows NT?
是的。最初是在NT 4.0版本发布的。
Yes. Okay. So this shipped initially in NT four.
明白了。这个程序有哪些有趣的细节?因为你需要让它尽可能简单,同时又要尽可能健壮。比如,你不得不实现哪些有趣的优化?
Okay. So what are some interesting details about this program? 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?
有几项现在看起来有点硬核的做法,我自己都惊讶当时能做到。比如,我完全不想链接C运行时库,所以确保绝不调用任何运行时函数,也没有链接它们。这帮我省下了C运行时库那大约96K的空间。
There's a couple of things I that are a little hardcore now. I'm surprised I did. Like, I didn't wanna link to the c runtimes at all. 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, 96 k or something.
要知道,只要调用任何一个C函数,程序体积几乎就会翻倍。所以我小心翼翼地避免这种情况,但实际上我写的是C++——本质上更像是带对象的C语言。为了让程序运行,我不得不手动通过调度表调用所有对象构造函数,因为没有运行时库帮你处理这些。相当于在用没有配套运行时的编译器工作,虽然不想深究技术细节,但这确实需要大量额外功夫。不过成功后,程序会变得极其精简高效。
So you know, it almost doubled the size of the app if you just touched any c call. So I was careful not to do that, but then I was actually writing in c plus plus which is c with objects more than anything. But in order to get it to work, I had to go through and call all the object instructors manually from the dispatch table and stuff because you don't have the run times to do it for you. So you're working with a compiler that doesn't have its run time and I don't want to rat hole 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.
这就是程序体积的关键。那么在追踪每个进程及其CPU占用率方面,有哪些特别的设计?
That's about the size Yeah. Of the program. What are some interesting aspects of tracking down, like, every every process and how much CPU usage in that One
最酷的是——虽然不能说发明了汉明码,但我确实在不知道汉明码存在的情况下,独立想出了类似方案。任务管理器里每个行列都有标记位表示是否脏数据,然后我可以用类似汉明码校验X/Y轴的方式定位变更的行列,只重绘必要部分。任务管理器与列表视图控件协同工作,能精细到只重绘帧间变化的单个单元格。因此它渲染极快,缩放无比流畅——而实现流畅缩放正是我个人对这个程序的最大追求。
of coolest things that I saw is, I don't wanna 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. So task manager is super efficient, and it works in concert with the list view control, which provides that functionality to go through and repaint as little as an individual cell that changes from frame to frame. So it could paint very fast, it could resize very smoothly. And resizing was probably my biggest personal goal with that app.
嗯。所以无论窗口缩放到多小都能正常使用。即便有32个CPU(当时根本不可能),它仍会绘制——我记得是8个图表然后折行显示——这套机制至今仍适用,我对此相当自豪。
Mhmm. 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. So I'm kinda proud of that.
确实了不起。你见证了任务管理器的演变历程。某种程度上它其实变化不大,虽然界面会随Windows版本变得更美观,但核心功能始终如一。
It is incredible. You've gotten the chance to sort of observe the evolution of task manager. In some ways, it really hasn't changed much. Maybe there's some prettier aspects to it that fit into the whatever version of Windows it's in, but it's really basically the same thing.
基础功能确实没变。主要是报表内容丰富了,比如增加了GPU和温度监控这些实用功能——这在当年可是无法实现的。
The functionality is very same. The reporting is more because they've added GPU and thermals and things like that, which is really nice to have. And we didn't have that ability in the day, so
我是说,你能说什么呢?你知道有没有进行过重构,还是基本上还是原来的代码?
I mean, what can you say? Do you know about like it was there any refactoring done or is it basically the same code?
据我所知,原始代码大部分都还在。所以上面叠加了绘图代码、暗黑模式代码等等,还有XML、架构代码,这让它从87k变成了4兆。但这就是我们生活的世界,没办法。
As far as I know, the original code is 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 87 k. But that's the world we live in, so.
是啊。这就是那种你一旦创造出来就永远存在的软件,就像开始菜单一样。我敢说如果你删了它,人们肯定会疯掉的。
Yeah. It's one of those pieces of software you create and you just stay once it's there, it's really like a start menu. And then I'm sure if you remove it, people will just lose their mind.
没错。它可能会被锁定一段时间,这也许是件好事。
Yeah. It might be locked in for a while, and that one might be good.
是啊。我以为Clippy也会这样,但总有一天它会卷土重来的。好吧,你当时还创造了哪些传奇软件?你至少参与了《太空军校生弹珠台》的移植工作吧?
Yeah. I thought that would be true for Clippy, but Clippy will make it back one day. Alright. What are 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 doing? And I said, told them what I'm do. And they said, well, how do you wanna spend your next three months? I said, have no idea.
他们就说:想移植弹珠台吗?我之前见过《太空军校生弹珠台》作为Win 95平台的独立游戏。它有几种不同的桌面,是个很酷的游戏,所以我有点兴奋。他们其实是想要NT系统有个视觉亮点,展示NT能处理高速图形,至少是响应式图形。于是我就试了试,可惜大部分代码都是汇编写的。
And they said, do you wanna port pinball? And I had I'd seen Space Cadet Pinball as a game standalone for the Win 95 platform. It had a couple different tables, it was a cool game, so I was kind of excited. What they wanted was some visual splash for NT to show that NT can do for the in high speed graphics, and or at least responsive graphics. And so I took a shot, And unfortunately, lot the code was in assembly.
我当时在用MIPS架构,所以得用C语言重写代码才能移植到所有平台。这个游戏的核心是个巨大的状态引擎,我记得像是个有50个分支的巨型switch语句。
And I was on the MIPS, so I had to rewrite the code in C, so I could import it to all the different platforms. And 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.
是啊。而且
Yeah. 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. And 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.
最近有人问我为什么会有细微差别?物理效果与Windows '95版本略有不同,本应是相同的代码,因为我非常努力地保持原样。但问题出在我有一个bug,我会尽可能多地绘制每秒帧数,在现代电脑上弹珠台游戏可能达到每秒5000帧,因为它是个相当基础的游戏。所以你的所有物理效果都是每秒插值5000次,而不是旧版本中的每秒30次左右。可以说你得到了更好的——至少是不同的物理效果。
And somebody recently asked me why is it slightly different? The physics are slightly different from the Windows '95 version, it should be the same code because I'm trying very hard to preserve that. 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 could be 5,000 frames a second for pinball because it's a pretty basic game. And so all your physics are interpolated 5,000 times per second instead of 30 times a second, or whatever you would have got in the old ones. You're getting arguably better, at least different physics.
不过后来他们修复了这个问题,所以
But they fixed that since, so
为什么这个游戏这么棒?
Why is that game so awesome?
我认为是设计很出色。当然这不是我的功劳,完全归功于Cinematronics团队。原版游戏设计非常棒,和我实际拥有的实体弹珠台游戏《Black Knight 2000》非常相似。
Think it's a great design. I mean, I take no credit for that. That's all totally the guys' cinematronics. But the original game is a great design. It's very similar to Black Knight 2,000, which I own as an actual physical pinball machine.
两者的布局其实很相似。不确定是否有借鉴关系,总之是个好游戏。
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. Sometimes I think about, like, Tetris, about certain games with pretty primitive graphics that captivate the the excitement of a large number of people. And and maybe it's the excitement of a large number of people that contributes to the awesomeness of the game. So when 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 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.
是啊。
Yeah.
扫雷游戏大概是右键操作。我记得你是用右键插旗子什么的。
And Minesweeper is probably right click. Think you put a right a flag or something.
我不...呃...
I don't Yeah.
虽然我不算扫雷玩家,但每个游戏都在教你些东西。扫雷高手啊。
Not a Minesweeper guy, but so each one of them teaches you something. Minesweeper guy.
真有意思。哇哦,我之前都不知道,太有趣了。
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 like millions of people have spent millions of hours in these games.
我以前在孩子学校志愿教计算机课,就是给三年级小朋友那种。其实更像是教登录操作而非计算机科学。不过那些孩子的父亲都在微软工作,所以你做啥他们都不觉得稀奇。直到有孩子发现我参与过《三维弹球》开发,他们突然就'哇!你做过弹球游戏?'因为那个年代的孩子都知道这个游戏。
I used to volunteer teaching computer science at my kids' school, you know, for the third graders and stuff. 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 someone of the kids found out I worked on Pinball, then they were like, woah, 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.
原来Windows激活系统背后有你参与。
You're behind the Windows activation.
你说得好像这是什么坏事似的。
You say it like it's a bad thing.
一切皆视角问题。那就讲讲这个故事吧。什么是Windows激活?你是怎么参与其中的?
Everything's a matter of perspective. So tell the story of that. What's Windows activation? What how'd you get involved?
他们在XP开发后期找到我。我不确定测试版是否已经发布。应该还没发布,但他们原本打算沿用Office的激活代码,将其适配到Windows系统,为Windows添加激活功能。可负责此事的人多次拖延,导致无法按时完成。而我当时以快速解决问题著称,所以他们来问我:你能在XP发布前搞定这个吗?
So they came to me late in the XP ship process. I I don't know if the beta had gone out. 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. But whoever was responsible for doing it had slipped it enough times that it wasn't gonna happen, and so I had kind of reputation for being able to fix things quickly. So they came to me and said, can you get this done in time for XP?
我说不知道,但会尽力。在DRM团队和研究产品密钥算法的同事协助下,我们赶在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. And I don't know what it 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. 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 back end systems that are gonna approve your key. You've got to tell 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 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 gotta be a mind numbing job to listen to product keys for eight hours a day.
是啊。Windows的一个挑战(也是让我沮丧的地方,虽然从设计角度能理解其难度)就是用户群体太庞杂。但令人失望的是,Windows越来越偏离高级用户需求——这也是Linux始终更受欢迎的原因。无论是激活还是其他配置,Windows都制造了太多挫败感。
Yeah. One of the challenges with Windows, and it's been a frustration point for me, but I I understand from a design perspective, it's very difficult, is so many different kinds of people use Windows. But it's been frustrating how over time, Windows is more and more leaned into the direction of, like, the not not the power user, I should say, which is why sort of Linux has always been really wonderful. But from an activation perspective or from any kind of configuration, it's been it's been a it's been a source of a lot of frustration. Yeah.
我最近最火的节目就是讲为什么不能移动Windows任务栏。没想到这个话题能引发强烈愤慨——当人们发现不能把任务栏放左侧或顶部时,感觉生存权受到了冒犯。某种程度上我能理解这种情绪。
One of my more popular episodes of late has been why you can't move the Windows taskbar. Yeah. I had no idea, but the outrage is palpable amongst people that you put on the left or top and you can't anymore, and it is an affront to their existence. And I understand it to a certain extent.
这正是我讨厌Windows 11的主要原因之一。任务栏位置这种基础设置都不能自定义。就不能让我们自由配置吗?毕竟总有一小撮高级用户会因此更爱这个系统。
Well, it's one of the main reasons I really just dislike. There's a lot of aspects about Windows 11 I dislike. 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 gonna 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? 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? And I I just met those decisions weren't mine to make, but I could see it from both sides.
我认为就像电影人插入只有少数人能察觉的微妙细节那样,这终将获得回报。长期积累的口碑会产生强大的涟漪效应——包括吸引优秀软件工程师。就像营造出一种注重每个细节、关怀高级用户和开发者的氛围。微软收购GitHub后越来越注重这点,但在Windows界面方面...得了吧。
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 gonna really pay off. There's a kind of reputation that builds over time that has a very powerful ripple effect that I think it has it 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 puts that really takes care of the power users, that takes care of the developers. I think Microsoft is more and more moved in that direction with GitHub and acquiring GitHub and just taking care of the developers. But on the Windows interface side come on.
看看VS Code能自定义所有东西。为什么开始菜单就不能?任务栏也是,Windows界面的每个方面都该如此。
Some customization. With, you know, with Versus Code, you can customize everything. Why why can't we customize the start menu? Alright. Anyway, in the taskbar, and really every aspect of the Windows interface.
我不...或许你是对的。也许确实增加了代码复杂度。但我怀疑事实并非如此。
I don't I don't I maybe you're right. Maybe it increases the complexity of the code. I suspect that's just not the case.
我打赌是。重写开始菜单时这肯定是个排期决策。因为新版和旧任务栏不同,有人被要求'必须交付这些功能'——如果砍掉左右顶部布局和多行标签页等酷炫功能,就能提前四个月交付。
I bet it was. 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. Mhmm. 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.
不是说这决定正确,但猜测类似动机促成了这点。现在他们的发布周期完全不同——过去只有长期负责某个组件的人才能打磨出精品。如果UI每个版本都改,永远达不到那种精致度。
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 gonna get that level of polish.
不过我觉得现在的UI还不错,只是...
Although, I think the UI is pretty nice, but
是不错,但我觉得这不是排期问题,是工艺问题。就像任务管理器那样——如果有人像你这样长期投入热情,短时间内就能独自创造出惊艳之作。
I It it it is nice, but I think there I think it's I just don't think it's a scheduling thing. Think it's a craftsmanship thing. Just like you with the with the task manager. If there's a guy or a girl in there who take ownership of it, who have, like, passion like, for them, it's a thing that they take pride in over a period of time. They can, like, by themselves in a short amount of time create something truly wonderful.
对。大型软件团队有经理和会议排期时,你的论点成立。但如果允许创造者像谷歌那样培育个人项目,让优秀个体自由发挥就不同了。
Right. And like, I I I think if you have large software engineering teams with managers and scheduling of meetings and all this kind of stuff, yeah, okay. Then then your argument applies. But if there if you allow the flourishing of individuals that create cool shit, and, like, their own sort of the side project, which Google is very good at.
试过了对吧?谷歌。是的。
Tried that. Right? Google. Yeah.
是啊。比如,玩得开心点。做些疯狂的事情,然后我们会整合它。我们会尝试融入整个生态系统。我也不确定。
Yeah. Like, have fun with it. Like, do some crazy stuff, and then we'll integrate it. We'll we'll try to integrate into the whole ecosystem. I don't know.
没错。因为对我来说,作为一个独立开发者,能创造出像任务栏开始菜单定制这样的东西是巨大的快乐——你知道数百万人会使用这个任务栏。然后你知道可能有成千上万的开发者会用它来定制任务栏最细微的细节。你能想象通过一个JSON配置让人们自定义任务栏功能时,能带给人们多少快乐吗?
Yeah. Because, like, to me, there's it's such a great joy from an individual developer to create something like customization of the start menu of the taskbar because you know that millions of people are going to use it, the 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?
好吧。但你怎么回应史蒂夫·乔布斯的观点——提供定制选项意味着我们无法为你找到最佳方案?或者可能根本没有标准答案,四个选项都同样正确。我完全没概念。不过
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? Or maybe there is no right answer, and all four answers are equally right. I have no idea. But
对。我一直认为苹果的存在是好事。那种设计理念很棒,但我觉得Windows创造了对比。Windows的定位本就是能在各类设备上运行的操作系统,它应该更开放,随着Linux子系统等发展,微软确实越来越往这个方向走了。
Right. I think I've always I I'm glad Apple exists. It's a beautiful thing. That ideal of design is wonderful, but I always thought that the the Windows creates the contrast. Like, the point of Windows is to be the operating system that works on all kinds of devices that this is much is supposed to be much more open, and they've moved towards that direction more and more with Windows subsystems for Linux.
整个开发者友好型生态就该如此。界面设计也应该遵循这种精神。不过这种开放性确实可能引发安全隐患,不仅是代码复杂度问题——Windows始终处在攻击火力之下。
It's just this whole developer friendly ecosystem. It it the interface should be in the spirit of that, I think. Right. But but I do think that there could also be security vulnerabilities that created with that. It's not just the complexity of the code, because Windows is just under attack.
是啊,保持系统安全非常困难。话说回来,你还开发过Windows的zip文件支持功能,创造了可视化压缩工具,就像我之前提到的最终演变成zip文件夹的功能。讲讲这个故事吧。
Yeah. It's very difficult to keep it secure. Anyway, taking that that tangent, you also developed the zip file support for Windows, creating visual zip, like I mentioned zip folders that eventually evolved into zip folders. Tell the story of that.
那又是我在家写的软件。当时我和妻子外出,记得是个周日下午。我们开车兜风——那是1993年,还住在公寓里——想看看房市行情。
So that was a piece of software that I I wrote at home again. And what happened was I was out with my wife, and I think it was a Sunday afternoon. We're 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.
有栋漂亮的三居室,车道上停着93款火炬红克尔维特敞篷车,挂牌价30万美元。以我当时的经济状况连首付都凑不出。我把宣传单上的房子照片剪下来贴在显示器上,这就是我熬夜编程的动力——回家后我专注两件事:
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 house is for sale and it's like 300 k I think. And there's no chance I'm coming up with 300 k at that point, or even the down payment on that. 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, was doing two things.
一是释放工作中修bug无法满足的创作欲,二是想赚外快。在加入Shell团队前,我根据当时MSJ杂志(MSDN前身)的示例代码写了Shell扩展程序——那个教人打开文件夹的模板。有了基础框架后,添加zip支持就是顺理成章的迭代了。1995年(可能是2995年笔误)我把它作为共享软件发布,卖了几百还是几千份。
I was one expressing a creativity that I couldn't get out of work when I was just fixing bugs. And I was trying to make some extra money. And so I wrote Shell extension before I actually went to the Shell team, started it, and that's what led to my interest in going to the Shell team based on MSDN sample, MSJ at the time, MSJ sample that I saw on how to like bring up a folder. Well, once I had the very basic bring up a folder template, adding zip file support to it was just incremental all the way. And I released it as a shareware product, I think it was 1995 or 2995, and I sold whatever, couple hundreds or thousands of copies.
有一天,我正准备上班时接到一个电话,是一位女士打来的,她问:‘你是戴夫·普卢默吗?’我说是的。她又问:‘你是开发Visual Zip的那个人吗?’我回答没错。然后她说:‘我是微软的贝琪,我们希望你能过来谈谈收购的事。’
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.
我说好的,问她在哪栋楼。她却反问:‘什么意思?’我说我可以直接过去。她解释:‘不,你需要先联系差旅部门,还要和法律团队沟通,这些都需要安排。’但我完全没搞懂状况——
I said, okay, what building are you in? And she's like, what do you mean? I said, well, I'll come by. And she said, well, no, you gotta talk to travel, and you gotta talk to legal, and this all has to be set up. But I'm like, I don't get it.
我们明明在同一个公司工作,为什么不能直接过去?我不确定当时是否原话这么说。但经过几分钟沟通后,我们才意识到她根本不知道我是微软员工。
We both work at the same place, why can't I just stop by? I don't know if I said that literally. Yeah. 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 They just cold called the author, and then found out that it was me. Yeah. And That's funny. So they made me an offer on it, and it's the kind of thing where if I don't accept the offer, now my choice is I can keep selling my own version and quit Microsoft. Or I can stop selling my own version and work for Microsoft.
两个选择都不理想。当然我可以保住工作,但我也想保留这份收入。最终我接受了他们的报价,然后用这笔钱买了辆93年的红色二手科尔维特。
Neither of those is great. I mean, I 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.
你得以继续在内部开发它。
You got to continue building it internally.
是的。我们删减了很多功能来简化,比如移除了加密——当时那个年代的压缩软件普遍有这个功能,但对Windows并不合适。那时候加密就像军火弹药,不能随意添加到操作系统各处。
I did. So we took a lot of features out, right, to simplify it because it had encryption, it had a number of features that were common in zip programs of the day, but probably weren't appropriate for Windows. And at the time, encryption was like ammunition. Mhmm. 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
聊聊Zip的总体情况吗?关于压缩技术的历史发展之类的?
speak to Zip in general? Just the history of Zip and, you know, compression, that whole thing?
它诞生于BBS时代,人们通过调制解调器拨号下载试用软件和共享软件。可执行文件压缩率约50%,其他文件更高。菲利普·卡兹开发了DOS命令行工具PKZIP,后来成为PC行业标配。等到Windows问世时,虽然系统没有原生支持,但zip格式已流行了十年之久。
It was really born out of the BBS era when people were dialing in on modems to download trialware and shareware and other things from BBS's online. And to compress them, executables compress about half their size, other stuff compresses much more. But a guy named Phil Kass 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, 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.
这确实推动了将zip支持直接集成到Windows中的需求。
And so that really drove the desire to have the zip support right into Windows.
是啊。而且这款软件至今仍伴随着我们。嗯。
Yeah. And that's another piece of software that's just kinda with us to this day. Mhmm.
它本可以大幅改进,但要知道,这是单核时代一天写成的,所以不支持多线程。就算你有96核的7995处理器,它也只用一个核心来解压文件。
And it could be vastly improved, but you know, was written in a single core day, so it doesn't do anything multi threaded. You've got a 96 core seventy nine ninety five, well, it uses one of them to unzip your file.
你在微软还参与过哪些了不起的项目?其他软件呢?
What other awesome things were you a part of at Microsoft? What other pieces of software?
我参与了Windows Media Center的初始原型开发。那是在1996年,当时我们没有任何片源。只有一张MPEG视频光盘,里面有《狂暴鲁道夫》和最早的《南方公园》圣诞特辑——
I worked on the initial prototypes of Windows Media Center. So we did that in '96, I believe. 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
以现在的职场标准来看内容都很不合适,但在获得正式片源前这就是全部素材。后来我们在屋顶装了18英寸的DSS卫星天线,因为大楼接不了有线电视。最终我们做出了类似媒体中心的系统,这是Windows的远距离观看界面,你可以用遥控器在桌面操作——现在的开始菜单在20英尺外根本看不清,所以...
Christmas one, which is all wildly inappropriate in the workplace today, but it's all the content we had until we got actually we had them put a satellite dish on the roof, a DSS, whatever the 18 inches dish is. Because we couldn't get cable to the building. 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, the current start menu is not great at 20 feet away, so
说说那个臭名昭著的蓝屏死机故事吧。
Tell me the story of the infamous blue screen of death.
当Windows别无选择时就会出现蓝屏——比如内核遇到非法操作:设备驱动程序试图写入不属于它的内存空间,或试图重复释放同一块内存。发生这种绝对不该出现的情况时,内核只能关机来保护你的工作数据——准确说是防止进一步损坏。
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 he doesn't own. Or is trying to free a memory 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. And well, not save, but prevent further damage.
然后显示蓝屏并输出堆栈信息(取决于你的设置),现在Windows有时只显示一个悲伤表情。
And it puts up a blue screen, and it prints out the stack information, depending on how your settings are. Sometimes it's just a sad face in the current Windows.
是啊。我在想Windows的第一个版本或蓝屏是怎么诞生的。
Yeah. I wonder what the first version of Windows or the blue screen came to be.
Windows 3确实有蓝屏功能。嗯。但它与Windows NT的蓝屏完全无关。我和编写Windows NT蓝屏的人聊过,他叫John Vert。他选择白字蓝底的原因,我一直以为是实验室里能看到50台PC同时运行压力测试时——
So Windows three had a blue screen Mhmm. But it's completely unrelated to the blue screen of Windows NT. And I talked to the guy that wrote the blue screen of Windows NT. His name's John Vert. And the reason he picked white on blue, I had thought I'd always heard of because in the labs, could walk through a lab where we have 50 PCs all running stressed.
‘哦那台蓝屏了,崩溃了’。但实际没那么复杂,只是他构建时用的MIPS固件就是蓝底白字,他用的Visual Slick Edit编辑器也是同样配色。所以你能在统一配色下完成编码、启动、崩溃和重启整个流程。
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 slick edit that he was using as editor was also the same color scheme. 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 on back again.
我认为电脑长期运行会出现两大问题:一是内存被占用后未释放。没错。这样堆内存或交换文件中会积累垃圾,系统变慢。二是代码进入开发者未预料或未充分测试的状态。
I think there's two major things that happen with computers as you run them over time. One is memory gets used and not freed. Yeah. 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.
嗯。可能这种状态很罕见,但一旦记事本或Word、Excel进入这种状态,系统就异常了。所以只要重启或关机再开,就能获得干净状态且没有内存泄漏。这基本上能解决...
Mhmm. And maybe that's a rare state, but now that Notepad or Word or Excel is in that state, your system is goofy. So if you just reboot the thing or shut it down or restart it, you're getting a fresh state and there's 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 kinda had just the entire system starts acting a little weird. Yeah. And then somehow fixes it. What's what's some of the best and the worst code you've seen during that time at Microsoft?
哪些优美代码和糟糕代码让你记忆犹新?
What's some beautiful code and what's some ugly code that pops to memory?
优美代码方面,有两个让我印象深刻:一是整体内核代码,深入Windows内核后...嗯...真正的NT API之类写得非常规范,这种标准在用户端很少见。用户端最酷的代码是个叫Bob Day的人写的命名管道实现,用于取代共享内存方案——
In terms of beautiful code, there's two that stand out for me. One is the kernel in general, when you get down into the Windows kernel Mhmm. 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. On the user side, probably the coolest code I remember seeing was a guy named Bob Day wrote a named pipe implementation to eliminate the use of shared memory.
Windows 95所有shell进程共享一个大内存段来存储公共数据。我们不想这么做,因为在NT系统共享内存是工业级坏主意。他用命名管道实现了替代方案,我记得代码评审时深受震撼——那种‘换我可能搞不定’的惊艳感。
So Windows 95 had a big shared segment amongst all the shell processes where it would store stuff that's common to all the shells. We didn't want to do that. Shared memory is a bad idea on NT and an industrial level. So he came up with a way to do it with named pipes, and I remember doing the code review on it, and it was very impressive to walk through the code. It was one of those things where it's like, oh, I don't think I could have done that if I was trying.
展开剩余字幕(还有 276 条)
你遇到过最厉害的程序员是谁?知道吗?我其实
Who's the greatest programmer you've ever encountered? You know what? I don't
觉得没有所谓最厉害的人。我确实遇到过不少优秀的程序员,但有个故事让我印象深刻——那时我刚进公司大概六周,正在捣鼓之前提到的OLE演示缓存。我在Windows 95系统上,把Excel嵌入了Word文档,结果内核调试器里调度程序出了问题。当时我连x86汇编都没写过几行,却要对着Windows调度器排查死锁原因。
think there is anyone. I I've met a number of great programmers, but I'll tell you one story that impressed me a lot was when I was brand new at the company. I've been there, like, six weeks, and I'm working on this OLE presentation cache that I mentioned earlier. 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. And I've been there, know, I've barely written any x 86 code, and I'm looking at the Windows scheduler trying to figure out why my thing is deadlocked.
后来实在搞不定,毕竟超出了我的能力范围。我就给Windows 95内核团队发了邮件求助。十分钟后,有位开发人员拎着串口调试线晃进来——虽然我的双机调试环境已经搭好了。他坐下就用WinDebug(那破调试器简直是个诅咒)开始排查,
Eventually, get stuck, so I'm kinda out of my element. And I send an email to the Windows ninety five kernel team and say, could you send somebody by? And so about ten 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. And so they sit down and they're using WinDebug, which is a horrible debugger. It's just it's a curse.
但人家用得炉火纯青。只见他飞速穿梭于调用栈之间,检查内核对象状态,分析谁在等待什么资源,为何出现死锁,哪些信号量被触发...整个调试过程如同水银泻地般流畅。我在旁边看得目瞪口呆,虽然自认编程不错,但这种神级调试表演真是生平仅见。大约五分钟后,他轻描淡写说了句'哦,明白了',拔掉调试线就走了——这位就是后来成为微软杰出工程师的Laura Butler。
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 quick silver 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.
她现在可能还在职(不确定是否退休)。那次经历树立了我对微软开发者的认知标准——无论是调试水准、内核开发能力,还是女性工程师的风采(毕竟当时样本太少)。但那个标准,实在是高得令人仰望。
I think she may still be, I'm not sure if she's retired or not, but so she kinda set my template for, you know, what Microsoft developers were like when they were 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's a few things I love in life more than people who are ultra competent at anything really, but the lower level, the better in the engineering space. They're able to, for example, like, run or maintain the infrastructure, the computer infrastructure. So not the individual computer, but the computers communicating together and working together, those people are just magicians.
确实。
Right.
看着他们工作就像欣赏顶级木匠...
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. It's beautiful to see that humans are able to accomplish that. Even in in civil engineering space, when I look at, like, 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.
想象一下有多少人受到Linux以及构成Linux的各种开源系统的影响。这简直不可思议。任务管理器就是一个软件的例子。这么多年来有多少人使用它,用了多少次?太疯狂了。
So imagine how many people are impacted by Linux and all the different open sources open source systems that make up Linux. It's incredible. And task manager is an example of a piece of software. Just how many people use that over the years and how many times? It's crazy.
可能达到数十亿数十亿的
It's probably billions billions of
是啊。每月20亿左右吧。
you Yeah. 2,000,000,000 a month or something.
20亿。
2,000,000,000.
差不多。我看过数据,确实
Something like that. I I have seen the metrics, and it's
太疯狂了。
up Crazy to you.
确实。不过我最喜欢的是——我相信你也有这种经历——有时候你设计一个复杂软件,在脑子里构思好它的运行逻辑和流程,最终写出代码实现脑海中的构想。嗯。而现在有数十亿份我脑海中的那个东西运行在数百万或数十亿人的机器上。这本身对我来说就非常酷。
It is. 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 gonna run and flow, and then eventually you write the code, and the code does that thing that you had pictured in your head. Mhmm. And now there are billions of copies of that thing that I had in my head running on millions of peep or billions of peoples of machines. And that in itself is really cool to me.
与其说是虚荣心作祟,不如说我对这种现象感到震撼。
It's not a vanity thing so much as a I'm impressed by it, I guess.
这些年来你的编程方式有什么演变?
How's your programming evolved over the years?
现在我会更注重细节和复杂性。以前总是先写代码,不停地写,最后再回头整理。现在我的方式相反——先写出非常清晰的基础框架代码,再逐步完善。因为我参与过太多自己或别人的项目,后期混乱到无法修复。有时候前期多花功夫反而更省事。
I take a lot more care and complexity these days. So it used to be, you would write code and just keep writing code and writing code, and then at some point, I 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 makings 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? What's been your main go tos?
对我来说,主要是C++和汇编语言。
For me, it's been c plus plus and assembly language.
直到现在,C++仍然是你主要依赖的语言吗?是的。目前我正在
And still to this day, c plus plus is really what you lean on? Yeah. Right now, I'm
100%使用Lua和Python,但这只是我正在做的副项目。所以
a 100% Lua and Python, but that's just side project I'm working on. So
能聊聊你转向Lua和Python的经历吗?以及你最喜欢C++的哪些方面?
Can you speak to the Lua and the Python detour that you took? And what do you love about c plus plus?
我正在做的是想构建一个AI来玩《暴风》这款游戏。就是那个古老的雅达利游戏《暴风》。我实际上保持着这款游戏的世界纪录。而且
What I'm doing is I wanted to build an AI to play the game Tempest. That's the old Atari game Tempest. And this is a game that I actually hold the world record on. And
能给我介绍一下这个雅达利游戏《暴风》吗?好的。雅达利《暴风》。这是款什么样的游戏?
Can you take me to this Atari game Tempest? Okay. Atari Tempest. What kind of game is this?
这是1980年的3D矢量游戏,非常复杂。你有360度的全方位移动,屏幕上有八发子弹,大约有11种敌人。
It's a three d vector game from 1980. And it's a very complex game. You got full three sixty degrees of motion. You have eight shots on the screen. There's like 11 enemies.
还有尖刺障碍。所以这是款非常复杂的游戏,不像尝试玩《乒乓球》那么简单。
There's spikes. So it's a very complex game. It's not like trying to, you know, do Pong or something.
好的。
Okay.
最终我采取的第一步是将ROM从机器中取出,逆向解析代码。这样我了解了《暴风》游戏中所有代码的位置与功能,包括零页变量的存储位置等。对,就是那个。
And what I wound up doing was first taking the ROMs out of the machine and reverse engineering the code. 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. Yeah. There's one.
所以...哇,这几何感好强。好吧,你能给我解释下
So what oh, wow. That's a very geometric. Okay. What can you explain to me
游戏玩法?就是正在演示的这个游戏。
the game play? Playing the game right there.
这真的是你
This is literally you
在玩。看到最高分了吗?顶部中央显示的是Dave。
playing This is me. Dave is the high score you'll see. The top center
能解释下我看到的画面吗?呃,这是个
of Can explain to me what I'm looking at? Well, it's a
三维几何世界。本质上就是把3D版《太空入侵者》包裹成管状结构,敌人从管道中心向外围移动,各有不同行为模式...简单来说,这是款相当复杂的游戏,要玩好很难。我想测试AI能否驾驭。在定位完游戏中所有关键内存地址后,我将它们设为参数,并开发了Lua程序来实时提取游戏运行时的内存数据。
three d geometric world. It's basically three d 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 and 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. And so once I had figured out where all the interesting parts of the game lives in memory, I added them as parameters and built a Lua app to extract everything from the game's memory as it's running.
将这些数据整合为参数,通过套接字传输到Python端进行强化学习。我采用了决斗深度Q网络(带双头尾结构)。现在AI能玩到36关左右,远超人类水平。但总共有96关,所以还有提升空间。
And put them together as parameters, which sends it to the Python side over a socket, and then the Python side does RL learning. I'm using a dueling deep q and I believe Mhmm. To 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. But that's level 96, so it's got a ways to go yet, but
那个红色物体是你在射击?对,你控制红色物体射击?操作选项就是顺时针/逆时针移动和射击?
And you're the red thing shooting? Yes. You're controlling the red thing that's shooting? Okay. What are the options you can just move clockwise or counterclockwise, and then you could shoot?
没错。有个光学旋转编码器控制转向,还有开火键和紧急超能武器键。基本就是旋转和开火两个操作。
Yeah. So you have a rotating knob Uh-huh. Which is an optical spinner, and you have a fire button and a super zapper for emergencies. But that's it. Fire and rotate, basically.
好的。让我们回到你最喜欢的C++话题。你热爱C++的哪些方面?为什么这些年来你一直坚持使用它?
Alright. Let's get back to your favorite c plus plus What do you love about c plus plus Why have you stayed with it for all these years?
因为它允许我将最爱的C代码封装在类里。我其实不算一个...呃...
Because it allows me to encapsulate my favorite c code in classes. I'm not a big, well, I
实际上你骨子里是个C语言程序员。好吧。
actually You're really a c guy. Okay.
没错,我本质上是个C程序员。虽然我写两种风格的C++:一种是完全现代化的C++20,不使用指针也不使用字符数组——在我看来基本和Rust一样安全;
I got I'm really a c guy. Although I write two kinds of c plus plus. I write really modern c plus plus 20, using no pointers, no string or no character strings. So there are you know, it's basically as safe as Rust, far as I'm concerned.
嗯。
Mhmm.
另一种是'带类的C',就是标准C加上多态封装,这占了我大部分代码。但我努力兼顾两种风格。
Or I write c with classes, which is standard c, but, you know, with polymorphism encapsulation, and that's most of what my code is. But I try to do both.
我想问问我们跳过的那段时期。你在微软期间和之后开发了很多成功的软件。其中Software Online公司因为升级弹窗过于频繁惹了麻烦对吧?
Let me ask you about the whole stretch of time that we kinda skipped over. 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 Yep. To upgrade.
我看到是这样。当时具体什么情况?你从中学到了什么?
That's what I saw. What was all that about, and what did you learn from that experience?
除了家人健康危机——比如孩子生病——那是我人生中最恐慌的时期。但前期却充满激情:在微软时我写了很多共享工具私下销售,有个还被微软收购了。后来我发现网络横幅广告,就用信用卡注册了FastClick这类平台。
Well, that was 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. They started to do really well. And then I discovered banner advertising online. And so I signed up with my credit card for a site, I think it called FastClick.
你可以设定每次展示的出价,他们轮播你的广告。我没设上限,周一发现竟花了1万美元广告费。我当时想:完蛋,怎么跟老婆交代?
And you could say, I will pay this much for a banner ad impression, here's my banner, and we'd 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. I was like, holy crap. How am gonna explain this to my wife?
这是个漏洞。是个错误。是我的责任。我查看了销售数据,发现它创造了约38,000美元的销售额。我当时就震惊了。
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. And I was like, holy cow.
所以我只需要在某个时候扩大规模,之后几年基本上就是这么做的。我们遇到麻烦是因为总检察长办公室介入,他们提出了12项诉讼主张,其中10项简直荒谬,作为自闭症患者,我无法接受。明明知道这10件事完全不属实,为什么还要讨论它们?而他们只关心那两件可能属实的事。
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 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. It's like, know these 10 things are absolutely not true. Why are we even here talking about them? And then all they cared is the two things that might be true.
那两件可能属实的事是:软件提供30天试用期,到期后若继续使用未购买或卸载,每天会提醒一次(不是每十分钟,而是每天或每次开机时最多一次)。总检察长认为这太频繁,构成垃圾信息。嗯。
And the two things that might be true were that it was a thirty day trial version, and after your thirty days were up, it would then if you continue to run it and not buy it or uninstall it, it would remind you once a day. Not like every ten minutes, but once a day or every time you go to your computer, at most once a day. And the AG contended that was too often. It amounted to spam. Mhmm.
于是我们同意将提醒改为每周一次,并设置一键卸载按钮。另一个问题是:在2001-2003年间,即使在线购买下载软件,用户仍期待收到实体光盘。
And so we agreed with them to limit it to once a week, I believe. And, you know, it 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. So in the year 02/2001, which were 02/2001, 02/2003, we're talking about, if you bought software, there was an expectation that a disk would show up.
因此我们默认提供光盘配送(额外收费$3.95或$4.95),虽然选项明显,但默认勾选。因为不这样做会接到大量来电询问光盘去向,甚至导致退货。
And so we made that the default, was to fulfill by disk, and it was three ninety five or four ninety five extra. And it was very obvious, but it was a checkbox and it was turned on to ship the disk to your house. Because we found if we didn't do that, we got all these calls, people would wait, be in order, two weeks later call, where's my disc? And we luckily didn't order a disc. Well, cancel it all, 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 a a priority violation of negative affirmation billing in Washington State, because you're giving them a default higher purchase price.
关于软件与用户关系很有趣——提醒频率的平衡。完全不提醒可能让用户错过所需功能,但太频繁又会惹人厌烦。
What about on the software user relationship, it's interesting, like, how often to annoy the user with a thing. Right? If you never mention anything, they might never discover, like, something they actually want. Right. But if you mention it too much, then they can get annoyed.
是的。关键是不能迫使用户必须购买或执行操作才能关闭提醒。
Yeah. 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.
Windows至今仍有这个问题:不断用「要启用这个吗?」之类的问题打扰我。比如我极不情愿用微软账户登录,但现在似乎强制要求,几乎无法绕过。
That's one of the things that bothers me with I think Windows does that a little bit, still to this day, where it bothers me by asking me certain questions, like, you want this? Like, it for example, I really don't like to use my Microsoft account to log in to Windows. Right? I think now it's, like, basically required. I think there's just no way around it.
他们故意把跳过流程设计得极其困难,感觉就像在诱骗我放弃原本意图。必须刻意寻找「跳过」按钮才能避免中招。
But, like, they make it so difficult to not do that. It's almost like they think they could just trick me into they it really does feel like I'm getting tricked into not doing what I want to do. Right. Like, is I have to, like, think, okay. I need to click skip, and then it'll do something.
你确定吗?比如,我必须,呃,用太多脑力去做我喜欢的事,你懂吗,作为一个界面,你知道我想做什么。你这是在诱导我不去做我想做的事。我讨厌的是,虽然这招可能对转化用户有效,但从长远来看,对维护用户利益真的不好。
Are you sure? Like, I have to, like, use too much of my brain to do the thing I like, you know as an as an interface, you know what I'm trying to do. You're trying to trick me into not doing the thing I wanna 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 interest of the user.
是啊。最让我恼火的是‘使用推荐设置’。我刚升级完系统,按步骤操作时遇到这个新对话框或向导,上面写着‘使用推荐设置’。听起来应该照做对吧?但我很确定这会把你重置成使用Edge浏览器之类的。所以没错,是他们推荐的,但不是为我推荐的——问题就在这儿。
Yeah. The one that really throws me is the use recommended settings. So I just did it when it was upgraded, went through the steps, and I'm going through this new dialogue 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 all this other stuff. So yeah, recommended by them, but not recommended for me, and that's the difficulty.
这个例子特别好。你觉得把默认浏览器重置成Edge会产生什么效果?你真觉得这样能赢得用户忠诚度吗?难道不觉得实际上只会培养出一些被动忠诚的用户群?从数据上看,可能Edge用户数量确实增加了。
That's a really good example. Like, what effect do you think that does in resetting the default browser to Edge? Do you think you're going to really earn the loyalty of a user if you do that? Don't don't you think that they're 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.
但长远来看,损害的是声誉——人们会逐渐形成‘Edge不太可靠’的印象。虽然不公平,毕竟Edge其实是很好的浏览器,但就是这种莫名的不舒服感...我不知道该怎么形容。而且你肯定不希望
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 Right. Unfairly, because I think Edge is a really great browser, but just this this unpleasant feeling. I don't know what that is. And Well, you don't want
自己的操作系统变成对手,对吧?
your operating system to be an adversary. Right?
而且
And
有时候Windows确实让人有敌对感。它似乎不以你的利益为重,这点让我挺不爽的。
sometimes it Windows can feel adversarial. 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, where you just have general distrust when somebody is super nice to you and is basically selling something. There's a certain aura about that kind of interaction. And when an operating system is interacting you with you in that way, it's like
没错。我宁愿每年付1.99美元买Windows专业版,或者每月20美元随便怎么定价,只要别再推销其他东西,别拿我的数据变现之类的。
Yeah. I would much rather pay $1.99 for Windows Pro per year, or $20 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
你从中学会把握平衡点了吗?
Did you learn about finding the right balance from that?
是的。我是说,我现在自我意识强多了。有很多事我会用完全不同的方式处理,尤其是在广告方面。我一直记得有个叫大卫·奥格威的人,他很久以前为大众甲壳虫车做过一则广告,画面是黑白甲壳虫照片,上面只写着'柠檬',下面配了一段文字说明。
Yeah. I I mean, I'm way more self aware now. There's things I would do much differently, particularly in terms of the advertising. I always figured, there's a guy named David Ogilvie, 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 clickbaity, and then informational. And I always tried to follow that pattern. But there's three ways to sell something, think. And you can use sex, fear, or greed, and sex doesn't work very well for software. Fear works well for antivirus and stuff, but not so much for optimization and make your computer faster utilities.
所以我总是试图迎合贪婪心理。比如'让电脑更快'、'释放更多内存'之类的价值主张。但现在我意识到这是基于我的认知。作为自闭症患者,我现在能理解别人会带着他们的背景知识来看待这些广告,可能得出完全不同的结论。所以我可能吓跑了那些我只是想激发其贪婪本能的用户。
And so I always tried to cater to the greed aspect. 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 gonna 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.
问个可能很蠢的问题,你觉得Windows操作系统前三名是哪些版本?我是...
Ridiculous question, but what do you think is the top three Windows operating systems? The different versions. I'm a fan
Windows 2000 Server的粉丝。那是我...等等,真的吗?
of Windows 2,000 server. That's my Wait. Wait. Really?
对啊。好吧。
Yeah. Okay.
我就是用这个系统运营公司的。还帮我兄弟的公司搭建过,我们给多家发廊建立了VPN互联,全都用SQL Server和...
That's what I ran my business on. I ran my brother's business. We set up multiple salons, all VPN to one another and using the SQL Server and
我可能没体验过Windows 2000 Server。XP是什么时候发布的?2001年2月?那XP之前是什么版本?二月...
I don't know if I ever gotten to experience Windows 2,000 server. So when was XP out? 02/2001. What was before XP? February.
二月...那个系统好用吗?
February. Was that good?
是的,我喜欢它。虽然它没有XP那种视觉上的炫酷效果,但作为一个系统,尤其是作为服务器操作系统,在当时是非常出色的。
Yeah. I liked it. 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从完整性、影响力以及持续时间的角度来看,可能是面向消费者的最伟大的Windows操作系统。
But then XP was, I would say, probably from a completeness perspective, an impact and how long it lasted, and it was probably the the greatest Windows from for consumers, the operating system.
我也这么认为。它的寿命确实很长。现在还有人会运行它。我是说,如果能获得安全更新,我可能还会用它,因为它能满足我对Windows 98%的需求。但是
I think so. It certainly got the longevity for it. There's people who would still run it. I mean, I'd still run around stuff if you get security updates because it does 98% of what I need Windows to do. But
没错,这太不可思议了。对我来说,Windows XP可能是第一,Windows 95排第二。你的评判标准是什么?个人偏好还是行业影响力?
Yeah. That was incredible. I mean, nine so Windows 95 I'll probably put Windows XP as number one for me, and then Windows 95 too. What's your metric? Personal preference or industry impact?
或者是行业影响力、稳定性,就像编程中有代码异味一样,看所有功能是如何协调一致的,是否有贯穿整个系统的设计理念,是否一致,功能不多不少刚刚好,不过于简化也不过于复杂,蓝屏频率如何,等等这些因素。
Or Industry impact, stability, just that there's certain, like just like with programming, you have code smell. Just like how well all the features were orchestrated together, how there's a design philosophy that permeated the whole thing, and it was consistent, not too many features, not dumbed down too much Right. But not over complicated, how often it crashes the blue screen, all those things.
不知道这个描述是否贴切,但我觉得它很‘干脆’。没有太多粗糙的边缘,该做什么就做什么,反应迅速,而且
I don't know if it's a very apt description, but I think of it as crisp. So there's not a lot of rough edges, it does what it does, it does it snappy, and
嗯。你说你玩老虎机。既然你热爱硬件和软件,正好问你,老虎机是怎么工作的?
Yeah. 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, 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 round number and what the outcome is in terms of probability and payout.
然后游戏会编造一个场景来配合这个结果,比如出现三个BAR之类的。但这之间没有关联。并不是真的在转动卷轴看它们停在哪儿再决定你赢什么,完全是反过来的——先决定你是否中奖,再编造一个场景来匹配。
And then the game says, I gotta make up a movie to go along with that, 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 make 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. 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. I'm sure it's not that deep of a secret, but
是啊。
Yeah.
因为它们本质上都是普通的Windows电脑,但这些电脑运行在某种我知之甚少的高度安全飞地之上。
Because 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.
没错。那必须得极其安全才行,对吧?
Yeah. It has to be extremely secure. Right?
对。话说七八十年代,拉斯维加斯有个技术员到处活动,他给自己烧录了带后门的老虎机ROM芯片。维修时换上自己的芯片,半年后回来启动后门就能——完美收割。
Yeah. Well, in the seventies or eighties, there was a tech in Vegas went around and he was burning his own ROMs for the slot machines, and with a backdoor in them. So when he serviced the machine, he would just put his ROM in, and he'd come back six months later and Nice. Invoke the backdoor.
人类真是太有趣了。话说你还对其他类似系统感兴趣吗?
I love humans so much. Anyway, do you have do you have other other favorite kinds of systems like that?
我喜欢很多老式硬件,比如修复汽车——我经常捣鼓六十年代的肌肉车和皮卡。
I like a lot of old hardware, I restore cars, so I do a lot of nineteen sixties muscle cars, cars and trucks.
不错。
Nice.
还有老式计算机,比如修复PDP-11系列。这半年多来它一直是我的心头好,我已经组装了好几台。
And old computers, so I restore PDP elevens, it's been my fascination and my special interest for the last six months or so, and I've built a number of those.
嗯,我看到你发的视频了,那个PDP-11/83的项目。具体是什么情况?
Yeah. You I've I've seen, like, you posting videos about it, the PDP eleven eighty three. What's that whole project?
简单来说,就是我之前组装过几台PDP-11,多年来积攒了各种零件,于是决定打造一台我能做到的最好的PDP-11。嗯。这就像你们会尝试把PC性能推到极限一样,我在尝试把PDP-11推到极限。它配备了4MB内存——在那个年代可是天文数字,就摆在那儿。还有一大堆闪烁的指示灯,为此我还重写了BSD内核来驱动这些灯,
So basically, what it is is I had built a number of PDP elevens, and so over the years, I'd acquired all these parts, and I decided, well, let me build the best PDP 11 that I can. Mhmm. And so it's kind of a quest to just like you'd try to max out a PC, I try to max out a PDP 11. So it's got four megabytes of memory, which would be massive in the day, you know, that's it there. And it's got lots of blinking lights, so I had to rewrite the BSD kernel to make the lights work, and
我们现在看到的是什么?这些是
What are we looking at here? What is what's
最顶部是PDP-11/70的控制面板,基本可以忽略。下面有两个机箱。其中一个装着
So the very top is a PDP eleven seventy control panel, which we can largely ignore. And then there's two chassis below that. One has
这些旋钮是干嘛的?抱歉问些蠢问题。
What are the different knobs? Sorry to ask dumb questions here.
旋钮控制LED的显示模式。通常你会看到数据总线和地址总线。可以暂停机器运行,通过开关编辑总线上的地址,还能直接往内存里写入数据。
The knobs in control what view you get of the LEDs. Oh. So normally, you see the data bus and you can see the address bus. And you can pause the machine, you can edit the address on the bus, and you can deposit stuff into memory with the switches.
天啊,这种实体旋钮加LED灯的组合,完全符合人们对电脑的想象。太酷了。这些标着D U 1、D U 2的是什么?
Man, the haptic plus the LEDs, that's what you, like, imagine a computer to be. That's so cool. That's so cool. I mean, these are what what are these? Is it D u one, d U two?
对,这是个古怪的软驱。双软驱共用一个步进电机,两个磁头像连体婴一样同步移动。
Yeah. 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. So what what kind of stuff are you doing with this? What are
你
you are
是在尝试修复它们吗?
you trying to restore them?
是的。所以我修复它们,
Yeah. So I restore them and
它真的能运行吗?哇哦。那些闪烁的灯是真的?
Does it actually run? Yeah. Oh, the blinking lights are real?
没错,都是真实的。然后我不得不重新构建内核等等,所以我必须学习BSD内核。现在我对它相当熟悉了,因为你知道,不能直接添加设备驱动对吧?
Yeah. It's all real. Wow. Then I had to rebuild the kernel and all that, so I had to learn the BSD kernel. I'm pretty familiar with it now To get because 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
嗯。
Mhmm.
是时候构建内核了。所以你得去找源代码,研究代码,然后
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? You've written a couple of 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. And basically what that means is that my brain does one thing, it does it very intensely, and then when it's done, 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.
这类人群大约占总人口的1%到2%。
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. If it's and it has to be something I love, it has to be something that's rewarding, it has be something I can make progress on, and there has 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.
不过你也提到过你患有ADHD(注意力缺陷多动障碍)。是的,还挺严重的。所以保持专注对你来说是种挑战。
That said, you also said that you struggle with ADHD. Yeah. Fair bit. So that's part of the component, like maintaining the focus.
问题其实在于进入专注状态。我极易分心——戴着降噪耳机反而睡不着觉就是典型例子。但一旦进入状态,就很难被打断,这很矛盾。
You are actually acquiring the focus is the issue. So I'm very easily distracted. I fall asleep with noise canceling headphones where 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. What's the biggest challenge of life with an autistic mind?
我无法理解他人的想法。我只能通过假设'如果我是你'来推测,这是我能力的极限。但多数神经典型人群能通过你的行为、反应和微表情来判断'莱克斯现在可能这么想'。
That I don't know what anybody else is thinking. So I know what I would think about this interaction if I was in your position and I was you. Yeah. 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 because he's acting this way, and his reactions are this, and his facial expressions say this.
这些对我都是失效的。所以我给每个接触的人都建立了代理NPC模型来辅助理解。
That's all kinda lost on me. So I run a little proxy NPC game for everybody I deal with.
这样看来社交互动确实会变得复杂些。
So I guess that makes social interaction a little bit complicated.
确实。电话交流尤其困难——我依赖多重线索,但电话里只有声音,会错过大量隐含信息。FaceTime就好很多,比如对方讲笑话后能看到笑容。
It can be. Yeah. 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.
在哪个
Where on the
电话里,我不知道你是在讽刺还是认真的,这种事。
phone, I don't know if you're being sarcastic or serious, and that kind of thing.
所以这些年来这可能给你带来了一些麻烦。
So that's probably gotten you into trouble over the years a bit.
是啊。和我妻子之间也有很多次,嗯,自闭症带来的某种字面理解倾向。我们有过好几年,她会说些什么,我就说,但这说不通啊。她懂我意思吧?
Yeah. There's lots of times with my wife too where well, too, there's a certain literalism that comes with autism. Yeah. And we spent years where she would say something, and I'd say, but that doesn't make sense. She's 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 that they've got this communication loop going on, and I feel like, you can't 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 there was an early somewhat awkward encounter with Bill Gates. Can you share this the story of that interaction and how autism comes into play here?
好。我在微软实习的第一个夏天,比尔召集了所有实习生。大概20或25个
Yeah. 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 Yeah.
那年招的人去他家吃汉堡喝啤酒,在后院聊天。当然那可是比尔·盖茨,就算在当时也够让人紧张了。我的导师本认识他,就带我去介绍,说这是加拿大来的实习生戴夫,四个月里完成了磁盘复制和智能驾驶功能,列举了我的成果。但我打断说其实是三个月。
That got hired that year over to his house for burgers and beers and just chatting in the backyard. 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 to Dave, he's our intern from Canada, and in the space of four months, he's done this feature in discopy and smart driving, listed off all the stuff I was doing. But I stopped because I'm like, well, actually, it was three months.
他俩愣住了对视一眼,我才意识到不该这时候纠正。但
I had to interrupt them and they both kinda, what? And they looked at each other and I realized that was the wrong time to correct the guy. But
是啊。所以他们买的是那种,小小的不准确之处。
Yeah. So you they bought like, little inaccuracies.
哦,真要让我发疯。
Oh, drive me crazy.
对。然后,你知道,当然,你不会意识到这可能对一次随意的社交互动产生的影响,对你来说要意识到这一点并不简单。
Yeah. And then, you know, of course, you don't the the impact that might have on a on a casual social interaction, it's it's not trivial for you to be aware of that.
是的。我比以前好多了。以前我不知道,也不明白在对话中毫无意义地插入纠正会如何影响并让对方感觉。现在我更明白了,但是
Yeah. 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 and make the other person feel. Now, I got 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?
在繁荣和财务方面,我能说的最重要的一点是推销你能做的事,而不是你自己。因为如果你去参加一个工作面试,试图用你的个性和你有多棒来打动他们,可能会成功也可能不会。但如果你带着你的作品集去,说,看,这是我的GitHub历史,这是我贡献过的很棒的项目,这是我写的实际算法,这就是我能做的。我觉得这样你会走得更远。所以无论你是弹钢琴还是写代码。
In terms of prosperity and finances, the biggest thing I can say is sell what you can do and not yourself. 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. 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 how do you 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. 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 affirmations.
有些人只想要钱。有些人想参加重要会议并做决策。但我当时对这些基本无感。所以最终我不得不明白,你管理的每个人都有自己的一套动机和优先事项,它们与我以为的完全不同。
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 by like ask them about what their interests 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 kinda social dance, so
是的。社交舞蹈的一部分在于很多事都不言而喻。嗯。你可以试着解读他人。但对自闭症来说可能有点困难,所以必须把事情说明白
Yeah. Part of the social dance is there's a lot of stuff that's unsaid. Mhmm. You can kind of figure out, you can read people. But if that's, you know, 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. Yeah. I would love to be a fly in the wall, some of your earlier interactions with 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.
你说的十秒自闭症测试很对。能解释下原理吗?
You're right about the ten second autism test. Could you explain how this works?
当然。任何二选一测试误差率都很高。但问题是:对社会整体而言,人们更需要合作精神还是创造力?必须选一个的话,神经典型人群通常倾向合作
Yeah. Now, 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.
所以如果你想加倍精确,可以用第二个测试:假设房间里有10把椅子,进来6个人坐下。还剩多少椅子?人们会说4把,但我要说10把——因为客观上椅子数量没变。我并非故意刁难。
So if you wanna double your precision, you can use the second test, which is you ask, there's a room with 10 chairs, and six people come in and sit down in those chairs. How many chairs are left? Now, people are gonna say four, but I'm gonna say 10. Because that's how many chairs are still there, literally true. And I'm not being a dick.
我不是要搞复杂,但这就是我的思维方式。看到这种问题时,它会改变你的回答方式。
I'm not trying to be complicated, but that is how my mind works. Yeah. And so when I see that question, it's like, it turns how you answer it.
所以你理解事物总是这么字面化吗?
So you're how literally you take things?
没错。所有事对我而言都极其字面。记得小时候祖父在厨房给我妈做花架,用了超大角铁固定。我说'这够结实吗?能撑住花盆吗?'
Yeah. Everything is very literal 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. But for a lot of my life, I took figures of speech as literal. So
你提到用'情感后处理'策略替代社交互动,逆向推导来理解常规世界。这对很多人会有启发——具体如何操作?怎么帮到你的?
You mentioned emotional post processing as a strategy you use to replace social interactions, so you can sort of reverse engineer and to to to help you understand in your typical world. Can I I think this is gonna be useful to a lot of people? Like, what what does that entail? How does that help you?
比如初次见面后,我会回家复盘所有需要做选择的时刻。先处理最尴尬的:当时哪里做错了?漏掉了什么?对方怎么想?下次如何改进?极端情况下是否需要补救?
So if I meet somebody, particularly somebody new, and it's my first couple of interaction with them, it's like even meeting you today, then I will go home later and replay all of the moments where I had choices to make. 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, I still have it. So we've had it fifty years.
有次我取回父亲1969年买的翻新车,工匠们花了三年几千小时。验收时我说'这里很好那里很棒',付完款就飞回家了。
And about twenty years ago, I had it restored. And it was like a three year process of craftsmen working on this car for thousands of hours. And 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, this is great, and everything else. And then I fly home and write the check, and the car gets delivered.
十年后我才意识到,我本该对那些工匠表达更多赞赏。于是给车行老板写邮件:'可能显得冷淡,但我对工艺非常满意'。他回复说'那个场景我常想起'。
And then I realized, probably ten 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, but what a great job they did. But I never did that because it's not what I wanted or needed in that moment. And I was completely oblivious to that. 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 ten 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.
所以现在我很欣慰
So I'm like, now I'm glad
我意识到人类互动中有许多微妙的细节对人们意义重大。如果你直接询问,他们可能无法明确表达,但这些细节确实很重要,一旦出现偏差,就会让人感到不适。然而,要让一个可能无法感知这些社交细微差别的人逆向理解这一点,确实相当困难。
There's I brought it subtle things about human interaction that mean a lot to people. And if you ask them straight up, they might not be able to sort of articulate that, but it means a lot, and when it's off, when something is off, it bothers them. Right. But to 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. 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 other until then, I'm going to assume you're gonna handle it just like I would in your position, in my case, with what I know now.
你会给非自闭症人群什么建议?比如如何成为更友善的朋友、更体贴的伴侣或更默契的同事?应该如何与你们沟通才能提供更有效的信息?
What advice would you give to people, like, the other side, how they can help you be a better friend or better partner, better colleague? Like, how they should communicate with you to help like, give more information?
是的,请务必具体明确。不要指望我能捕捉暗示、弦外之音或微妙信号。如果你想引导我做出特定行为,最有效的方式就是直接说:'戴夫,你需要这样做。'
Yeah. Be really specific. And don't assume I'm gonna 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. Alright.
如果按1到10分打分,你会给我几分?负六分?七分吧。其他沟通方面75分。浮点数计算。
What what what score would you give me at one to 10? Minus six? A seven. Other communication, 75. Floating point.
不错。关于'伪装',你得给我解释下这个概念。这对许多谱系人士来说是个重要体验。什么是伪装?能分享下你的相关经历吗?
Nice. Masking, you gotta 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. Mhmm. And that is how do I conduct myself in a social situation in a way that other neurotypical people are going to or that other people that who are neurotypical are going to receive and accept it the right way. Mhmm. And everything you do in a social interaction, from waving my hands, to taking face face facial expressions, to tone of voice, to posture, it's a huge contrivance, and it's work.
是的。对大多数人来说这很自然,就是他们的日常行为。酷的人做得特别好。但对自闭症谱系的人来说,你得全程伪装。
Yeah. It becomes 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. Acting normal.
Rush乐队有首歌你知道吗?对,《聚光灯》。Neil Peart写的。我只能推测已故的人,但我感觉他可能也在谱系上。
There's a song by Rush, you know, the band? Yes. Limelight. It's written by Neil Peart. And I I only speculated 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, you know, 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, and I have no idea, but that was what I took from it.
嗯。你把崩溃描述为一种压倒性体验。能具体说说崩溃吗?通常什么会引发崩溃?
Yeah. You described meltdowns as an overwhelming experience. Can you describe meltdowns? What what typically triggers a meltdown?
通常是情绪过载到无法控制行为的时候。就像《雨人》电影里他试图登机被强迫时失控那样。或者我看过一部医疗剧——可能是媒体最好的自闭症刻画——主角是自闭症外科医生,后来因自闭症被禁止手术。
Generally, it is it's when you're emotionally overwhelmed to the point that you can't manage your behavior anymore. And 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? Anyway, there's a TV show where a doctor is 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.
他彻底崩溃了。电视剧这段刻画得相当真实。
He has a complete meltdown. And it's a pretty good portrayal on television. So
实际发生什么?就像跨过某个阈值...对。开关突然切换。本质上就是蓝屏死机。
What is actually happening? Like, there's a like, a threshold you cross that is just like Yeah. Switch flips. It's the blue screen, essentially. Yeah.
差不多。对大脑算法来说。
Kind of. For the brain algorithm.
开关切换后,你会进入原始脑状态。前额叶皮层基本停止工作,失去决策和过滤能力。那时你就像爬行动物的大脑,完全处于恐慌状态——是对无法承受现实的战斗或逃跑反应。
So switch flips, you go kind of 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 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? What are some of the challenges of that? You know, there's a show of love on the spectrum.
我听说过,但没看过。
I've heard of it. I've not seen it, but I've heard
因为某些特质,比如对事物字面化的理解,反而让恋爱关系的复杂性在那个情境下展现得更加明显。
of it. Because certain aspects, literal interpretation of things, it just makes the complexity of relationships, of romantic relationships even more explicit in that in that context.
你看,我结婚三十一年,在一起三十七年了。有天晚上我们坐在车里,停在房子前的暗处,街对面有栋漂亮的房子,院子围栏是用锚链连接的大砖柱构成的。我看着这些两英尺见方的柱子,还有柱顶石,就在想:这些柱子是空心的吗?里面填了土还是灌了混凝土?我现在的妻子当时看着我说:你脑子有什么毛病?怎么会琢磨这种事?
You know, I've been married thirty one years and together for thirty seven, so a long history there. And I think our first indication that we knew we were very different was we were sitting in a car one night, in front of the house at dark, and across the street, there's kind of a nice house that has these big brick pillars that are linked by like anchor chains and it forms a fence around the yard. And I'm looking at these things, because they're about two feet square, and I got a capstone, and I'm like, you know, wonder if they're hollow, are they backfilled, or are 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.
那一刻我们就明白了——我执着于探究原理,她执着于质疑这种执着。我们知道彼此截然不同。
And we That's just knew in the moment that I was passionately involved in caring, and she was passionately involved in why would you even worry about that kind of thing. We knew we were very different, so
确实。非常具体又看似无关紧要的细节。
Yeah. Very specific, seemingly irrelevant details.
但我向来不擅长人际交往。别人喜欢我时我都察觉不到。我儿子也是这样——毕竟基因遗传嘛。我给他买了件T恤,上面写着'如果你在撩我,请明确告知,因为我完全get不到'。这说的就是我。我只能靠日久见人心,因为完全不懂社交场上的那些套路。
But I was never good with people I don't get it when people like me, I guess. And so I and my son is the same way, because they all don't fall very far from three. And I got him 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. I mean, had to be around a long time and kinda grow on people because I had no game, because 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, like, love you, that kind of stuff?
能。我是说,她家人在表达这类情感上比我家开放得多。是的。所以这对我来说是个成长过程。不过现在这对我不是问题。
Yeah. I mean, her family was way more open with that kind of thing than mine was. Yeah. And so it was a growing period for me. But, yeah, it's not a problem I have.
好吧。但感觉这似乎不重要。这到底能实现什么实际效果?
Okay. Alright. But but it seems like unimportant. It was like, what is that actually accomplishing?
现在我们经常互相确认和检查。比如最近两年,我们会这样做:她会突然问‘你还好吗?’我就说‘还行’。这包含两个步骤——首先是‘你还好吗’这个询问。
Well, now we do a lot of affirmation and checking. Like, in the last couple 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. And so it's always just 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've Yeah. Developed that.
所以‘还行’和‘还行’之间有天壤之别。嗯。这又是人类沟通的微妙之处。你曾写过人们‘感觉有点自闭’的体验,能展开说说这个概念吗?
So there's a vast chasm between yeah and yeah. Mhmm. Again, that's 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?
我认为约10%-20%的人处于自闭谱系但未达到障碍程度。他们仍具有许多自闭特质。如果能优化管理这些行为,既能发挥相关优势,又能调解随之而来的缺陷。我主要是为孩子们写的——据我所知他们都没自闭症,但都继承了我某些相关行为特征。
Yeah. I think a lot of people, maybe ten to twenty percent of the population, is somewhere on the autism spectrum, but isn't impacted by enough that it rises to the level of a disorder. 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 to 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.
为什么你觉得这么多优秀程序员和工程师都在谱系上?
Why do you think so many programmers, like excellent, like 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. 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. Yeah. Yeah. What's the cool thing you hope to program to build this year? What are you working on?
所以我们有了这个强化学习项目,学习如何玩《暴风雨》。你现在进展到哪一步了?成功的预计时间是什么时候?比如胜利的时刻。
So we got we got the RL, learning how to play Tempest. Where are you on that, by way? How like, where what's the ETA on success and dominance? Like victory.
嗯,已经非常接近成功了。我觉得现在主要是调整模型大小和层数这类参数,让它能突破当前的学习瓶颈。但你知道,这涉及几千行Lua代码,几千行Python代码,它们都能交互运行。所以现在95%的工作已经完成,剩下的就是调参和期待最佳效果了。
Well, it's very close to working. I 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, 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, it's tuning hyper parameters and hoping for the best.
所以从某种意义上说已经成功了,但现在你想看看它能走多远?
So it's already a success in a sense, but like now you're seeing like, how far can this go?
没错。我的目标是让它能打败我。这很难,虽然现在很多游戏AI已经比人类强,但可能还没涉及这么复杂的游戏。
Yeah. My goal was for to be able to beat me. That's a tough 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? What do you hope to build this year?
PDP-11相关的项目,我正在尝试搞到一个叫RA 82的驱动器。这是个14英寸的大家伙,转速3600 RPM,声音像洗衣机。然后我得找到控制卡,编写代码,集成到驱动里,让整套系统跑起来。你想在上面运行什么代码?我得先让驱动栈正常工作。
The PDP 11 stuff, I'm trying to get what's called an RA 82 drive. It's the big 14 inch monster that spins at 3,600 RPM, and sounds like a washing machine. 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 have to get the driver stack to work.
所以我需要把它的驱动集成到内核里。
So I have to incorporate the driver for it into the kernel.
你最近组装了台1TB内存的机器。怎么做到的?为什么需要这么大内存?
You build a machine recently with one terabytes of RAM. How did that happen, and why?
我们有个叫GitHub Primes的项目。直接搜索就能找到。就是用大约100种不同语言实现同一套质数算法。要求必须遵守特定规则以保证公平性。
So we have a project called GitHub Primes. If you just search for GitHub Primes, you'll you'll find it. It is GitHub Primes. A single set of prime number algorithms implemented in about a 100 different languages. So it's the exact same algorithm, and we require that you follow certain rules to make it fair.
嗯。然后你用你选择的语言尽你所能表达那个算法,我们每晚运行一次基准测试,汇总结果并找出哪些语言速度最快。
Mhmm. And 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? Yeah. Oh, so this is so, yeah, you got it. And this is what that you're using this for?
是的。哦,
Yeah. Oh,
所以这台机器运行那些测试?是的。好的。你得告诉我这个项目的事。这是个史诗级的项目。
so this machine runs that those tests? Yes. Okay. You gotta tell me about this project. This is an epic project.
所以你在比较不同编程语言的性能。
So you're comparing the performance to the different programming languages.
所有这些语言。它们都被构建到单独的Docker容器中,然后全部运行。
It's all these languages. So they all get built into an individual Docker container, and then they all run.
这是个令人难以置信的项目。真的非常非常酷。它真正测量了不同语言的性能。那么你了解到哪些语言,通常哪个语言会胜出?
It's an incredible project. This is really, really cool. It's really measuring the performance of the different languages. So what what have you learned about which languages like, who which language usually wins?
我认为现在是Zig。Zig?这会有变化。有人会对C++做出改进,它会领先一段时间,然后Zig的人会生气,回来把它做得更快。
Zig, I think, now. Zig? It does it varies. People will make an improvement to the c plus plus and it'll pass for a while, and then the Zig guys will get angry and come back and make it faster.
Zig、Rust、C++、C。对。他们在运行什么样的代码?他们试图运行哪段代码来测量性能?
The Zig, Rust, c plus plus c. Yeah. And what kind of code is being run? What's the piece of code that they're trying to run to measure the performance?
他们做的是在五秒循环内尽可能多次地计算100,000,000以内的素数。
So what they're doing is they're solving the primes up to 100,000,000 as many times per second as they can in a five second loop.
对。所以这是个循环。明白了。一遍又一遍
Yeah. So it's a loop. Got it. Over and over
一遍又一遍又一遍又一遍。没错。在所有核心上。所以是跨所有CPU的。
and over and over and over. Yeah. On all cores. So what Across all CPUs.
那程序的编写方式呢?会有变化吗?
What about, like, how the program is written? Does that vary?
不会。你可以自由发挥,但必须使用素数筛法。最多只能用每个整数对应一个比特位,不能用更便宜方便的字节。还有一系列类似规则,比如必须在时间循环内分配内存。我们有套规则体系,也有些不合规的解决方案,比如6502处理器,由于只有64k内存,无法处理1亿位的筛法。
No. 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 time loop. And so we have a set of rules, and we have some solutions that don't follow the rules, the sixty five zero two, because you've only got 64 k, you can't do a 100,000,000 SIF.
这类解决方案我们作为展示项目运行。但主流语言实现都遵循相同规则。所以本质上只是算法在特定语言中的表达方式差异。很多语言使用相同的后端编译器,因此真正体现的是语言表达方式的特性及其局限性或优势。
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 back end compiler, so it really is how you're expressing it and the limitations or the benefits of that language.
每种语言会有多个提交版本吗?
Are there a lot to be multiple submissions per language?
有的。比如C语言就有五个左右。
Yep. Yeah. So if if you look in the c, there's like five, I think.
明白了。其中有些可能使用不同编译器
Okay. And they they some of them might use different compilers
对吧?是的,有些用GCC,有些用CLANG或LLVM。
or no? Yeah. Some are GCC, some are CLANG, LLVM.
我正在看几年前的快照。Zig排第一,接着是Rust、Nim、Haskell。等等,这不是按运行速度排序的吧?
I'm looking at a snapshot here from a couple years ago. Zig was at the top, then Rust, then Nim, Haskell. Oh, no. This is not this is not ordered by Slowness, or is it?
是的。所以CU会是Zig的1.5倍长。
Yep. So c u would be 1.5 times as long as zig.
哇。好的。真有意思。嗯,这是个超级酷的项目。
Wow. Okay. Fascinating. Well, it's a super cool project.
没错。我们甚至还有像PowerShell这样的疯狂语言。有个PowerShell版本之类的,所以。
Yeah. We've got crazy languages like PowerShell. There's a version in PowerShell and stuff like that, so.
所以这是自动化的,比如在提交的组织方式上有结构化的流程。这很酷。
So this is automated, like, in terms of organization of, how the submissions are done, there's a structure to it. That's cool.
对。欧洲有两个人,Rucker和Tutor,现在基本上负责这个。最初只有三种语言,我做了Python、C#和C++。我提交后发布了那期节目,然后人们开始往里面添加更多解决方案,事情就失控了。
Yeah. There's two guys over in Europe, Rucker and Tutor, basically own this now. I started as just three languages. I did Python, c sharp, and c plus plus. And I checked them in, and I published the episode, and then people started throwing more solutions in there, 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? Like, what do you enjoy most?
我觉得最有趣的是当我构建了一个复杂的东西,经过深思熟虑它应该如何运作,然后运行它时它确实按预期工作了
I think the the most fun for me is when I build something complex and I thought through how it should work, and then I run it and it does work that way
嗯。
Mhmm.
这带来强烈的满足感。看到结果按我的计划呈现并成功运行,因为第一次很少能这样,
That creates intense satisfaction. So seeing the results come out the way that I plan them and have it work, because it rarely does the first time,
但确实。尤其是第一次就成功的时候。
but Yeah. Or especially if it does work the first time.
我从不相信那种情况。总觉得漏掉了什么。确实如此。
I never trust that. I always feel like I'm missing something. That's true.
不过你知道,对于像C++这样的编译型语言,那种感觉总是很棒。你写了一大堆代码,全部编译通过,没有警告也没有错误。这种感觉很酷。你认为编程的未来会怎样?现在我不知道你对LLM的代码生成有多大程度的实际体验。
But, you know, with compiled languages like c plus plus, that's always a good feeling. You write a bunch of code, you compile it all, compiles without warnings, without errors. It's a cool feeling. What 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 cogeneration.
你经常用Cursor吗?对比VS Code的代码生成功能?
Do you use have you used cursor much? Cursor Versus code with with cogeneration?
是的。我在Python方面用了很多,因为我不太擅长Python,算是新手。所以发现它很有帮助,通过观察生成的代码学到了很多——当我不知道怎么做的时候。因为如果完全自己写Python,代码量会是AI生成的四倍,毕竟Python在行家手里可以非常简洁。
Yeah. I've done a ton of it for this the Python side, because I'm not great with Python, and I'm kinda new to it. 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 write Python from scratch, it's gonna 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。这就像优秀C++程序员快速掌握新语言的典型案例。
Oh, that's cool. So just you you essentially learn Python for this project. Yeah. So this is a good case study of like a great programmer in c plus plus quickly learning a language.
对,我靠感觉摸索着来。
Yeah. I'm vibe coding my way through it,
我想是吧。凭感觉摸索。如果你已经是优秀程序员,这确实是学习新语言或解决问题新方法的强大用例——通过生成代码来学习。因为你大概率能理解它生成的Python代码。
I guess. Vib coding your way through it. And that 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 generated. Because you already you probably understand the Python code it generates. 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 a 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. 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, hey, I can make you incredibly powerful.
你认为编程的未来会怎样,比如十年、二十年后整个流程?现在,感觉编码更像是个有趣的梗,因为那些不懂编程或仅凭感觉编码的人几乎都在创建无法投入生产环境的系统。它们很难成为一个真正的产品。而那些已经优秀的程序员以任何方式进行感觉编码时,本质上这只是一个花哨的自动补全,他们最终会编辑它,或者这是一种学习新API、新语言或特定用例的方式,也许是某种GUI组件之类的。
What do you think is the future of programming, like, ten, twenty years from now, this whole process? 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 it or just vibe coding are almost entirely creating systems that are not usable in production. They're not you can't it's very difficult to create the a product. And the people who are already great programmers kind of vibe code just for any 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 or a new language or a new whatever, a new specific use case, or maybe a different kind of, like, a GUI component or something like that.
但随着它们越来越智能,我们不知道上限在哪里,这可能会改变程序员这一职业的本质。你有考虑过这个问题吗?
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?
我想过。虽然不想说‘提示工程师’,但我觉得未来会类似这样——就像建筑师建桥,过去人们需要焊接钢梁,而现在是在AutoCAD中拖拽预制构件进行组装。我猜编程也会如此:你不再逐行写代码,而是移动组件和接口,向AI描述交互逻辑,让它构建组件。但我们离它能完全自主生成还有很长的路。
I do. I think I don't want to say prompt engineer, but I think it's going 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 preform sections. And I assume that's what programming will be like. You won't be in there throwing individual lines 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.
你现在还不能说‘给我一个兼容Linux的内核’,它就能直接生成。总有一天可以,但现在还不行。
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.
抽象层级攀升得如此之快会让你感到失落吗?像你这样从机器码、汇编语言到C/C++一路走来的人,现在却到了用自然语言感觉编码的阶段。
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 plus plus that we're getting to a point where we're vibe coding with natural language.
是啊。我觉得自己生逢其时——在三四十年间亲历技术演进。我懂TTL逻辑,能用AI写代码,也了解中间的所有环节(当然有知识盲区)。但要想获得这种完整的知识图谱,恐怕只有经历这个时代才能做到。
Yeah. I kinda came up at a really fortunate time, I think, because I had to come up with the technology over the course course of thirty or forty years. So I understand TTL logic, and I can use AI to write code, and I kinda know all the pieces in between, 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.
确实。
Yeah.
对于现在入行的人来说,这种经历很难复现了。
And it's gonna be hard to duplicate that for people starting now.
你认为这一切的意义是什么?关于存在、生命,以及这里发生的一切。
What do think is the meaning of this whole thing? Of existence, of life, of whatever's going on here.
创造酷炫的东西。我想从根本上说,我在乎的是能够制作对他人有用的复杂事物,这能发挥我的能力,让我保持创造力,并创造出他人可用的东西——如果局限于传统艺术如绘画或雕塑之类,我可能就束手无策了。所以对我来说,这就是生命的真谛。然后或许再培养几个好孩子,把接力棒传下去。
Making cool stuff. 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 good kids to hand the baton off to.
是啊。你一生中创造了许多影响数百万甚至数十亿人的酷炫事物。现在你又通过YouTube激励大家,继续创作令人惊叹的内容。对于你过去和现在所做的一切,我是你的超级粉丝,真的非常感激你的贡献,也很庆幸今天能有机会和你交谈。
Yeah. And you've created a lot of cool stuff over your life that impacted millions, probably billions of people. And now you're inspired you're creating cool stuff for everyone to see on your YouTube, and you're inspiring people in that way. So for everything you've done in the past and everything you're doing now, I'm I'm a big fan. I'm really grateful for what you're doing and grateful that we got a chance to talk today.
谢谢你,兄弟。
Thank you, brother.
谢谢。
Thank you.
感谢收听与戴夫·普卢默的对话。如需支持本播客,请查看简介中的赞助商信息。最后,让我引用C++之父比雅尼·斯特劳斯特鲁普的话作为结束——顺便说一句,我在很久以前的播客第48期采访过他。他说:“世界上只有两种编程语言:一种被人抱怨,另一种无人使用。”感谢收听,我们下次再见。
Thanks for listening to this conversation with Dave Plummer. To support this podcast, please check out our sponsors in the description. And now, let me leave you with some words from Bjorn Stroustrup, creator of c plus plus, and somebody who, by the way, I interviewed a long long time ago, episode 48 of the podcast. 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.
关于 Bayt 播客
Bayt 提供中文+原文双语音频和字幕,帮助你打破语言障碍,轻松听懂全球优质播客。