back to indexDave Plummer: Programming, Autism, and Old-School Microsoft Stories | Lex Fridman Podcast #479

Chapters
0:0 Introduction
1:22 First computer
7:0 Dropping out of high-school
14:41 Joining Microsoft
16:53 MS-DOS
20:5 Windows 95
26:52 The man behind Windows
31:48 Debugging
37:5 Task Manager
42:14 3D Pinball: Space Cadet
47:13 Start menu and taskbar
58:12 Blue Screen of Death
60:21 Best programmers
68:22 Scariest time of Dave's life
75:50 Best Windows version
77:40 Slot machines
81:23 Autism and ADHD
100:43 Fastest programming language
104:48 Future of programming
00:00:00.000 |
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. 00:00:22.480 |
Yes, the Windows Task Manager, and the zip-on-zip compression support in Windows, and he ported the code for Space Cadet Pinball, aka 3D Pinball, to Windows. 00:00:35.400 |
Today, he's loved by many programmers and engineers for his amazing YouTube channel called Dave's Garage, that you should definitely go check out. 00:00:44.040 |
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. 00:00:58.580 |
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. 00:01:14.820 |
To support it, please check out our sponsors in the description. 00:01:25.620 |
I didn't own my first computer for a long time, but the first computer I ever used was a TRS-80 Model 1 Level 1 4K machine. 00:01:31.580 |
And I rode my bike in 5th or 6th grade, so I was about 11, to the local Radio Shack. 00:01:36.280 |
And, you know, they had the standard component stereo systems and everything else the Radio Shack had. 00:01:40.800 |
But they had a stack of boxes that was labeled computer. 00:01:43.560 |
And so I was asking the people that worked there about it, and they said they just got it, and they hadn't set it up yet. 00:01:47.460 |
And so I was rather precocious, and I figured, well, I'll set it up for you. 00:01:55.500 |
I mean, it's no worse than a component stereo. 00:01:56.920 |
The only thing is that Tandy and their infinite wisdom used the same 5-pin DIN connector for power, video, and I think cassette, so they're all identical. 00:02:04.080 |
And if you plugged them in wrong, you'd blow it up. 00:02:08.620 |
And I got it working and wound up playing with it and not knowing anything about computers. 00:02:12.560 |
So I'm typing English commands into it, and, you know, print 2 plus 2 works perfectly, yet more simple in English that you enter into a basic level 1 interpreter is not going to get you very far. 00:02:27.160 |
And I still have an old full scap that I wrote in 6th grade of a program that's kind of logically correct, but has no chance of working on any interpreter that existed at the time. 00:02:36.960 |
So it took me a while to figure out what was actually going on with them. 00:02:40.140 |
But I rode my bike down there every Thursday and Saturday, and they had gracious to let me use the machines. 00:02:47.320 |
What was the state-of-the-art of computing back then? 00:02:51.780 |
There was a TRS-80 Model 1, there was the PET 2001, and the Apple II came out roughly simultaneous. 00:02:59.640 |
Would you say that's the greatest computer ever built? 00:03:02.920 |
Well, I would probably give that to the Commodore 64. 00:03:08.500 |
That was my first computer probably many years after it was released. 00:03:13.940 |
But, yes, Apple II had a huge impact on the history of personal computers. 00:03:19.480 |
It's hard to gauge the long-term impact, but I think the 64 itself probably influenced more people. 00:03:31.800 |
It depends which numbers you believe, but even the medium estimates are pretty high. 00:03:37.260 |
So you eventually graduated to the Commodore 64. 00:03:44.400 |
Well, the first thing I did was overheat the floppy drive on it, which was unfortunate because it wasn't a warranty machine. 00:03:49.880 |
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. 00:03:58.420 |
So I was left with no floppy, and so I had a cassette deck, which was the best you could do at the time. 00:04:02.640 |
And so I was writing small things, and I had a machine language monitor that you could load from cassette. 00:04:07.260 |
Didn't have an assembler built in, but a disassembler. 00:04:09.660 |
So you could enter the opcodes in 6502 in hex, and if you were careful about planning, you'd be able to write some basic programs. 00:04:18.080 |
And the first thing I ever wrote on it was a clone of Galaga. 00:04:23.080 |
Now, it's a bad clone of Galaga, but it has the major enemies that attack over time, and it's all written in hand-coded machine language, and you can't relocate 6502. 00:04:31.360 |
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. 00:04:39.720 |
And I went to make a backup of it to preserve it for future scholars or whatever the hell I was doing. 00:04:45.020 |
And I copied my blank floppy onto my data floppy. 00:04:50.400 |
So that was my first experience with data management. 00:04:52.980 |
So I don't have a copy of my first program anymore. 00:04:54.980 |
What was that feeling like, do you remember, of just doing something, if I may say so, like stupid, you know, which is a part of the programming experience? 00:05:04.080 |
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, or you made an unwise choice. 00:05:12.620 |
Can you tell me about the programming involved in that game? 00:05:19.520 |
Not assembly yet because there was no assembler built in. 00:05:21.820 |
And so I should have written an assembler as my first task, but I wasn't that clever. 00:05:29.020 |
And it's just one of those things that sticks, I think. 00:05:32.640 |
You know, if I give you a C issue, there are certain syntactic issues in C that you're never going to forget and get wrong. 00:05:39.680 |
Like, what are the limitations of programming in machine code as a programmer? 00:05:43.880 |
The biggest issue is you have to write completely sequentially. 00:05:47.020 |
Because at least in that variant, 6502, you can't add things later. 00:05:53.960 |
What was the most complicated thing you've built with machine language? 00:05:56.480 |
That game would be, I mean, in assembly language, I've done a fair bit of complicated stuff. 00:06:01.520 |
But in actual machine language, I think that game would be the only thing I've actually... 00:06:11.440 |
When did you first fall in love with programming? 00:06:13.520 |
When you figured out, like, this is something special? 00:06:19.700 |
I always knew immediately that I was fascinated with these machines. 00:06:22.480 |
From the TRS-80 Model 1, it's all I wanted to do is ride my bike back there and have more time with it. 00:06:26.960 |
And I did that, you know, to wear out my welcome as much as I could. 00:06:31.720 |
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 going to do. 00:06:37.720 |
Am I going to make the 12 flash on a VCR somewhere or am I going to go work on an operating system? 00:06:41.700 |
I have absolutely no idea what I'm going to do post-graduation, but I love what I do. 00:06:46.320 |
And so I think that was a lot of consolation. 00:06:49.640 |
It's like, it doesn't really matter what I'm doing at this point because I kind of love doing it. 00:06:55.360 |
As long as you're following this kind of feeling. 00:07:04.160 |
But you ended up going back to school and being very successful at school and just in general, successful as a programmer, as a developer, as a creator of software. 00:07:17.040 |
Can you tell that journey of dropping out and then finding your way back? 00:07:23.100 |
You just go less and less and less until you realize it's going to be embarrassing if I show up because I haven't been there in a long time. 00:07:30.600 |
So if you find yourself on that path, stop doing that. 00:07:36.160 |
And so now I'm not at school and I have to get a job. 00:07:38.940 |
So I'm working at 7-Eleven and a paint warehouse and stuff like that. 00:07:41.940 |
And 7-Eleven is actually kind of an interesting job because it's a job I think they keep rotating for people that are smart enough to do the night shift with all the accounting and the administration and stuff they make the night shift do. 00:07:52.540 |
But that have reasons personally that they need to work at 7-Eleven. 00:07:55.100 |
And I was one of those people because I had no high school diploma. 00:07:59.440 |
What are some memorable moments from that time at 7-Eleven? 00:08:04.200 |
What do you appreciate about the difficulty of that job? 00:08:10.100 |
I mean, I got held up at knife point and stuff and that's all entertaining. 00:08:12.640 |
But the worst, the most, the suckiest part for me was doing the gas dips. 00:08:17.420 |
You've got a long, it's like a 15 or 20 foot wooden stick and it's measured in gradients of inches and feet. 00:08:22.600 |
And you drop it into the gasoline tanks and then you bring it up and you measure where the gasoline sits because there's no electronic sensor. 00:08:28.700 |
So I'm doing that and the first time I do it, I drop the pole and I re-drab it. 00:08:32.540 |
Well, that's about a thousand splinters of wood into your hands and it's 40 below out and that really sucked. 00:08:39.420 |
I realized I don't want to do this for my whole life. 00:08:44.400 |
So you stand there frozen with splinters in your hand. 00:08:47.460 |
And at some point I have a revelation about my life that next time I'm going to do it differently. 00:08:52.940 |
And then how ludicrous that is hits me about three seconds later, right? 00:08:58.280 |
And I think that was really the moment for me where I realized that I've got to do something different. 00:09:02.100 |
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? 00:09:08.880 |
And he's, no, you're too old and we don't have room. 00:09:12.460 |
And I said, well, between now and then somebody's going to drop out. 00:09:22.340 |
And so I did the three or four classes that I needed. 00:09:25.100 |
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. 00:09:31.800 |
You realize to yourself that you don't have to do the thing that everybody else is doing. 00:09:36.620 |
And that's a dangerous realization because like you kind of have to be part of society to do certain things. 00:09:44.660 |
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. 00:09:53.800 |
Well, the problem with that process is you're making a much smaller decision. 00:10:00.060 |
But you do that enough times, you're making a much bigger decision. 00:10:04.280 |
So it's better to make, if you want to live life in a non-standard way, it's better to make the big decision explicitly. 00:10:17.820 |
Well, you got back and you eventually went to college and were very successful as a student. 00:10:22.520 |
And you weren't that good of a student before. 00:10:24.880 |
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 12th grade class that I didn't have. 00:10:36.180 |
And that scared me because I realized by 1% or the grace of the professor that let me through, I just about ended my entire university career here. 00:10:45.660 |
So fortunately, those marks don't count on any transcript because they're remedial classes. 00:10:49.520 |
And so I got kind of a fresh start the next semester and did it for real. 00:10:55.540 |
What can you speak to maybe by way of advice on how to be successful as a student? 00:10:59.720 |
Well, ideally, there's some aspect of school that you do enjoy, whether it's art, whether it's computer science, whether it's shop class, whatever. 00:11:06.080 |
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. 00:11:13.640 |
And that's easy to say when you're 50 something. 00:11:15.800 |
It's harder to say when you're 15 something, but yeah, it makes a lot of sense. 00:11:28.440 |
So I had gone back to school and I think it was my third year of university. 00:11:32.500 |
I was working for the phone company for the summer as a summer job. 00:11:35.000 |
And I'm doing conversions of their UBNet to TCPIP and modern networking, which really amounts to swapping cards. 00:11:41.780 |
But then figuring out why their config.sys doesn't allow Lotus to run anymore because it's got 10k less than it used to. 00:11:46.760 |
And it's just a horrible time to be working in computers, but I was doing it. 00:11:50.120 |
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. 00:12:02.280 |
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. 00:12:08.760 |
And I'm reading this book and I become really entranced by it and fascinated because it sounds like exactly the place that I want to be, but I'm in Saskatchewan. 00:12:16.700 |
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. 00:12:28.580 |
And so I went through my registration cards because in those days you had a four by six card that people would fill out with their name and their address. 00:12:34.460 |
And if they had an email or email and they send it in, they get notifications of updates and so on when it's shareware. 00:12:39.440 |
And I went through the whole stack looking for anybody with a Microsoft email address. 00:12:44.320 |
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. 00:12:53.660 |
But one guy, Alistair, Alistair Banks, he wrote back and he said, I know somebody that I can put you in contact with. 00:13:00.840 |
Then he put me in contact with a guy named Ben Slivka, who did a phone interview, who eventually wanted to pirate me to work in MS-DOS for the summer. 00:13:09.520 |
You put yourself to school by, tell me about Hypercache. 00:13:14.940 |
It's the weight loss program for hard drives. 00:13:16.880 |
That was sufficiently useful to a large number of people that would somehow give you money. 00:13:25.780 |
I mean, I sold a couple thousand copies at 20 bucks a copy or 40 bucks a copy. 00:13:33.420 |
The actual really tight code to do the real work of transferring data to and from the cache with 68,000 assembly. 00:13:44.580 |
So any block that gets serviced from the drive would go through my cache first. 00:13:49.480 |
And so it would try to match the geometry of the drive and do pre-fetch based on you're trying to read a whole track at one time, that kind of thing. 00:13:56.560 |
What was it like trying to get your software out there at that time? 00:14:02.420 |
Like where, how were you able to find customers? 00:14:06.240 |
I think I started on Usenet and some of the Amiga forums posted, here's my trial version, try it out for 30 days, see what you like. 00:14:13.900 |
And eventually got picked up by a few retailers. 00:14:16.440 |
And I remember I was with my now wife in her car and she had a cell phone because her dad was very concerned about her safety. 00:14:22.080 |
And so this is late 80s and she's got, you know, the antenna on the roof and the big box in the trunk, the whole deal. 00:14:26.820 |
But we got a call from one of the software retailers that wanted to buy 50 copies at 20 bucks, which to me is a thousand bucks, which in 1989 or whatever year it is, was a big deal. 00:14:36.780 |
And so eventually a number of companies just bought inventory. 00:14:42.240 |
It's such an interesting time with Bill Gates and Microsoft. 00:14:44.200 |
Why do you think Microsoft was dominating the software and the personal computing space at that time? 00:14:52.120 |
At the time, it was the single most potent assemblage of smart people that I've ever been a part of. 00:14:58.100 |
And I've been in academia and I've been in industry to a certain extent. 00:15:01.460 |
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. 00:15:11.680 |
So when you get there, you're the big cheese from your small town. 00:15:15.480 |
And all of a sudden you're just in an environment where like, uh-oh, I'm just not going to speak because I don't want to look stupid. 00:15:23.180 |
What are some qualities of Bill Gates that you think contribute to the success of Microsoft? 00:15:27.600 |
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. 00:15:38.660 |
And he hired people that were as smart or smarter than him to help him execute it. 00:15:43.180 |
And he built an almost unstoppable machine of intellect to go forth and make, let's say, very simple products. 00:15:50.780 |
MS-DOS is not a complicated product by any stretch, but it's exactly what the market needed at that time. 00:15:58.700 |
And, uh, that's actually the team you joined, the MS-DOS team. 00:16:03.080 |
And I think you joined before Windows 95 was released. 00:16:11.020 |
That's, uh, success of MS-DOS is probably pivotal to the success of Microsoft. 00:16:18.200 |
Before DOS, they were largely a language company. 00:16:20.140 |
So they had made BASIC for a lot of computers. 00:16:22.040 |
And they had a Fortran compiler and a Pascal compiler, that kind of thing. 00:16:24.880 |
But their deal to have MS-DOS included with every version or every instance of the PC, effectively, set them as a standard that they were able to leverage for decades going forward. 00:16:36.960 |
And to a certain extent, they lucked into that. 00:16:38.920 |
And on another hand, they were smart to have done it. 00:16:41.900 |
So, because they didn't charge IBM a lot of money for it. 00:16:45.460 |
But making it a standard really played out to their advantage over time. 00:16:51.060 |
So at that time, MS-DOS, no graphical interface. 00:16:54.460 |
Can you just speak to what the heck MS-DOS is? 00:17:00.500 |
It looks up to see if that's in the current directory or on a special path to folders. 00:17:03.840 |
And it loads it into memory and executes it if it's there. 00:17:10.040 |
Now, it has environment variables and some complexity and a small scripting language built in. 00:17:14.220 |
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. 00:17:24.760 |
Now, Microsoft did add a text-based graphical interface for things like an editor and QuickBasic in DOS 5, I believe. 00:17:32.880 |
And it was a DOS shell, which was sort of a graphical file manager in MS-DOS 4. 00:17:38.060 |
So they experimented with it, but it's largely a command prompt. 00:17:41.380 |
Does it have ability to communicate with external devices, so drivers and all that kind of stuff? 00:17:47.560 |
Like how expansive of an operating system was MS-DOS? 00:17:51.740 |
Well, it was limited by the original x86 instruction set, which limited it to 640k. 00:17:56.940 |
And then there were various band-aids on top of that to do high mem and then extended memory beyond that. 00:18:02.460 |
And a lot of hoops have to be jumped through to make anything work without consuming base RAM. 00:18:15.200 |
Like you said, there's the memory constraints of 640 kilobytes. 00:18:20.420 |
Yeah, 640k is the maximum that's ever going to be available. 00:18:23.460 |
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. 00:18:28.900 |
So if you use 10k needlessly, you're going to, every machine in the world now has 10k less. 00:18:34.740 |
Is that a true quote from Bill Gates where he said... 00:18:43.460 |
Okay, so I mean, what are some interesting aspects that you were able to do as an intern when you joined on MS-DOS and beyond? 00:18:51.340 |
One of the first things I did was to take SmartDrive, the disk cache, because I was familiar with disk caches, and to add CD-ROM caching to it, because I was new. 00:18:58.900 |
CD-ROMs were just coming out, Microsoft Bookshelf was 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. 00:19:08.260 |
So it was a big performance win and a nice thing to work on. 00:19:11.020 |
A bigger part of that was moving a bunch of SmartDrive and eventually the double-spaced compression engine up into what's known as high memory. 00:19:18.940 |
And without rat-holing on the technical aspect of it, on the X86, there's something I believe called the A20 line. 00:19:25.360 |
And I probably have this backwards, or I got a 50-50 shot at it, but if you've got the A20 line asserted, then your memory pointers wrap at the one megabyte mark. 00:19:37.600 |
So you can rewrite memory above by combining your segment and offset registers to a number bigger than one megabyte, and you get an extra 64K. 00:19:45.280 |
And you put your code in there, and then you just put stubs to jump to it from low memory. 00:19:50.620 |
And so you can get another 64K out of the machine that way. 00:19:53.800 |
And we did that for a couple of other products. 00:19:55.400 |
And I had no idea what HighMem was because I was an Amiga programmer, and I'd never written any x86 code before I got there. 00:20:00.900 |
So that was like a cool optimization that you got to be a part of. 00:20:06.600 |
There was a parallel development of Windows 95, right, at that time. 00:20:09.940 |
Did you get a chance to interact with those folks? 00:20:12.100 |
I actually worked on Windows 95 for about three or four months. 00:20:14.940 |
I was on the CommOla 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. 00:20:26.420 |
So there's a presentation cache of enhanced metafiles. 00:20:29.980 |
So that shipped in Windows 95, but I moved to the shell team about six months after getting to Microsoft. 00:20:40.260 |
Windows 95 is an evolution of the original 16-bit Windows 3.1, which was the very first popular version of Windows. 00:20:47.160 |
And it adds 32-bit support and VXD drivers and a bunch of new technology and an entirely new user interface. 00:20:53.540 |
And it's something that at the time was revolutionary. 00:20:56.380 |
People lined up at night to wait in line to buy the thing. 00:20:59.640 |
Can you just take us back to that time and describe why 95 was such a big leap from 3.1? 00:21:16.480 |
I don't want to make it as basic as the start menu, but I think it's a big part of it. 00:21:21.000 |
I know when I first saw it, I couldn't quantify what about it was different and awesome. 00:21:25.260 |
But I realized that I wanted to be a part of it. 00:21:27.420 |
And that's why I started writing a shell extension, which became Zip Folders at some point. 00:21:34.340 |
And that's why I wound up working on the team that brought that shell over to the NT and what's Windows today. 00:21:38.700 |
Would you say that's the greatest operating system ever? 00:21:43.000 |
What's the most impactful operating system ever? 00:21:51.220 |
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 Z17 mainframe and run it today? 00:21:59.940 |
And they've been doing it for however many years that is. 00:22:03.900 |
And it's all on the business side, so we as consumers don't have much access to it. 00:22:08.080 |
But I think it was probably as influential in the commercial side as Windows 95 was in the home side. 00:22:14.020 |
And then probably Linux would be number three for me. 00:22:16.360 |
I put Linux as bigger than Unix, which doesn't work because you can't have one without the other. 00:22:21.340 |
But the impact of Unix, BSD, and so forth is largely in the academic space. 00:22:28.940 |
So, yeah, Linux created, I mean, it was the embodiment of the open source spirit at its largest scale. 00:22:41.440 |
And it created a spirit of programming that propagates to this day. 00:22:51.100 |
Yeah, and it's penetration on the server side of things now is, I don't know if it's equivalent to what System 360 achieved, but it's almost ubiquitous. 00:22:57.980 |
Yeah, the world, I mean, this is the quiet secret of the universe is it runs on Linux. 00:23:16.620 |
Well, your day starts coming in and you've got to download the address book. 00:23:20.860 |
Which is Microsoft has between 10,000 and 15,000 employees at this point. 00:23:26.020 |
We're just getting off of the PDP 11 called Miss Piggy, which ran Whizmail and we're running MS Mail. 00:23:32.800 |
But MS Mail has a fixed address book that every user must download every morning. 00:23:36.900 |
And when there's 10,000 people downloading 10,000 people, it gets pretty messy. 00:23:40.460 |
And I think we're on 10 megabit networking at the time. 00:23:43.100 |
So your first hour is downloading the address book, which was always frustrating. 00:23:46.620 |
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. 00:23:52.340 |
All the machines that are unused run tests all night long and they try to crash themselves. 00:23:57.640 |
And if they manage to crash themselves, it will drop into a debugger with a serial cable to another machine. 00:24:02.420 |
And you can connect to that other machine and remotely debug the crashed machine. 00:24:05.580 |
So you come in and they will have triaged bugs. 00:24:08.320 |
You know, there was a crash in the start menu. 00:24:12.240 |
And so you come in and that's your first thing is to connect because you've got to get that machine back to the guy that owns it and unlock the machine. 00:24:18.460 |
So that's your first hour of your day is basically triage for bugs that have come up from stress overnight. 00:24:24.060 |
And then at that point, it's probably back to coding, which unfortunately 80% of the time is fixing bugs, especially in my career. 00:24:35.240 |
I wrote a lot of new code on the side to get it out of my system from a day-to-day grind of always fixing bugs in other people's code, which is an amazing learning experience. 00:24:46.180 |
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? 00:24:53.120 |
Yeah, we took the entire Windows 95 user interface and we ported it to NT, which meant making it Unicode for one thing. 00:24:59.500 |
So everything that was 8 bits is now 16 bits. 00:25:01.860 |
So pointers, it's quite a mess when you switch the code over, as you can imagine. 00:25:06.620 |
Can you give us insights in what is involved in porting? 00:25:11.560 |
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. 00:25:16.920 |
You find all the good stuff, the pretty pictures hanging on the wall, and you find some disturbing stuff in the nightstand. 00:25:23.160 |
I saw a code that was like 200-some characters wide with, you know, profanity and swears in it. 00:25:29.500 |
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. 00:25:36.220 |
Right, because every single piece of code you have to go through. 00:25:45.800 |
You think you write a piece of code and you think you'll never be seen by anybody. 00:25:50.860 |
And oftentimes, that code is going to be seen by a very large number of people that come after you, including you five years later. 00:26:08.260 |
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. 00:26:16.600 |
And so he came over after, I believe it was PRISM and MICA were some projects at DEC West that got canceled. 00:26:23.260 |
And so you had a whole team of guys with their project just canceled. 00:26:27.960 |
And basically, they took a whole bunch of them and came to Microsoft. 00:26:30.280 |
And I didn't know the specificity of the deal, but they all showed up. 00:26:32.560 |
So you get Dave Cutler and Mark Lukowski and all these really smart guys from DEC. 00:26:37.020 |
And they did basically a clean sheet, but they also had OS2 as a starting point. 00:26:41.740 |
But OS2 was, of course, written in assembly language, and NT is going to be written in C. 00:26:45.720 |
So to what extent they were able to leverage any of that, I don't actually know. 00:26:50.340 |
But at least they had a system to start with. 00:26:52.580 |
You said that Dave Cutler is the man, the mind behind Windows. 00:26:59.660 |
So Dave Cutler is the architect of the kernel. 00:27:02.880 |
In the Linux world, it's Dave C in the Windows world. 00:27:07.280 |
And it's not that there weren't other people that contributed, of course, huge pieces to it. 00:27:10.660 |
But I think he's the driving force behind it and always largely has been. 00:27:24.120 |
Like what's interesting about his mind, having worked with him, having interacted with Dave Cutler? 00:27:29.740 |
Well, the dude's wicked smart, but he's also like a farmer. 00:27:32.880 |
He's like the guy that will follow you around and make sure that stuff gets done and gets done right 00:27:37.780 |
to make sure that you're not checking any crap into his operating system. 00:27:45.240 |
But I think it really paid off because it was a very big paradigm shift for Microsoft developers 00:27:49.820 |
to be subjected to the Dave Cutler digital equipment style of leadership. 00:27:54.660 |
What did you learn from that about successful software teams where there's a large number of people collaborating? 00:28:04.740 |
Because Microsoft had a lot of brilliant engineers back then. 00:28:08.700 |
And like you said, Dave Cutler, they had to create completely new systems, many of which we still use today. 00:28:16.340 |
What have you learned about great software engineering teams from that time? 00:28:28.480 |
If we would have had Git, it would have been immensely easier. 00:28:31.240 |
We were using diff and manual deltas to do the sporting and stuff. 00:28:36.540 |
So being able to fork a branch of source code would be a luxury that is new to me. 00:28:40.840 |
So at the time, it would have been really handy. 00:28:43.720 |
What were some memorable conversations from that time when you walked over next door? 00:28:48.920 |
Well, what I was not present for was somebody was complaining. 00:28:52.880 |
A new hire came into the team and was working on what I believe was called Cairo. 00:28:56.860 |
And Cairo was going to be the next future operating system was going to be beautiful and have a whole new user interface. 00:29:02.440 |
Newer than what is 95 and it never materialized. 00:29:05.320 |
But while they were working on it, one of the guys was working on Cairo was kind of flaming on the open. 00:29:09.580 |
NT dev alias, which is thousands of people, how shitty the NT boot experience was. 00:29:14.920 |
And the response that came back was an epic flame that I wish I would have saved that I won't name the guy who wrote it. 00:29:21.920 |
He knows who he is, but it was a work of art of angry flame male. 00:29:27.240 |
Kind of like the ones you see Linus send every now and then about colonel stuff. 00:29:32.720 |
Were there like kind of intellectual debates? 00:29:35.120 |
Like there's some, some heated stuff between engineers? 00:29:39.740 |
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. 00:29:47.620 |
And it's no longer productive at that point half the time, but there was a fair bit of that. 00:29:52.860 |
Yeah, I've, I've seen those kinds of debates in, uh, like programming language design communities like Guido van Rossum, the leaders of those communities, you can wear them down because people get, you almost like forget the mission you're on and start being very nitpicky about the details. 00:30:12.220 |
I mean, engineering minds get together and you just go to war over the stupidest like syntax subtlety. 00:30:20.440 |
Well, I shouldn't say stupid, but it's a small syntax subtlety for it. 00:30:26.860 |
I'm sure there's internal battles about specific kernel components. 00:30:32.820 |
I mean, there was one that I lost that still bugs me to this day, I think. 00:30:36.100 |
Well, when we were doing the shell, we were porting everything from ANSI to Unicode. 00:30:42.220 |
So every character that was eight bits now becomes 16 bits. 00:30:45.200 |
Now, the problem is I'm on a MIPS box because I'm porting it to RISC. 00:30:49.100 |
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. 00:30:55.520 |
Backslash, you take the one for Windows, take the one for system 32, and you add them together. 00:30:59.400 |
But if you've got an odd number of characters, now you're at an odd address in this thing. 00:31:03.560 |
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. 00:31:11.440 |
It's literally like a hundred to a thousand times the amount of work to read a string out of this ID list on a MIPS machine because it's unaligned. 00:31:19.440 |
So I'm having the argument that even though it's late and the Windows 95, they've already shipped one beta, that we should now just guarantee that ID lists are always an even number of bytes. 00:31:27.280 |
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. 00:31:33.660 |
And it became a shouting match and sort of a personal match, and I lost that one. 00:31:38.420 |
And I still think that I know today that that code running on Windows is thousands of times slower than it has to be. 00:31:51.680 |
How deeply did you have to understand the lowest level? 00:31:56.020 |
So the lowest level of the software and even the hardware with the stuff you were building? 00:32:02.860 |
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? 00:32:11.520 |
Well, about half your day is going to be spent debugging. 00:32:13.880 |
And most of that time is going to be spent in call stacks that are in pure assembly language because there's no source level debugging. 00:32:20.140 |
So it's not like we're in Visual Studio and you hit a breakpoint and it pops up and there's the source code. 00:32:25.220 |
You can go look at the source code, but you're looking at the raw assembly dump from the machine at all times. 00:32:29.200 |
Even if you're programming in C, the debugging is in assembly. 00:32:36.540 |
Better yet, we're doing four instruction sets because we're doing Intel, MIPS, Alpha, and PowerPC. 00:32:43.280 |
So depending on which machine it crashes on, you've got an entirely different instruction set that registers. 00:32:47.200 |
So you get reasonably adept at debugging all four. 00:32:50.320 |
But I had more experience in MIPS, so MIPS stuff would come my way. 00:32:55.900 |
I mean, can you speak to that, the torture there's debugging, especially that kind of debugging, without the tooling associated with it? 00:33:03.160 |
I mean, that's, you know, programming, kids these days, programming isn't all about creating beautiful things, right? 00:33:18.040 |
Yeah, I would say that 20% of my professional life has been creating and 80% has been debugging and fixing. 00:33:24.220 |
And, I mean, I got a better reputation as somebody who could fix stuff, and so stuff like that would flow to me, and so I would spend more time doing that. 00:33:29.420 |
I wasn't renowned as a creative UI genius where I'm flowering all these new ideas, so I got to fix ugly stuff. 00:33:37.160 |
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. 00:33:47.460 |
And, you know, after a day of it, it can get pretty trying. 00:33:57.080 |
There's a psychological component, I think, of perseverance. 00:34:00.180 |
I think the ones that, you know, take you a day, they resolve one of two ways. 00:34:04.280 |
Either it's like, oh, extra semicolon, and then you finally see it, or it's some horrible manifestation of cross-threaded apartment nonsense that was really hard. 00:34:15.280 |
I had a bug, and 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. 00:34:23.760 |
And this looks pretty silly for a Task Manager. 00:34:26.260 |
So I had tried to resolve it for a long time, and I'd talked to the kernel guys about my issue, and they were unsympathetic, let's say, because the kernel guys are a special breed, and they weren't interested in my user land problems. 00:34:39.660 |
And they're probably right, but it wasn't in this case, and I was sure of it. 00:34:43.700 |
And so I kept adding asserts all through the code to make sure that the preparatory steps of adding the stuff together were never more than 100, and that the final sum was never more than 100. 00:34:56.300 |
But occasionally, we would get this bug where people would still see it. 00:35:00.300 |
And so I finally put my phone number in the assert, and I was like, if you see this message, called APL at 425-836, my phone number. 00:35:09.900 |
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. 00:35:16.040 |
We were able to go through, and it was actually a kernel accounting issue, and it wasn't a Task Manager issue. 00:35:20.120 |
So they just fixed it in the kernel once I was able to prove that it was, in fact, the kernel issue. 00:35:23.740 |
And you'd think we would then remove my phone number, but we just commented it out. 00:35:28.140 |
So it's shipped, and it's in all the damn source code leaks for NT that are out there. 00:35:31.580 |
So that's how I find Task Manager code, is I search for my phone number on Google, and it will reverse find the NT source code. 00:35:40.260 |
By the way, I saw, I think you tweeted or you said somewhere, that if you want to take your asserts really seriously, you add your home phone number in there. 00:35:48.900 |
It's a little facetious, because it's probably not the smartest thing, but you will find out. 00:35:52.360 |
But I mean, assert by itself is already a serious thing, because it stops at all execution. 00:35:57.640 |
This is one of the reasons I really, really love asserts, because they stop everything and force you to take care of the problem. 00:36:07.060 |
Yeah, I'm a little religious about my asserts, too. 00:36:09.120 |
I don't assert things that I hope aren't true. 00:36:13.160 |
And I think that's really the intent of an assertion, so I'm overstating the obvious. 00:36:17.180 |
But when it does occur, it's a bug, plain and simple. 00:36:20.900 |
It's kind of fascinating how often it can really help you figure out the problem. 00:36:27.120 |
Because if you put asserts everywhere, you can get very quickly to the source of the problem. 00:36:33.300 |
Yeah, I tend to, it's not something that I want to suggest you go back. 00:36:37.020 |
It's something you should do organically as you build your code. 00:36:40.200 |
So for each function, if you've got assumptions, like I know that this pointer is never null, well, assert that. 00:36:45.580 |
If you know this count is always less than twice the bite width, assert that. 00:36:49.360 |
And don't be afraid, because if it asserts, it's doing you a favor. 00:36:54.080 |
You know, it's like when you turn out of an intersection and you think maybe there's somebody coming and you don't look left. 00:37:01.920 |
People don't assert because they're afraid they're going to fire. 00:37:07.060 |
Obviously, we have to talk about this, the legendary program that you created, the Windows Task Manager. 00:37:17.580 |
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. 00:37:29.820 |
And it gives you the ability to terminate and kill those ones. 00:37:43.740 |
Well, I had the great fortune of working on a lot of things that people are familiar with. 00:37:47.220 |
And Task Manager is one of those side projects that I started as something that I wanted for myself and eventually came in-house. 00:37:57.820 |
And I was using, I think it's 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. 00:38:06.100 |
And I don't call those if I'm working from home. 00:38:08.460 |
And when I brought it in-house, then I was able to call things like NT Query System Information or NT Query Process Information and get the real answers very quickly, which enabled it to become a very fast and responsive app. 00:38:20.340 |
So people have come to rely on it because I wrote it to be as reliable as possible. 00:38:24.780 |
There was a basic set of functionality that I wanted in there. 00:38:27.260 |
And I got everything I wanted, but I wanted it to be really robust and small. 00:38:34.860 |
Okay, can you speak to what it takes to build a piece of software like that that doesn't freeze? 00:38:41.980 |
If you're going to call the shell to run an app, well, that could be a network path that's on a TCP IP share that takes 90 seconds to time out. 00:38:49.440 |
So anytime you do any kind of API call like that that could take time, you're going to wind up doing it on a separate thread. 00:38:55.000 |
And so the app becomes a little bit more complex because everything is multi-threaded. 00:38:58.720 |
Okay, so what programming language were you working in? 00:39:07.240 |
Okay, so what are some interesting details about this program? 00:39:10.540 |
Because you have to get it as simple as possible, but also as robust as possible. 00:39:15.340 |
What are some interesting optimizations, for example, you have to implement? 00:39:19.800 |
There's a couple of things that are a little hardcore now. 00:39:22.900 |
Like, I didn't want to link to the C run times at all. 00:39:24.920 |
So I made sure never to call a run time call, and I didn't link to them. 00:39:28.460 |
And that saved me whatever the C run time is, 96K or something. 00:39:31.820 |
So, you know, it almost doubled the size of the app if you just touched any C call. 00:39:36.860 |
But then I was actually writing in C++, which is C with objects more than anything. 00:39:41.620 |
But in order to get it to work, I had to go through and call all the object instructors 00:39:47.040 |
manually from the dispatch table and stuff because you don't have the run times to do it for you. 00:39:50.600 |
So you're working with a compiler that doesn't have its run time, and I don't want to rat hole 00:39:54.380 |
on the technical issues, but it's a lot of extra work to get it to work. 00:39:57.900 |
But when you do, it's incredibly small and tight. 00:40:04.300 |
What are some interesting aspects of tracking down, like, every process and how much CPU 00:40:10.540 |
One of the cooler things that I saw is, I don't want to say I invented Hamming code, but I kind 00:40:14.920 |
of invented Hamming code without knowing Hamming code existed. 00:40:17.100 |
So every column and every row in Task Manager has a bit on whether it's become dirty or not. 00:40:22.640 |
And then I can look basically the same way Hamming code looks in your X and Y columns to find 00:40:26.580 |
out which rows have changed, go through and find out which ones actually need to be repainted. 00:40:30.940 |
So Task Manager is super efficient and it works in concert with the list view control, which 00:40:35.740 |
provides that functionality to go through and repaint as little as an individual cell that 00:40:45.720 |
And resizing was probably my biggest personal goal with that app. 00:40:50.640 |
So you can size it to any size and it still works. 00:40:53.480 |
And even if you have 32 CPUs, which wasn't possible in the day, it will draw, I think, only eight 00:41:08.300 |
You've gotten the chance to sort of observe the evolution of Task Manager. 00:41:15.600 |
Maybe there's some prettier aspects to it that fit into the whatever version of Windows it's 00:41:24.240 |
The reporting is more because they've added GPU and thermals and things like that, which 00:41:32.720 |
Do you know about, like, was there any refactoring done or is it basically the same code? 00:41:37.260 |
As far as I know, the original code is still mostly all there. 00:41:40.320 |
So there are layers of drawing code and dark mode code and whatever else, XML schema code 00:41:45.860 |
that goes on top of that that makes it four megabytes instead of 87K. 00:41:50.640 |
Yeah, it's one of those pieces of software you create and just stay, well, once it's there, 00:41:57.100 |
And then I'm sure if you remove it, people will just lose their mind. 00:42:01.920 |
Yeah, it might be locked in for a while on that one. 00:42:06.280 |
I thought that would be true for Clippy, but Clippy will make it back one day. 00:42:13.420 |
What are some other pieces of software you created at the time that are legendary? 00:42:18.720 |
So you were part of Space Cadet Pinball, at least porting. 00:42:22.460 |
So they came into my office and said, hey, what are you doing? 00:42:26.040 |
And they said, well, how do you want to spend your next three months? 00:42:30.240 |
And I had, I'd seen Space Cadet Pinball as a game standalone for the Win95 platform. 00:42:35.440 |
And it had a couple of different tables and it was a cool game. 00:42:39.060 |
And what they wanted was some visual splash for NT to show that NT can do for them high 00:42:44.120 |
speed graphics and, or at least responsive graphics. 00:42:47.260 |
And so I took a shot and unfortunately a lot of the code was in assembly and I was on the MIPS. 00:42:53.460 |
So I had to rewrite the code in C so I could then port it to all the different platforms. 00:42:56.860 |
And at the heart of the game is a huge state engine. 00:43:00.800 |
And it's like a giant switch statement with, if I remember, like 50 entries in it. 00:43:06.620 |
And it's got an Easter egg built in and decoding the state. 00:43:10.920 |
It's like running a neural network through this thing as you hit it with different states. 00:43:15.220 |
And I just put it aside and treated it as a black box. 00:43:18.580 |
And so my code runs on top of that and does the drawing and the sound and everything else. 00:43:23.760 |
And somebody recently asked me, uh, why is it slightly different? 00:43:28.480 |
The physics are slightly different from when it was 95 version, but it should be the same 00:43:32.740 |
code because I'm trying very hard to preserve that. 00:43:34.420 |
But what it is, is I had a bug where I will draw as many frames per second as I can, which 00:43:40.520 |
on a modern computer can be 5,000 frames a second for pinball because it's a pretty basic 00:43:44.980 |
And so all your physics are interpolated 5,000 times per second instead of 30 times 00:43:49.680 |
a second or whatever you would have gotten in the old ones. 00:43:51.420 |
You're getting arguably better, at least different physics, but they fixed that since. 00:44:01.220 |
That's all totally the guys at cinematronics, but the original game is a great design. 00:44:04.840 |
It's very similar to black night 2000, which I own as an actual physical pinball machine. 00:44:11.880 |
I don't know if it was inspired by it or not. 00:44:15.460 |
Sometimes I think about like Tetris, about certain games with pretty primitive graphics 00:44:21.120 |
that captivate the excitement of a large number of people. 00:44:26.540 |
And maybe it's the excitement of a large number of people that contributes to the awesomeness 00:44:31.940 |
So when many people together get excited and talk about it, that sort of gets implanted into 00:44:42.400 |
I mean, there's just a generation of people that have gone to war in Minesweeper, right? 00:44:47.240 |
Well, those things were included in the OS, not as games, but as educational tools to get 00:44:53.920 |
So Solitary is there to show you how to do drag and drop. 00:45:00.320 |
I'm not a Minesweeper guy, but so each one of them teaches you something. 00:45:09.620 |
But I don't know how many hours I've spent on these games. 00:45:12.460 |
And like millions of people have spent millions of hours on these games. 00:45:15.640 |
I used to volunteer teaching computer science at my kids' school, you know, for the third 00:45:20.500 |
So it's more like logging in than computer science. 00:45:22.740 |
But the kids, of course, all their dads work at Microsoft, so nobody's impressed by anything 00:45:27.720 |
But so one of the kids found out that I worked on pinball and then they were like, whoa, you 00:45:52.900 |
So they came to me late in the XP ship process. 00:45:58.140 |
But they had intended to take the office activation code and then adapt it to Windows and add activation 00:46:04.400 |
But whoever was responsible for doing it had slipped it enough times that it wasn't going 00:46:09.280 |
And so I had kind of reputation for being able to fix things quickly. 00:46:12.020 |
So they came to me and said, can you get this done in time for XP? 00:46:17.420 |
So with the help of the guys that were doing the DRM stuff on the DRM side and the research 00:46:21.320 |
guys doing the math for the product keys and everything else, we cranked it out in time 00:46:26.040 |
And I don't know what its actual impact is for revenue, but I imagine it's substantial when 00:46:38.560 |
It is, especially if you have the phone activate. 00:46:40.780 |
And that was just the case that we had to carry with us as an albatross around our neck, where 00:46:44.820 |
you've got to pass data up to the clearinghouse, the backend systems that are going to approve 00:46:50.020 |
You've got to tell all your hardware parameters, like how much memory and hard drive space and 00:46:54.300 |
the various things the hardware key is bound to, as well as the product key. 00:46:57.820 |
And you've got encoded in letters and numbers that somebody is willing to read in over a 00:47:02.500 |
And if you think doing product activation is painful over the phone, could you imagine being 00:47:06.580 |
the person that worked on the other end of that line? 00:47:09.100 |
I mean, that's just got to be mind numbing job to listen to product keys for eight hours 00:47:14.020 |
One of the challenges with Windows, and it's been a frustration point for me, but I understand 00:47:19.920 |
from a design perspective, it's very difficult, is so many different kinds of people use Windows. 00:47:26.740 |
But it's been frustrating how over time Windows has more and more leaned into the direction of 00:47:33.160 |
like the, not, not the power user, I should say, just why sort of Linux has always been 00:47:40.980 |
But from an activation perspective or from any kind of configuration, it's been, it's been 00:47:46.480 |
a, it's been a source of a lot of frustration. 00:47:49.400 |
One of my more popular episodes of late has been why you can't move the Windows taskbar. 00:47:53.040 |
I had no idea, but the outrage is palpable amongst people that you put on the left or top 00:48:02.760 |
Well, it's one of the main reasons I really just dislike, there's a lot of aspects about 00:48:06.380 |
Windows 11 I dislike, one of which is like, you can't customize things as much about the 00:48:11.500 |
position of the taskbar, just basic customization. 00:48:15.740 |
Because there's going to be a small contingent of power users that are just going to enjoy 00:48:24.160 |
If you just give them that option, it costs you nothing. 00:48:29.300 |
Because the freedom to put the start menu on the left or the top or the right really 00:48:34.940 |
increases the complexity of the code that renders the start menu and lays out the tabs 00:48:39.680 |
And now it's a much larger surface for bugs and it's a much larger piece of code to maintain. 00:48:44.660 |
So you probably need more developers or another developer or some portion of a developer's time. 00:48:49.160 |
So the question becomes, at what point is it still worth it to satisfy the niche needs of a small set of users? 00:48:57.820 |
And those decisions weren't mine to make, but I can see it from both sides. 00:49:04.540 |
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, 00:49:17.900 |
There's a kind of reputation that builds over time that has a very powerful ripple effect. 00:49:25.180 |
that I think it has so many benefits, including for hiring great software engineers. 00:49:34.320 |
It's like you create this aura of a place that puts love into every detail, 00:49:43.320 |
that really takes care of the power users, that takes care of the developers. 00:49:50.020 |
I think Microsoft is more and more moved in that direction with GitHub and acquiring GitHub 00:49:57.260 |
But on the Windows interface side, come on, some customization. 00:50:03.480 |
You know, with VS Code, you can customize everything. 00:50:09.280 |
Anyway, and the taskbar and really every aspect of the Windows interface. 00:50:19.180 |
Maybe it increases the complexity of the code. 00:50:25.440 |
I bet it was a scheduling decision when they rewrote the start menu. 00:50:27.900 |
I think they rewrote it because it's different than the old taskbar. 00:50:30.500 |
And somebody was tasked with, you've got to deliver this set of functionality. 00:50:34.520 |
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, 00:50:41.520 |
And I'm not saying that's the right decision, but I'm guessing that might be the kind of thing that motivates it. 00:50:47.000 |
And they're on such a different release schedule now. 00:50:49.060 |
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. 00:50:58.160 |
But if it's always churning and the UI is changing every release, it's never going to get that level of polish. 00:51:05.340 |
It is nice, but I just don't think it's a scheduling thing. 00:51:14.920 |
If there's a guy or a girl in there who take ownership of it, who have passion, for them it's a thing that they take pride in over a period of time. 00:51:27.660 |
They can, by themselves, in a short amount of time, create something truly wonderful. 00:51:33.860 |
And, like, I think if you have large software engineering teams with managers and scheduling of meetings and all this kind of stuff, yeah, okay. 00:51:43.880 |
But 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. 00:52:00.540 |
We'll try to integrate it into the whole ecosystem. 00:52:04.320 |
Because, like, to me, it's such a great joy from an individual developer to create something like customization of the start menu of the taskbar. 00:52:15.500 |
Because you know that millions of people are going to use it, the taskbar. 00:52:20.460 |
And then you know that thousands, tens of thousands of developers might be using to customize even little subtle aspects of the taskbar. 00:52:27.560 |
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. 00:52:37.600 |
Well, 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. 00:52:45.120 |
Or maybe there is no right answer and all four answers are equally right. 00:52:57.860 |
But I always thought that Windows creates the contrast. 00:53:01.000 |
Like, the point of Windows is to be the operating system that works on all kinds of devices that is supposed to be much more open. 00:53:09.400 |
And they've moved towards that direction more and more with Windows subsystems for Linux. 00:53:13.900 |
It's just this whole developer-friendly ecosystem. 00:53:18.600 |
The interface should be in the spirit of that, I think. 00:53:21.680 |
But I do think that there could also be security vulnerabilities that are created with that. 00:53:25.760 |
It's not just the complexity of the code, because Windows is just under attack. 00:53:31.900 |
Anyway, taking that tangent, you also developed a zip file support for Windows, creating Visual Zip. 00:53:39.600 |
Like I mentioned, zip folders that eventually evolved into zip folders. 00:53:44.100 |
So that was a piece of software that I wrote at home again. 00:53:46.220 |
And what happened was, I was out with my wife, and I think it was a Sunday afternoon. 00:53:50.920 |
This is 1993, and we're living in our apartment. 00:53:52.980 |
And we're just seeing what the housing market is like out there. 00:53:56.060 |
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. 00:54:02.940 |
And the house is for sale, and it's like 300K, I think. 00:54:05.420 |
And there's no chance I'm coming up with 300K at that point, or even the down payment on that. 00:54:09.580 |
So I took the flyer, and I cut the picture of the house out, and I taped it to my monitor. 00:54:15.480 |
And that was my incentive to just write something at night. 00:54:18.540 |
Because when I came home, I was doing two things. 00:54:20.960 |
I was, one, expressing a creativity that I couldn't get out at work when I was just fixing bugs. 00:54:30.380 |
Before I actually went to the shell team, I started it. 00:54:32.620 |
And that's what led to my interest in going to the shell team based on an MSDN sample, or MSJ at the time, MSJ sample that I saw on how to, like, bring up a folder. 00:54:42.080 |
Well, once I had the very basic bring up a folder template, adding zip file support to it was just incremental all the way. 00:54:52.700 |
And I sold whatever, a couple of hundreds or thousands of copies. 00:54:55.240 |
And one day I'm getting ready for work, and I get a call. 00:54:58.240 |
And it's a lady, and she says, are you Dave Plummer? 00:55:01.520 |
And she said, are you the guy that wrote Visual Zip? 00:55:04.440 |
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. 00:55:15.100 |
And I said, well, no, you've got to talk to travel, and you've got to talk to legal. 00:55:24.520 |
But it was a few minutes of back and forth where we both realized that she didn't know I worked there. 00:55:28.640 |
They just cold called the author and then found out that it was me. 00:55:36.060 |
And it's the kind of thing where if I don't accept the offer, now my choices are I can keep selling my own version and quit Microsoft, or I can stop selling my own version and work for Microsoft. 00:55:46.560 |
I mean, I keep my job, of course, but I'd like to still have this income stream. 00:55:50.260 |
And the other option was accept their offer, which is what I did. 00:55:57.600 |
And you got to continue building it internally. 00:56:01.020 |
So we took a lot of features out, right, to simplify it because it had encryption and it had a number of features that were common in zip programs of the day, but probably weren't appropriate for Windows. 00:56:10.120 |
And at the time, encryption was like ammunition. 00:56:13.620 |
So you couldn't just add encryption willy nilly to various parts of the operating system. 00:56:20.140 |
Multi-volume support, I think, was taken out just to simplify it. 00:56:23.620 |
Can you speak to zip in general, just the history of zip and, you know, compression, that whole thing? 00:56:29.140 |
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 BBSs online and to compress them. 00:56:40.860 |
Executables compressed about half their size. 00:56:44.860 |
But a guy named Phil Kass came up with a command line program for MS-DOS called PK-Zip, which was able to do compression of programs. 00:56:52.260 |
And he has a rather tragic arc, but it became ubiquitous in the entire PC industry and pretty much everybody was using it. 00:57:00.800 |
So when Windows came out, there was no way to open up a zip file, but everybody had been creating them for a decade. 00:57:06.160 |
And so that really drove the desire to have the zip support right into Windows. 00:57:11.180 |
And that's another piece of software is just kind of with us to this day. 00:57:15.680 |
And it could be vastly improved, but, you know, it was written in a single core day, so it doesn't do anything multithreaded. 00:57:23.040 |
Well, it uses one of them to unzip your file. 00:57:26.220 |
What other awesome things were you a part of at Microsoft? 00:57:31.240 |
I worked on the initial prototypes of Windows Media Center. 00:57:38.020 |
And we didn't have, at the time, any sources. 00:57:41.000 |
So we had like a CD of MPEG video files of Raging Rudolph and I think the original South Park video, the Christmas one, which is all wildly inappropriate in the workplace today. 00:57:52.180 |
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-inch dish is, because we couldn't get cable to the building. 00:58:01.040 |
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. 00:58:12.380 |
Tell me the story of the infamous blue screen of death. 00:58:16.240 |
What it is is when Windows has no other option, when the kernel gets into a state where something illegal has happened. 00:58:22.380 |
So let's say a device driver is trying to write to a piece of memory it doesn't own, or is trying to free a piece of memory twice, something that just cannot happen and the kernel has no other option. 00:58:32.140 |
It will shut the machine down to save your work and, well, not save, but prevent further damage. 00:58:37.040 |
And it puts up a blue screen and it prints out the stack information, depending on how your settings are. 00:58:43.340 |
Sometimes it's just a sad face in the current Windows. 00:58:46.380 |
Yeah, I wonder what the first version of Windows where the blue screen came to be. 00:58:51.380 |
So Windows 3 had a blue screen, but it's completely unrelated to the blue screen in Windows NT. 00:58:57.080 |
And I talked to the guy that wrote the blue screen in Windows NT. 00:59:00.840 |
And, uh, the reason he picked white on blue, I had thought I'd always heard it was because in the labs, you could walk through a lab where we have 50 PCs all running stress. 00:59:13.480 |
It was just the MIPS firmware that he was building it on was blue on white and visual slick at it that he was using as an editor was also the same color scheme. 00:59:21.280 |
And so you could code boot crash and reboot all in the same color scheme. 00:59:25.280 |
Why do you think so many problems with computers can be solved by turning it off and turning it on back again? 00:59:33.740 |
I think there's two major things that happen with computers as you run them over time. 00:59:40.340 |
And so it accumulates on the heap or in the swap file or wherever, and things get sluggish. 00:59:44.980 |
And the other is code gets into a state that the developers didn't anticipate or didn't test very well. 00:59:50.400 |
And maybe that's a rare state, but now that notepad or Word or Excel is in that state, your system is goofy. 00:59:55.700 |
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. 01:00:03.660 |
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 kind of just the entire system starts acting a little weird. 01:00:21.660 |
What's some of the best and the worst code you've seen during that time in Microsoft? 01:00:26.480 |
What's some beautiful code and what's some ugly code that pops to memory? 01:00:30.980 |
In terms of beautiful code, there's two that stand out for me. 01:00:36.260 |
When you get down into the Windows kernel in the actual NT APIs and stuff, it's very well written. 01:00:41.340 |
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. 01:00:47.620 |
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. 01:00:55.940 |
So Windows 95 had a big shared segment amongst all the shell processes where it would store stuff that was common to all the shells. 01:01:03.760 |
Shared memory is a bad idea on NT and an industrial level. 01:01:06.820 |
So he came up with a way to do it with named pipes. 01:01:11.700 |
And it was very impressive to walk through the code. 01:01:15.620 |
It was one of those things that was like, oh, I don't think I could have done that if I was trying. 01:01:18.740 |
Who's the greatest programmer you've ever encountered? 01:01:25.680 |
But I'll tell you one story that impressed me a lot was when I was brand new at the company. 01:01:30.320 |
And I'm working on this Olay presentation cache that I mentioned earlier. 01:01:39.240 |
And something's going wrong in the scheduler. 01:01:41.340 |
And I've been there, you know, I've barely written any x86 code. 01:01:44.500 |
And I'm looking at the Windows scheduler trying to figure out why my thing is deadlocked. 01:01:51.100 |
And I send an email to the Windows 95 kernel team and say, could you send somebody by? 01:01:55.900 |
And so about 10 minutes later, this developer strolls in. 01:01:58.480 |
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. 01:02:06.280 |
And they're using WinDebug, which is just a horrible debugger. 01:02:13.460 |
And they are just blasting through the call stacks. 01:02:15.720 |
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. 01:02:23.360 |
And it's just this quick silver ballet of call stacks flying by. 01:02:27.700 |
And I'm pretty blown away because I'm a good programmer. 01:02:36.200 |
And about five minutes in, I just hear, oh, I see. 01:02:40.140 |
And then they disconnected and got up and left. 01:02:43.000 |
And that was Laura Butler, who became a distinguished engineer at Microsoft. 01:02:48.500 |
But so she kind of 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. 01:03:01.420 |
There's a few things I love in life more than people who are ultra competent at anything really. 01:03:06.760 |
But the lower level, the better in the engineering space. 01:03:10.040 |
They're able to, for example, like run or maintain the infrastructure, the computer infrastructure. 01:03:15.460 |
So not the individual computer, but the computers communicating together and working together. 01:03:31.780 |
It's beautiful to see that humans are able to accomplish that. 01:03:33.860 |
Even 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. 01:03:41.080 |
And now millions of people use it every single day. 01:03:44.060 |
With software, sometimes you don't get to see visually just the number of people impacted by a thing. 01:03:50.240 |
So imagine how many people are impacted by Linux and all the different open source systems that make up Linux. 01:04:01.100 |
And task manager is an example of a piece of software. 01:04:03.880 |
Just how many people use that over the years and how many times? 01:04:19.320 |
What I love about it though, and I'm sure you've had this experience where sometimes you design a piece of software and it's complex and you get it working in your head and you get the plumbing working and you know how it's going to run and flow. 01:04:28.320 |
And then eventually you write the code and the code does that thing that you had pictured in your head. 01:04:33.000 |
And now there are billions of copies of that thing that I had in my head running on millions of people or billions of people's machines. 01:04:41.900 |
It's not a vanity thing so much as I'm impressed by it, I guess. 01:04:46.680 |
How's your programming evolved over the years? 01:04:49.340 |
I take a lot more care and complexity these days. 01:04:53.920 |
So it used to be you would write code and just keep writing code and writing code. 01:04:57.340 |
And then at some point I go back and clean it up. 01:05:00.480 |
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. 01:05:15.620 |
And so sometimes the work you put in up front pays off, you know. 01:05:18.400 |
What programming languages have you used over the years? 01:05:24.900 |
And still to this day, C++ is really what you lean on? 01:05:27.940 |
Yeah, right now I'm 100% Lua and Python, but that's just a side project I'm working on. 01:05:32.820 |
Can you speak to the Lua and the Python detour that you took and what do you love about C++? 01:05:39.380 |
What I'm doing is I wanted to build an AI to play the game Tempest. 01:05:45.500 |
And this is a game that I actually hold the world record on. 01:06:06.940 |
It's not like trying to, you know, do Pong or something. 01:06:09.780 |
And what I wound up doing was first taking the ROMs out of the machine and reverse engineering the code. 01:06:15.520 |
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. 01:06:28.420 |
Yeah, that's me playing the game right there. 01:06:38.580 |
It's basically 3D space invaders wrapped into a shape. 01:06:43.480 |
And the enemies descend from the center of the tube towards the outside. 01:06:50.400 |
So long story short, it's a fairly complicated game to play well. 01:06:53.600 |
And I wanted to see if I could get an AI to do it. 01:06:56.400 |
And so once I had figured out where all the interesting parts of the game lived in memory, 01:07:00.540 |
I added them as parameters and built a Lua app to extract everything from the game's memory 01:07:05.780 |
And put them together as parameters, which sends it to the Python side over a socket. 01:07:12.380 |
I'm using a dueling deep Q and I believe with two head and tail. 01:07:19.180 |
And it can play up to about level 36 now, which is way better than most humans. 01:07:30.000 |
You're controlling the red thing that's shooting? 01:07:33.600 |
You can just move clockwise or counterclockwise and then you can shoot. 01:07:38.100 |
So you have a rotating knob, which is an optical spinner. 01:07:40.720 |
And you have a fire button and a super zapper for emergencies. 01:07:49.500 |
Why have you stayed with it for all these years? 01:07:51.600 |
Because it allows me to encapsulate my favorite C code in classes. 01:08:01.280 |
I write really modern C++ 20 using no pointers, no string, or no character strings. 01:08:08.640 |
So, you know, it's basically as safe as Rust as far as I'm concerned. 01:08:12.480 |
Or I write C with classes, which is standard C, but, you know, with polymorphism and encapsulation. 01:08:22.580 |
Let me ask you about the whole stretch of time that we kind of skipped over. 01:08:26.040 |
You built a lot of software over the years after Microsoft, on the side while at Microsoft, 01:08:30.720 |
and afterwards, a lot of successful pieces of software. 01:08:35.660 |
one of your companies was software online, and it got into trouble for nagging users too much, I guess, to upgrade. 01:08:45.580 |
What was all that about, and what did you learn from that experience? 01:08:49.760 |
Now, that was, other than, like, family health scares, you know, when kids are sick, that was the scariest time of my life. 01:08:54.460 |
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, 01:09:00.740 |
I had written all these shareware utilities, and I was selling them on the side, and sold one to Microsoft, as we talked about. 01:09:07.980 |
And then I discovered banner advertising online. 01:09:10.740 |
And so I signed up with my credit card for a site, I think it was called FastClick, and you could say, I will pay this much for a banner ad impression. 01:09:21.520 |
I came back on Monday, and I saw I had spent, like, $10,000 in banner ads. 01:09:25.820 |
And I was like, holy crap, how am I going to explain this to my wife? 01:09:28.940 |
This is a bug, it's a mistake, it was my fault. 01:09:30.940 |
And I looked at the sales, and it had made, like, $38,000 worth of sales. 01:09:37.380 |
So all I have to do is scale that at some point, and basically did that for the next several years. 01:09:43.420 |
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. 01:09:57.040 |
It's like, I know these 10 things are absolutely not true. 01:10:00.600 |
And then, oh, they carried the two things that might be true. 01:10:03.060 |
And the two things that might be true were that it was a 30-day trial version. 01:10:07.140 |
And after your 30 days were up, it would then, if you continued to run it and not buy it or uninstall it, it would remind you once a day. 01:10:12.720 |
Not, like, every 10 minutes, but once a day, or every time you booted your computer, at most, once a day. 01:10:16.820 |
And the AG contended that that was too often. 01:10:21.240 |
And so we agreed with them to limit it to once a week, I believe. 01:10:25.260 |
And, you know, there had to be a button to just uninstall with one click. 01:10:30.600 |
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. 01:10:38.760 |
So in the year 2001, which were 2001, 2003 that we're talking about, if you bought software, there was an expectation that a disk would show up. 01:10:46.620 |
And so we made that the default was to fulfill by disk. 01:10:51.600 |
And it was very obvious, but it was a checkbox and it was turned on to ship the disk to your house. 01:10:56.480 |
Because we found if we didn't do that, we got all these calls, people would wait, we'd order two weeks later, call, where's my disk? 01:11:06.480 |
And so we got a lot of returns and we didn't include the disk. 01:11:10.060 |
But that is a priori violation of negative affirmation billing in Washington State, because you're giving them a default higher purchase price. 01:11:18.800 |
What about on the software user relationship? 01:11:26.040 |
It's interesting, like, how often to annoy the user with the thing, right? 01:11:33.420 |
If you never mention anything, they might never discover, like, something they actually want. 01:11:40.900 |
But if you mention it too much, then they can get annoyed. 01:11:46.400 |
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. 01:11:50.940 |
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. 01:12:02.960 |
Like, for example, I really don't like to use my Microsoft account to log into Windows, right? 01:12:15.260 |
But, like, they make it so difficult to not do that. 01:12:19.880 |
It's almost like they think they could just trick me into – it really does feel like I'm getting tricked into not doing what I want to do. 01:12:32.760 |
Like, I have to, like, think, okay, I need to click skip, and then it'll do something. 01:12:39.580 |
Like, I have to, like, use too much of my brain to do the thing I – like, you know, as an interface, you know what I'm trying to do. 01:12:47.080 |
You're trying to trick me into not doing the thing I want to do. 01:12:51.460 |
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. 01:13:06.820 |
Yeah, the one that really throws me is the use recommended settings. 01:13:11.240 |
I went through the steps, and I'm going through this new dialog or wizard. 01:13:14.260 |
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. 01:13:20.800 |
So, yeah, recommended by them, but not recommended for me, and that's the difficulty. 01:13:26.320 |
Like, what effect do you think that does in resetting the default browser to Edge? 01:13:32.320 |
Do you think you're going to really earn the loyalty of a user if you do that? 01:13:39.180 |
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? 01:13:48.300 |
So, on the metrics, it might actually look like you've increased the number of Edge users, but really, it's that reputation hit you take over time where it just forms where the Edge is the thing that you can't quite trust. 01:14:01.020 |
Unfairly, because I think Edge is a really great browser, but just this unpleasant feeling. 01:14:09.440 |
Well, you don't want your operating system to be an adversary, right? 01:14:15.420 |
Like, it doesn't have your best interests at heart. 01:14:19.980 |
I mean, we have this feeling, I think, where we just have general distrust when somebody is super nice to you and is basically selling something. 01:14:27.360 |
There's a certain aura about that kind of interaction. 01:14:30.720 |
And when an operating system is interacting with you in that way, it's like… 01:14:36.360 |
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. 01:14:47.160 |
Did you learn about finding the right balance from that? 01:14:52.760 |
There's things I would do much differently, particularly in terms of the advertising. 01:14:56.040 |
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. 01:15:06.840 |
So it was click-baity and then informational. 01:15:11.760 |
But there's three ways to sell something, I think. 01:15:16.320 |
And sex doesn't work really well for software. 01:15:18.240 |
Fear works well for antivirus and stuff, but not so much for optimization and make your computer faster, utilities. 01:15:24.300 |
And so I always tried to cater to the greed aspect, you know, make your computer faster, get more RAM available, whatever the value proposition is. 01:15:32.460 |
But I realize now that I'm looking at that with my knowledge. 01:15:36.720 |
And as an autistic person, I now have an appreciation that other people are going to look at it with their background knowledge and may conclude something different. 01:15:42.940 |
So I might be scaring people where I was just trying to incentivize or get their greed instinct going. 01:15:47.400 |
So I'd be more sensitive about that kind of thing today. 01:15:49.740 |
Ridiculous question, but what do you think is the top three Windows operating systems, the different versions? 01:16:06.560 |
We set up multiple salons, all VPN to one another and using the SQL server. 01:16:10.860 |
I don't know if I've ever gotten to experience Windows 2000 server. 01:16:23.540 |
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. 01:16:29.300 |
But then XP was, I would say, from a completeness perspective and impact and how long it lasted, and it was probably the greatest Windows for consumers, the operating system. 01:16:47.420 |
I mean, I'd still run it on stuff if you could get security updates because it does 98% of what I need Windows to do. 01:16:53.100 |
I mean, so Windows 95, I'll probably put Windows XP as the number one for me, and then Windows 95 too. 01:17:04.540 |
Industry impact, stability, just that there's certain, like, just like with programming, you have code smell. 01:17:11.600 |
Just like how well all the features were orchestrated together, how there's a design philosophy that permeated the whole thing and was consistent, not too many features, not dumbed down too much. 01:17:27.540 |
But not overcomplicated, how often it crashes the blue screen, all of those things. 01:17:33.120 |
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. 01:17:39.820 |
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? 01:17:52.280 |
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. 01:18:02.980 |
But what happens is internally, there's basically a black box mechanism that does nothing more than generate the next random number and what the outcome is in terms of probability and payout. 01:18:13.580 |
And then the game says, I got to make up a movie to go along with that, and maybe it's three bars or whatever it is, but there's no correlation. 01:18:19.640 |
It's not spinning the reels, seeing where they land, and looking that up to see what you won. 01:18:25.200 |
It determines whether or not or if you won, and then make something up to fit that scenario. 01:18:36.320 |
I tried to get down and get inside access to one, and it was very hard. 01:18:40.880 |
They don't want to tell you a lot about them. 01:18:42.720 |
I'm sure it's not that deep of a secret, but. 01:18:45.840 |
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. 01:18:56.240 |
Well, in the 70s or 80s, there was a tech in Vegas went around, and he was burning his own ROMs for the slot machines with the back door in them. 01:19:03.820 |
And so when he serviced the machine, he would just put his ROM in, and he'd come back six months later and invoke the back door. 01:19:10.920 |
Anyway, do you have other favorite kinds of systems like that? 01:19:16.200 |
I restore cars, so I do a lot of 1960s muscle cars, cars and trucks. 01:19:25.220 |
It's been my fascination and my special interest for the last six months or so, and I've built a number of those. 01:19:30.080 |
Yeah, I've seen you posting videos about it, the PDP-1183. 01:19:40.080 |
So basically what it is is I had built a number of PDP-11s, and so over the years, I'd acquired all these parts, 01:19:47.700 |
and I decided, well, let me build the best PDP-11 that I can, and so it was kind of a quest to, just like you'd try to max out a PC, I tried to max out a PDP-11. 01:19:56.900 |
So it's got four megabytes of memory, which would be massive in the day, and, you know, that's it there. 01:20:00.600 |
And it's got lots of blinking lights, and I had to rewrite the BSD kernel to make the lights work, and... 01:20:08.700 |
So the very top is a PDP-1170 control panel, which we can largely ignore, and then there's two chassis below that. 01:20:18.060 |
The knobs control what view you get of the LEDs. 01:20:22.520 |
So normally you see the data bus, and you can see the address bus, and you can pause the machine, and you can edit the address on the bus, 01:20:29.200 |
and you can deposit stuff into memory with the switches. 01:20:34.960 |
That's what you, like, imagine a computer to be. 01:20:46.580 |
It's a dual floppy drive with one stepper motor. 01:20:48.660 |
So both heads stick together like Siamese twins. 01:20:52.160 |
Okay, so what kind of stuff are you doing with this? 01:21:03.840 |
And I had to rebuild the kernel and all that, so I had to learn the BSD kernel. 01:21:08.380 |
Because you can't just add a device driver, right? 01:21:12.380 |
You've got to rebuild the kernel to add support for whatever device. 01:21:14.900 |
So you add a new disk controller, it's time to build the kernel. 01:21:17.960 |
So you've got to go find the source and find the code. 01:21:25.260 |
Being autistic yourself, I was wondering if you could tell me about, like, 01:21:28.560 |
fundamental differences about the mind of a person with autism versus, let's say, a neurotypical individual. 01:21:34.120 |
Well, the fundamental theory of thought for autism is called monotropism. 01:21:37.980 |
And basically what that means is that my brain does one thing, it does it very intensely, and then when it's done, I can move on and do something else. 01:21:48.680 |
Autism usually brings with it sensory sensitivities and repetitive behaviors, behavioral issues that compound it. 01:21:58.540 |
And if they rise to the level where an individual can't moderate or accommodate them in their life, it becomes a disorder. 01:22:03.960 |
And that's probably 1% to 2% of the population. 01:22:08.160 |
What's the biggest benefit of life with autism? 01:22:10.580 |
I can bring to bear an incredible amount of focus and dedication on a particular task. 01:22:19.820 |
It has to be something I can make progress on. 01:22:21.440 |
And there has to be all these things that are true about it. 01:22:24.160 |
And it could be like a kid playing with trains. 01:22:27.560 |
That said, you also said that you struggle with ADHD. 01:22:33.580 |
So that's part of the component, like maintaining the focus. 01:22:37.980 |
Or actually acquiring the focus is the issue. 01:22:43.100 |
I fall asleep with noise-canceling headphones where I can't fall asleep, that kind of thing. 01:22:46.700 |
But once I get locked in, I'm very hard to distract. 01:22:54.500 |
Okay, what's the biggest challenge of life with an autistic mind? 01:22:57.480 |
That I don't know what anybody else is thinking. 01:22:59.760 |
So I know what I would think about this interaction if I was in your position and I was you. 01:23:06.660 |
But I think most neurotypical people have a sense of, well, Lex probably feels this way or that way 01:23:10.680 |
because he's acting this way and his reactions are this and his facial expressions say this. 01:23:15.640 |
So I run a little proxy NPC game for everybody I deal with. 01:23:19.480 |
So I guess that makes social interaction a little bit complicated. 01:23:23.200 |
Telephone is especially hard because I rely on a lot of other cues. 01:23:26.480 |
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. 01:23:34.300 |
And so I'm much better on FaceTime where if somebody makes a joke, they might smile after. 01:23:38.680 |
Where on the phone, I don't know if you're being sarcastic or serious and that kind of thing. 01:23:42.100 |
So that's probably gotten you into trouble over the years a bit. 01:23:45.820 |
Yeah, there's lots of times with my wife too where, well, there's a certain literalism that comes with autism. 01:23:51.760 |
And we spent years where she would say something and I'd say, but that doesn't make sense. 01:24:00.240 |
I literally only know what you said and I don't have that. 01:24:03.420 |
And I remember we've been in meetings with people and, you know, there's three or four people in the meeting and I'm the only autistic person. 01:24:11.160 |
I'll tell that they've got this communication loop going on. 01:24:13.600 |
And I feel like, you guys got to tell me what's going on because I really don't know what's being said here. 01:24:18.960 |
You told me related to this that there was an early, somewhat awkward encounter with Bill Gates. 01:24:24.580 |
Can you share the story of that interaction and how autism comes into play here? 01:24:31.900 |
Yeah, my very first summer at Microsoft when I got the internship, Bill had all the interns over. 01:24:37.320 |
I guess it was 20 or maybe 25 of us that got hired that year over to his house for burgers and beers and just chatting in the backyard. 01:24:44.540 |
And of course, it's still Bill Gates and he's a big enough deal even then that you're a little nervous. 01:24:49.760 |
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. 01:24:59.620 |
And in the space of four months, he's done this feature and just copying smart driving, listed off all the stuff I was doing. 01:25:04.680 |
But I stopped because I'm like, well, actually, it was three months. 01:25:08.460 |
I had to interrupt them and they both kind of, what? 01:25:11.560 |
And they looked at each other and I realized that was the wrong time to correct the guy. 01:25:24.060 |
And then, of course, the impact that might have on a casual social interaction, it's not trivial for you to be aware of that. 01:25:40.860 |
And I didn't know how injecting a correction meaninglessly into a conversation could impact and make the other person feel. 01:25:48.460 |
What advice would you have for folks who have an autistic mind on how to flourish in this world? 01:25:55.380 |
In terms of prosperity and finances, the biggest thing I can say is sell what you can do and not yourself. 01:26:02.460 |
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. 01:26:08.560 |
But if you can 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. 01:26:19.260 |
So whether you're playing the piano or writing code. 01:26:21.360 |
That said, so much of software engineering on large teams has a social component to it, right? 01:26:31.580 |
How do you, I mean, what have you learned about how to solve that little puzzle? 01:26:35.980 |
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. 01:26:45.640 |
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. 01:26:57.240 |
Some people want to be in the important meetings and make decisions. 01:27:02.680 |
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. 01:27:10.460 |
So you could, I guess, make things more explicit and just communicate better about like ask them about what their interests are. 01:27:18.480 |
And that's something I started doing is overtly asking because it's hard for me to nudge somebody there. 01:27:26.720 |
So, yeah, part of the social dance is there's a lot of stuff that's unsaid. 01:27:31.200 |
You can kind of figure out, you can read people. 01:27:35.140 |
But if that's, you know, with autism, it might be a little bit difficult to do that. 01:27:41.260 |
And so you have to make things more explicit. 01:27:43.240 |
Plus like sarcasm and satire and humor might be difficult. 01:27:50.240 |
Some of your earlier interactions with Microsoft. 01:27:52.220 |
I mean, some of the greatest engineers have a mind like this. 01:27:57.300 |
I've had laptops thrown at me and stuff, and I'm sure it was my own fault. 01:28:05.900 |
Now, of course, anything that has two answers has a high error rate. 01:28:08.920 |
But so what's more important to society as a whole from the people? 01:28:14.200 |
And if you had to pick one, which is the most important? 01:28:16.900 |
And most neurotypical people will generally lean towards cooperation, whereas people on the 01:28:22.220 |
spectrum tend to lean towards creativity as individual problem solvers. 01:28:26.080 |
Of course, there's some kind of error rate there. 01:28:28.100 |
So if you want to double your precision, you can use the second test, which is you ask, 01:28:31.780 |
there's a room with 10 chairs, and six people come in and sit down in those chairs. 01:28:38.500 |
Now, some people are going to say four, but I'm going to say 10, because that's how many 01:28:46.020 |
I'm not trying to be complicated, but that is how my mind works. 01:28:48.880 |
And so when I see that question, it's like, it turns out how you answer it. 01:29:00.180 |
I remember as a kid, my grandfather was building a planter holder in the kitchen for my mom. 01:29:04.740 |
And he was using these big angle brackets that I thought were a little overkill. 01:29:08.080 |
And I said, do you think that'll be big enough to hold the plant? 01:29:10.380 |
And he says, it'll be big enough to hold a horse. 01:29:11.820 |
And I was only five, but I was very confused about A, why you would bring a horse into your 01:29:16.820 |
kitchen, why you would put a horse up on a planter, and all of these things that didn't 01:29:22.100 |
But for a lot of my life, I took figures of speech as literal. 01:29:25.260 |
You mentioned emotional post-processing as a strategy you use to replace social interactions 01:29:32.840 |
so you can sort of reverse engineer to help you understand the neurotypical world. 01:29:37.640 |
I think this is going to be useful to a lot of people. 01:29:43.080 |
So if I meet somebody, particularly somebody new, and it's my first couple of interactions 01:29:46.220 |
with them, even meeting you today, then I will go home later and replay all of the moments 01:29:54.560 |
And I'm probably the most uncomfortable ones first to find out what did I do wrong in that moment? 01:30:03.020 |
How can I improve that kind of situation next time? 01:30:05.320 |
And do I need to go fix it or make a phone call? 01:30:07.200 |
That kind of thing in a bad, you know, in an extreme case. 01:30:09.440 |
But, uh, and that's happened a couple of times in my life. 01:30:13.220 |
Like I had a car restored that my dad had bought new in 69. 01:30:17.320 |
So we've had a 50 years and about 20 years ago, I had it restored and it was like a three 01:30:22.000 |
year process of craftsmen working on this car for thousands of hours. 01:30:25.040 |
And I go out to pick it up and I'm inspecting the car and I'm very impressed with the work. 01:30:30.000 |
And I'm saying, oh, this is nice and this is great and everything else. 01:30:32.440 |
And then I fly home and write the check and the car gets delivered. 01:30:36.100 |
And then I realized probably 10 years later that I had a whole bunch of craftsmen that had 01:30:41.740 |
worked on my car for three years and I probably should have blown some smoke up their butts, 01:30:46.380 |
But I never did that because it's not what I wanted or needed in that moment. 01:30:51.200 |
So I sent an email to the manager or to the owner of the place. 01:30:54.920 |
And I said, I didn't know if you remember this, but 10 years ago, I picked up my car and I 01:30:58.340 |
probably looked unimpressed, but I want you to know that I was very impressed with everything 01:31:02.660 |
And he wrote back, he's like, I've thought of that moment often. 01:31:08.840 |
There's subtle things about human interaction that mean a lot to people. 01:31:12.560 |
And if you ask them straight up, they might not be able to sort of articulate that, but it means a lot. 01:31:18.400 |
And when it's off, when something is off, it bothers them. 01:31:21.860 |
But to reverse engineer that, to figure that out for a person who might not sense those little subtleties of human interaction is tough. 01:31:32.120 |
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. 01:31:44.240 |
But I think the problem is a communication one, and it works in both directions. 01:31:48.160 |
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. 01:31:55.340 |
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. 01:32:00.580 |
But until then, I'm going to assume you're going to handle it just like I would in your position, in my case, with what I know now. 01:32:06.280 |
What advice would you give to people, like on the other side, how they can help you be a better friend or better partner, better colleague? 01:32:15.080 |
Like how they should communicate with you to help, like give more information? 01:32:19.740 |
And don't assume I'm going to pick up on clues and nuance and subtlety. 01:32:24.220 |
So if you're trying to nudge me into particular behavior, you're much better off to say, Dave, this is what you need to do. 01:32:33.820 |
What, what, what score would you give me at one to 10? 01:32:49.560 |
It's a significant experience for many on the spectrum. 01:32:54.800 |
And tell me about any of the experiences you've had with masking. 01:33:00.000 |
So masking is, and it's probably not the right way to describe it, but it's the act of acting normal. 01:33:04.320 |
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 new or typical are going to receive and accept it the right way. 01:33:17.680 |
And everything you do in a social interaction, from waving my hands, to taking facial expressions, to tone of voice, to posture, it's a huge contrivance and it's work. 01:33:37.020 |
But for somebody on the spectrum, you've got to fake it all. 01:33:46.500 |
Uh, limelight and it's written by Neil Peart. 01:33:48.900 |
And I, I only speculated what people have passed on. 01:33:50.980 |
So I've got a sense he was probably on the spectrum. 01:33:52.840 |
Um, 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. 01:34:01.620 |
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. 01:34:08.300 |
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. 01:34:13.900 |
You described meltdowns as an overwhelming experience. 01:34:21.380 |
Generally it is, it's when you're emotionally overwhelmed to the point that you can't manage your behavior anymore. 01:34:28.080 |
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. 01:34:34.080 |
Or I've seen it on, they did kind of a, well, actually probably the best portrayal I've seen in media is, uh, what's the TV show where the doctor is autistic. 01:34:42.600 |
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. 01:34:51.480 |
And he's always wanted to be a surgeon and he has a complete meltdown and it's a pretty good portrayal on television. 01:34:57.640 |
Like there's a, like a threshold you cross that it's just like, yeah, switch flips. 01:35:01.340 |
It's like blue screen essentially for the brain algorithm. 01:35:06.720 |
So switch flips, you go kind of a primitive brain, your frontal cortex shuts down to an extent, I think. 01:35:11.420 |
So you don't have the benefit of decision-making and filtering your very reptilian brain in that state. 01:35:20.160 |
And so it's a panic and a fight or flight response to not being able to tolerate the current reality. 01:35:26.220 |
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. 01:35:32.860 |
It's added up to the point that something has now triggered you and your brain loses its ability to adequately moderate your behavior. 01:35:44.800 |
And, you know, there's a show of love on the spectrum. 01:35:48.780 |
Because certain aspects like literal interpretation of things, it just makes the complexity of relationships, of romantic relationships, even more explicit in that context. 01:36:01.800 |
You know, I've been married 31 years and together for 37. 01:36:06.720 |
And I think our first indication that we knew we were very different was we were sitting in the car one night in front of the house at dark. 01:36:13.840 |
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. 01:36:22.040 |
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, I wonder if they're hollow or they backfill. 01:36:29.600 |
And my now wife looks at me and she's like, what's wrong with you? 01:36:33.980 |
Why do you have a place in your head that cares about that? 01:36:37.060 |
And we 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? 01:36:58.660 |
And so I, and my son is the same way because they all don't fall very far from three. 01:37:03.120 |
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. 01:37:09.700 |
I mean, I had to be around a long time and kind of grow on people because I had no game because I had no ability to do the social dances that that whole thing requires. 01:37:17.260 |
So my only option is to just be myself and that works for some people. 01:37:21.500 |
Were you able to say like, like, I love you, that kind of stuff? 01:37:26.580 |
Uh, I mean, her family was way more open with that kind of thing than mine was. 01:37:30.040 |
And so it was a growing period for me, but yeah, that's not a problem I have. 01:37:35.080 |
But, but it seems like unimportant, uh, like, what is that actually accomplishing? 01:37:39.520 |
Well, now we do a lot of affirmation and checking. 01:37:44.240 |
Like in the last couple of years, we do a thing where she'll just be like, you good? 01:37:52.020 |
Cause if I'm like, yeah, she knows something's up. 01:37:55.540 |
And so there's always this pinging back and forth cause there's not the ability to read people just from looking at them to know what's going on. 01:38:01.180 |
So we have this explicit check mechanism, I think, where we've developed that. 01:38:07.940 |
And yeah, again, that's subtlety of human communication. 01:38:13.100 |
Uh, you've, uh, written about the experience, uh, that people have of feeling quote, a little bit autistic. 01:38:25.580 |
I think a lot of people, maybe 10 to 20% of the population is somewhere on the autism spectrum, but isn't impacted by enough that it rises to the level of disorder, but they still have many of the characteristics. 01:38:36.840 |
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. 01:38:48.100 |
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. 01:38:58.380 |
So I thought I'd write a little manual for them basically. 01:39:02.080 |
Why do you think so many programmers like excellent, like great programmers and great engineers are on the spectrum? 01:39:08.320 |
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. 01:39:16.000 |
That's been a obsession for me my whole life. 01:39:18.840 |
I got to take my mom's oven apart cause I got to know how the flip clock works. 01:39:21.800 |
Um, and I think that's a good habit to have if you're going to be a programmer. 01:39:26.800 |
And being willing, being excited to get into the details. 01:39:30.700 |
Uh, what's a cool thing you, uh, hope to program to build this year? 01:39:35.120 |
So we've got, we've got the RL learning how to play Tempest. 01:39:40.760 |
How, like where, what's the ETA on success and dominance? 01:39:48.940 |
Um, I, I think now it's tweaking the model size and the layers and stuff like that to get it to learn past the one threshold. 01:39:54.580 |
But you know, it's a couple thousand lines of Lua and it's a couple thousand lines of Python and they all interact and they all work. 01:40:01.480 |
Now it's tuning hyper parameters, hyper parameters and hoping for the best. 01:40:04.540 |
So it's already a success in a sense, but like now you're seeing like, how far can this go? 01:40:13.780 |
But lots of games now are, you know, they play them better than humans, but maybe not games as complex. 01:40:18.760 |
Uh, what other cool things are you working on? 01:40:23.600 |
I'm trying to get at what's called an RA 82 drive. 01:40:25.940 |
It's the big 14 inch monster that spins at 3,600 RPM and sounds like a washing machine. 01:40:30.360 |
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. 01:40:35.540 |
Uh, what kind of code are you trying to run on it? 01:40:37.440 |
I'm going to have to get the driver stack to work. 01:40:39.500 |
So I have to incorporate the driver for it into the kernel. 01:40:42.980 |
You built a machine recently with one terabytes of RAM. 01:40:54.460 |
If you just search for GitHub primes, you'll find it. 01:40:56.440 |
And it is a single set of prime number algorithms implemented in about a hundred different languages. 01:41:02.860 |
So it's the exact same algorithm and we require that you follow certain rules to make it fair. 01:41:07.340 |
And then you express that algorithm in whatever language you choose to the best of your ability. 01:41:12.200 |
And we run a benchmark every night and we compile the results and find out which languages are fastest. 01:41:31.380 |
So you're comparing the performance of the different programming languages. 01:41:34.780 |
So they all get built into an individual Docker container and then they all run. 01:41:41.380 |
It's really measuring the performance of the different languages. 01:41:43.780 |
So what, what have you learned about which languages, like who, which language usually wins? 01:41:53.800 |
People will make an improvement to the C++ and it'll pass for a while. 01:41:56.560 |
And then the Zig guys will get angry and come back and make it faster. 01:42:04.840 |
What's the piece of code that they're trying to run to measure the performance? 01:42:09.980 |
So what they're doing is they're solving the primes up to 100 million as many times per second as they can in a five second loop. 01:42:25.800 |
No, so you can do anything you want, but it has to be a prime sieve. 01:42:28.800 |
You're allowed to use one bit per integer at most. 01:42:31.380 |
So you can't use a byte, which is cheaper and easier. 01:42:33.240 |
Um, there are a number of rules like that, that you have to allocate the memory within your time loop. 01:42:38.100 |
And so we have a set of rules and we have, uh, some solutions that don't follow the rules, like the 6502, because you've only got 64 K. 01:42:46.620 |
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. 01:42:53.100 |
And so it really should just be the, how the algorithm is expressed in that language. 01:42:57.180 |
And many of them use the same backend compiler. 01:42:59.820 |
So it really is how you're expressing it and the limitations or the benefits of that language. 01:43:04.020 |
Are there a lot to be multiple submissions per language? 01:43:07.480 |
So if you look in the C, there's like five, I think. 01:43:10.600 |
And they, some of them might use different compilers or no. 01:43:16.840 |
I'm looking at a snapshot here from a couple of years ago. 01:43:19.060 |
Zig was at the top, then Rust, then Nim, Haskell. 01:43:22.920 |
Oh no, this is not, this is not ordered by a slowness or is it? 01:43:38.040 |
There's a version in PowerShell and stuff like that. 01:43:40.620 |
So, so this is automated, like in terms of organization of like how the submissions are done. 01:43:47.200 |
There's two guys over in, uh, Europe, uh, Rucker and Tudor basically own this. 01:43:53.840 |
I did Python, C sharp, and C plus plus, and I checked them in and I published the episode 01:43:58.380 |
and then people started throwing more solutions in there and it just got out of hand. 01:44:05.540 |
What's the happiest moment for you when you're programming and building a thing? 01:44:10.060 |
I think the, the most fun for me is when I build something complex and I thought through 01:44:14.780 |
how it should work and then I run it and it does work that way. 01:44:20.820 |
So seeing the results come out the way that I plan them and have it work, because it rarely 01:44:28.660 |
Or especially if it does work the first time. 01:44:35.480 |
Uh, but you know, with compiled languages, like, um, or C plus plus, that's always a 01:44:40.780 |
You write a bunch of code, you compile it all, compiles without warnings, without errors. 01:44:46.300 |
Um, what do you think is the future of programming? 01:44:50.260 |
So now I don't know how much you've got to really experience the impact of, um, LLMs with 01:45:00.920 |
Cursor VS code with, uh, with, with, with code generation? 01:45:05.620 |
I've done a ton of it for this, uh, the Python side, because I'm not great with Python and 01:45:09.880 |
So, um, I found it very helpful because I've learned a lot from watching the code that it 01:45:15.200 |
If I don't know how to do something, cause if I write Python from scratch, it's going to 01:45:18.500 |
be about four times as long as what the AI can crank out because Python can be pretty 01:45:24.300 |
So just, you, you're essentially learned Python for this project. 01:45:27.980 |
So this is a good case study of like a great programmer in C plus plus quickly learning a language. 01:45:40.180 |
I mean, that's, that is a really powerful use case to learn a language for, if you're 01:45:43.860 |
already a good programmer to learn either, uh, a new language or a new, a way to approach 01:45:52.460 |
Cause you already, you probably understand the Python code it generates. 01:45:56.060 |
Like without actually looking up any of the syntax. 01:45:59.000 |
It's all pretty self-explanatory once you see it, but you know, creating it from a 01:46:03.840 |
Uh, but you still have to learn how to program in order to use it in that way. 01:46:08.520 |
Oh, and to read it and to know what to tell it to do next and all that. 01:46:11.560 |
I don't think you can vibe code yourself if you just knew and haven't coded, but if you're 01:46:16.180 |
a good programmer, AI can make you incredibly powerful. 01:46:18.860 |
What do you think is the future of programming? 01:46:20.600 |
Like five, 10, 20 years from now, this whole process now vibe coding is kind of a 01:46:25.920 |
fun meme thing, cause you still have to be, uh, the people that don't know how to 01:46:31.940 |
program it or just vibe coding are almost entirely creating systems that are not usable in 01:46:36.880 |
They're not, you can't, it's very difficult to create a product. 01:46:39.640 |
Uh, and the people who are already great programmers kind of vibe code just for the 01:46:46.100 |
They're basically, it's just a fancy autocomplete and they end up editing it or it's a 01:46:52.260 |
way to learn a new API or, or a new language or a new whatever. 01:46:55.780 |
Uh, a new use specific use case or maybe a different kind of like a gooey component or 01:47:02.120 |
But as they get smarter and smarter, we don't know where the ceiling is. 01:47:07.020 |
That might change the nature of what it means to be a programmer. 01:47:12.660 |
I think I don't want to say prompt engineer, but I think it's going to be something like 01:47:16.580 |
that in the sense that if you're an architect building a bridge, at some point guys were 01:47:21.000 |
down there welding beams together, but now you're dragging things around in AutoCAD and 01:47:24.380 |
assembling from big pre with free form sections. 01:47:26.700 |
And I assume that's what programming will be like. 01:47:28.740 |
You won't be in there throwing individual lines of code around. 01:47:31.240 |
You'll be moving components and interfaces and describing to the AI what those interactions 01:47:38.060 |
should be and letting it build the components. 01:47:40.320 |
But I think we're still quite a ways from it being able to whole cloth generate. 01:47:44.500 |
You can't say, give me a Linux kernel is compatible with Linux. 01:47:47.200 |
One day we'll be able to, and it'll crank it out. 01:47:50.360 |
Does it make you sad that we're climbing the layers of abstraction so quickly? 01:47:55.720 |
So you, somebody that used to do machine code and then assembly and then C and C++, that 01:48:01.760 |
we're getting to a point where we're vibe coding with natural language. 01:48:06.540 |
Yeah, I kind of came up at a really fortunate time, I think, because I had to come up with 01:48:11.900 |
the technology over the course of 30 or 40 years. 01:48:14.640 |
So I understand TTL logic and I can use AI to write code. 01:48:18.780 |
And I kind of know all the pieces in between. 01:48:22.720 |
But I think the only way to have got that level of knowledge or the completeness of that 01:48:28.880 |
And it's going to be hard to duplicate that for people starting now. 01:48:32.000 |
What do you think is the meaning of this whole thing? 01:48:33.880 |
Of existence of life, whatever's going on here. 01:48:45.060 |
I guess fundamentally what I care about is being able to make complex things that are useful 01:48:51.760 |
to other people, which leverages my abilities in a way that allows me to be creative and 01:48:57.320 |
to create things that other people can use in a way that if I was limited to painting or 01:49:01.160 |
sculpting or whatever in the classic arts, I would be hopeless. 01:49:04.140 |
And so for me, that's really the meaning of life. 01:49:09.300 |
And then maybe you raise a couple of good kids to hand the baton off to. 01:49:15.840 |
And you've created a lot of cool stuff over your life that impacted millions, probably billions 01:49:25.000 |
And now you're creating cool stuff for everyone to see on your YouTube and you're inspiring 01:49:34.220 |
So for everything you've done in the past and everything you're doing now, I'm a big 01:49:38.740 |
I'm really grateful for what you're doing and grateful that we got a chance to talk today. 01:49:44.780 |
Thanks for listening to this conversation with Dave Plummer. 01:49:48.540 |
To support this podcast, please check out our sponsors in the description. 01:49:51.840 |
And now let me leave you with some words from Bjorn Straustrup, creator of C++ and somebody 01:49:59.380 |
who, by the way, I interviewed a long, long time ago, episode 48 of the podcast. 01:50:06.440 |
He said, there are only two kinds of languages, the ones people complain about and the ones 01:50:15.280 |
Thank you for listening and hope to see you next time.