back to index

John Carmack: Doom, Quake, VR, AGI, Programming, Video Games, and Rockets | Lex Fridman Podcast #309


small model | large model

link |
00:00:00.000
I remember the reaction where he had drawn these characters and he was slowly moving around and like people had no experience with 3D navigation.
link |
00:00:06.960
It was all still keyboard. We didn't even have mice set up at that time, but slowly moving, going up, picked up a key, go to a wall.
link |
00:00:14.760
The wall disappears in a little animation and there's a monster like right there and he practically fell out of his chair.
link |
00:00:20.440
It was just like, ah! And games just didn't do that. You know, the games were the gods eye view.
link |
00:00:26.820
You were a little invested in your little guy. You can be like, you know, happy or sad when things happen.
link |
00:00:32.120
But you just did not get that kind of startle reaction. You weren't inside the game.
link |
00:00:36.320
Something in the back of your brain, some reptile brain thing is just going, oh shit, something just happened.
link |
00:00:42.320
And that was one of those early points where it's like, yeah, this is going to make a difference.
link |
00:00:47.160
This is going to be powerful and it's going to matter.
link |
00:00:49.960
The following is a conversation with John Carmack, widely considered to be one of the greatest programmers ever.
link |
00:00:56.960
He was the cofounder of id Software and the lead programmer on several games that revolutionized the technology, the experience and the role of gaming in our society,
link |
00:01:06.960
including Commander Keen, Wolfenstein 3D, Doom and Quake.
link |
00:01:12.960
He spent many years as the CTO of Oculus VR helping to create portals into virtual worlds and to define the technological path to the metaverse and meta.
link |
00:01:24.960
And now he has been shifting some of his attention to the problem of artificial general intelligence.
link |
00:01:31.960
This was the longest conversation on this podcast at over five hours and still I could talk to John many, many more times.
link |
00:01:43.960
And we hope to do just that.
link |
00:01:45.960
This is the Lexington podcast to support it. Please check out our sponsors in the description.
link |
00:01:51.960
And now dear friends, here's John Carmack.
link |
00:01:56.960
What was the first program you've ever written? Do you remember?
link |
00:02:00.960
Yeah, I do.
link |
00:02:01.960
So I remember being in a radio shack going up to the TRS80 computers and learning just enough to be able to do 10 print John Carmack.
link |
00:02:11.960
And it's kind of interesting how, of course, I've, you know, Carnigan and Richie kind of standardized Hello World is the first thing that you do in every computer programming language and every computer,
link |
00:02:22.960
but not having any interaction with the cultures of Unix or any other standardized things.
link |
00:02:27.960
It was just like, well, what am I going to say? I'm going to say my name.
link |
00:02:30.960
And then you learn how to do go to 10 and have it scroll all off the screen.
link |
00:02:34.960
And that was definitely the first thing that I wound up doing on a computer.
link |
00:02:38.960
Can I ask you a programming advice?
link |
00:02:40.960
I was always told in the beginning that you're not allowed to use go to statements.
link |
00:02:43.960
That's really bad programming. Is this correct or not?
link |
00:02:45.960
Jumping around code.
link |
00:02:47.960
Can we look at the philosophy and the technical aspects of the go to statement that seems so convenient, but it's supposed to be programming.
link |
00:02:55.960
Certainly back in the day in basic programming languages, you didn't have proper loops.
link |
00:03:00.960
You didn't have four wiles and repeats.
link |
00:03:02.960
You know, that was the land of Pascal for people that kind of generally had access to it back then.
link |
00:03:06.960
So you had no choice but to use go tos.
link |
00:03:09.960
And as you made what were big programs back then, which were a thousand line basic program is a really big program.
link |
00:03:16.960
They did tend to sort of degenerate into madness.
link |
00:03:19.960
You didn't have good editors or code exploration tools.
link |
00:03:22.960
So you would wind up fixing things in one place at a little patch.
link |
00:03:26.960
And there's reasons why structured programming generally helps understanding.
link |
00:03:30.960
But go tos aren't poisonous.
link |
00:03:33.960
Sometimes they're the right thing to do.
link |
00:03:35.960
Usually it's because there's a language feature missing like nested breaks or something where it can sometimes be better to do a go to clean up or go to error rather than having multiple flags, multiple if statements littered throughout things.
link |
00:03:49.960
But it is rare.
link |
00:03:51.960
If you grep through all of my code right now, I don't think any of my current code bases would actually have a go to.
link |
00:03:58.960
But deep within sort of the technical underpinnings of a major game engine, you're going to have some go tos in a couple places probably.
link |
00:04:06.960
Yeah, the infrastructure on top of like the closer you get to machine code, the more go tos you're going to see, the more of these like hacks you're going to see.
link |
00:04:15.960
Because the set of features available to you in low level programming languages is not is limited.
link |
00:04:21.960
So print John Carmack.
link |
00:04:25.960
When is the first time if we could talk about love that you found love with programming?
link |
00:04:31.960
You said like this, this is really something special.
link |
00:04:34.960
It really was something that was one of those love at first sight things where just really from the time that I understood what a computer was even.
link |
00:04:42.960
I mean, I remember looking through old encyclopedias at the black and white photos of the IBM mainframes at the real to real tape decks.
link |
00:04:49.960
And for people nowadays, it can be a little hard to understand what the world was like then from information gathering where I would go to the libraries and there would be a couple books on the shelf about computers and they would be very out of date even at that point.
link |
00:05:04.960
Just not a lot of information, but I would grab everything that I could find and you know, devour everything whenever time or newsweek had some article about computers.
link |
00:05:13.960
I would like cut it out with scissors and put it somewhere.
link |
00:05:16.960
It just, it felt like this magical thing to me, this idea that the computer would just do exactly what you told it to.
link |
00:05:23.960
I mean, and there's a little bit of the genie monkey's paw sort of issues there where you'd better be really, really careful with what you're telling it to do.
link |
00:05:30.960
But it wasn't going to back talk you, it wasn't going to have a different point of view.
link |
00:05:34.960
It was going to carry out what you told it to do.
link |
00:05:36.960
And if you had the right commands, you could make it do these pretty magical things.
link |
00:05:42.960
And so what kind of programs did you write at first?
link |
00:05:45.960
So beyond the print John Carmack.
link |
00:05:47.960
So I can remember as going through the learning process where you find at the start you're just learning how to do the most basic possible things and I can remember stuff like Superman comic that Radio Shack commissioned to have.
link |
00:06:01.960
It's like Superman had lost some of his super brain and kids had to use Radio Shack TRS80 computers to do calculations for it to help him kind of complete his heroics.
link |
00:06:11.960
And I'd find little things like that and then get a few basic books to be able to kind of work my way up.
link |
00:06:19.960
And again, it was so precious back then.
link |
00:06:21.960
I had a couple books that would teach me important things about it.
link |
00:06:25.960
I had one book that I could start to learn a little bit of assembly language from and I'd have a few books on basic and some things that I could get from the libraries.
link |
00:06:33.960
But my goals in the early days was almost always making games of various kinds.
link |
00:06:39.960
I had I loved the arcade games and the early Atari 2600 games and being able to do some of those things myself on the computers was very much what I aspired to.
link |
00:06:50.960
And it was a whole journey where if you learn normal basic, you can't do any kind of an action game.
link |
00:06:55.960
You can write an adventure game.
link |
00:06:56.960
You can write things where you say, what do you do here?
link |
00:06:59.960
I get sort of tack troll that type of thing and that can be done in the context of basic.
link |
00:07:05.960
But to do things that had moving graphics, there were only the most limited things you could possibly do.
link |
00:07:11.960
You could maybe do breakout or Pong or that sort of thing in low resolution graphics.
link |
00:07:15.960
And in fact, one of my first sort of major technical hacks that I was kind of fond of was on the Apple II computers.
link |
00:07:24.960
They had a they had a mode called low resolution graphics where of course all graphics were low resolution back then.
link |
00:07:30.960
But you know, regular low resolution graphics, it was a grid of 40 by 40 pixels normally, but they could have 16 different colors.
link |
00:07:38.960
And I wanted to make a game kind of like the the arcade game Vanguard, just a scrolling game.
link |
00:07:44.960
And I wanted to just kind of have it scroll vertically up and I could move a little ship around.
link |
00:07:48.960
You could manage to do that in basic, but there's no way you could redraw the whole screen.
link |
00:07:52.960
And I remember at the time just coming up with what felt like a brainstorm to me where I knew enough about the way the hardware was controlled,
link |
00:08:01.960
where the text screen and the low resolution graphics screen were basically the same thing.
link |
00:08:05.960
And all those computers could scroll their text screen reasonably.
link |
00:08:09.960
You could do a listing and it would scroll things up.
link |
00:08:11.960
And I figured out that I could kind of tweak just a couple of things that I barely understood to put it into a graphics mode.
link |
00:08:18.960
And I could draw graphics and then I could just do a line feed at the very bottom of the screen.
link |
00:08:23.960
And then the system would scroll it all up using an assembly language routine that I didn't know how to write back then.
link |
00:08:29.960
So that was like this first great hack that sort of had analogs later on in my career for a lot of different things.
link |
00:08:36.960
So I found out that I could draw a screen.
link |
00:08:38.960
I could do a line feed at the bottom.
link |
00:08:40.960
We would scroll it up once.
link |
00:08:41.960
I could draw a couple more lines of stuff at the bottom.
link |
00:08:43.960
And that was my first way to kind of scroll the screen, which was interesting in that that played a big part later on in the id software days as well.
link |
00:08:52.960
So do efficient drawing where you don't have to draw the whole screen, but you draw from the bottom using the thing that was designed in the hardware for text output.
link |
00:09:03.960
Yeah.
link |
00:09:04.960
Where so much of until recently, game design was limited by what you could actually get the computer to do where it's easy to say, like, OK, I want to scroll the screen.
link |
00:09:15.960
You just redraw the entire screen at a slight offset.
link |
00:09:18.960
And nowadays that works just fine.
link |
00:09:20.960
Computers are ludicrously fast.
link |
00:09:23.960
But up until a decade ago or so, there were all these things everybody wanted to do.
link |
00:09:29.960
But if they knew enough programming to be able to make it happen, it would happen too slow to be a good experience, either just ridiculously slow or just slow enough that it wasn't fun to experience it like that.
link |
00:09:41.960
So so much of kind of the first couple of decades of the programming work that I did was largely figuring out how to do something that everybody knows how they want it to happen.
link |
00:09:50.960
It just has to happen two to ten times faster than sort of the straightforward way of doing things would make it happen.
link |
00:09:57.960
And it's different now because at this point, lots of things you can just do in the most naive possible way and it still works out.
link |
00:10:05.960
You know, you don't have nearly the creative limitations or the incentives for optimizing on that level.
link |
00:10:11.960
And there's a lot of pros and cons to that.
link |
00:10:13.960
But I do generally, you know, I'm not going to do the angry old man shaking my fist at the clouds bit where back in my day, programmers had to do real programming.
link |
00:10:22.960
You know, it's it's amazing that you can just kind of pick an idea and go do it right now.
link |
00:10:27.960
And you don't have to be some assembly language wizard or deep GPU Arcanist to be able to figure out how to make your wishes happen.
link |
00:10:34.960
Well, there's still, see, that's true.
link |
00:10:37.960
But let me put on my old man with a fist hat and say that probably the thing that will define the future still requires you to operate at the limits of the current system.
link |
00:10:49.960
So we'll probably talk about this. But if you talk about building the metaverse and building a VR experience that's compelling, it probably requires you to not to go to assembly or maybe not literally, but sort of spiritually to go to the limits of what the system is capable of.
link |
00:11:07.960
And that really was why virtual reality was specifically interesting to me where it had all the ties to you could say that even back in the early days, I have some old magazine articles that's talking about.
link |
00:11:18.960
Doom as a virtual reality experience back when just seeing anything in 3D.
link |
00:11:23.960
So you could say that we've been trying to build those virtual experiences from the very beginning.
link |
00:11:28.960
And in the modern era, virtual reality, especially on the mobile side of things, when it's standalone, you're basically using a cell phone chip to be able to produce these very immersive experiences.
link |
00:11:40.960
It does require work. It's not at the level of what an old school console game programmer would have operated at where you're looking at hardware registers and you're scheduling all the DNA accesses.
link |
00:11:52.960
But it is still definitely a different level than what a web developer or or even a PC steam game developer usually has to work at.
link |
00:12:00.960
And again, it's great. There's opportunities for people that want to operate it either into that spectrum there and still provide a lot of value to the world.
link |
00:12:08.960
Let me ask you sort of a big question about preference.
link |
00:12:14.960
What would you say is the best programming language, your favorite, but also the best you've seen throughout your career.
link |
00:12:24.960
You're considered by many to be the greatest programmer ever.
link |
00:12:28.960
I mean, it's so difficult to place that label on anyone.
link |
00:12:31.960
But if you put it on anyone, it's you.
link |
00:12:33.960
So let me ask you these kind of ridiculous questions of what's the best band of all time.
link |
00:12:38.960
But in your case, what's the best programming language?
link |
00:12:41.960
Everything has all the caveats about it.
link |
00:12:43.960
So what I use, so nowadays, I do program a reasonable amount of Python for AIML sorts of work.
link |
00:12:51.960
I'm not a native Python programmer.
link |
00:12:54.960
It's something I came to very late in my career.
link |
00:12:56.960
I understand what it's good for.
link |
00:12:58.960
But you don't dream in Python?
link |
00:12:59.960
I do not.
link |
00:13:00.960
And it has some of those things where there's some amazing stats.
link |
00:13:03.960
When you say if you just start, if you make a loop, you know, a triply nested loop and start doing operations in Python,
link |
00:13:10.960
you can be thousands to potentially a million times slower than a proper GPU tensor operation.
link |
00:13:16.960
And these are staggering numbers.
link |
00:13:18.960
You know, you can be as much slower as we've almost gotten faster in our pace of progress and all this other miraculous stuff.
link |
00:13:26.960
So your intuition is about inefficiencies within the Python sort of.
link |
00:13:29.960
It keeps hitting me upside the face where it's just gotten to the point now I understand.
link |
00:13:33.960
It's like, OK, you just can't do a loop if you care about performance in Python.
link |
00:13:37.960
You have to figure out how you can reformat this into some big vector operation or something that's going to be done completely within a C++ library.
link |
00:13:46.960
But the other hand is it's amazingly convenient.
link |
00:13:49.960
And you just see stuff that people are able to cobble together by just import a few different things.
link |
00:13:54.960
And you can do stuff that nobody on Earth could do 10 years ago and you can do it in a little cookbook thing that you copy pasted out of a website.
link |
00:14:01.960
So that is really great.
link |
00:14:03.960
When I'm sitting down to do what I consider kind of serious programming, it's still in C++.
link |
00:14:09.960
And it's really kind of a C flavored C++ at that where I'm not big into the modern template metaprogramming sorts of things.
link |
00:14:17.960
I see a lot of train wrecks coming from some of that over abstraction.
link |
00:14:22.960
I spent a few years really going kind of deep into the kind of historical Lisp work and Haskell and some of the functional programming sides of things.
link |
00:14:32.960
And there is a lot of value there in the way you think about things.
link |
00:14:37.960
And I changed a lot of the way I write my C and C++ code based on what I learned about the value that comes out of not having this random mutable state that you kind of lose track of.
link |
00:14:49.960
Because something that many people don't really appreciate till they've been at it for a long time is that it's not the writing of the program initially.
link |
00:14:57.960
It's the whole lifespan of the program.
link |
00:14:59.960
And that's when it's not necessarily just how fast you wrote it or how fast it operates, but it's how can it bend and adapt as situations change.
link |
00:15:08.960
And then the thing that I've really been learning in my time at Meta with the Oculus and VR work is it's also how well it hands off between a continuous kind of revolving door programmers taking over maintenance and different things and how you get people up to speed in different areas.
link |
00:15:23.960
And there's all these other different aspects of it.
link |
00:15:26.960
So C++ is a good language for handover between engineers.
link |
00:15:31.960
Probably not the best.
link |
00:15:33.960
And there's some really interesting aspects to this where in some cases languages that are not generally thought well of for many reasons like C is derided pretty broadly that, yes, obviously all of these security flaws that happen with the memory and unsafeness and buffer overruns and the things that you've got there.
link |
00:15:52.960
But there is this underappreciated aspect to the language is so simple, anyone can go and if you know C, you can generally jump in someplace and not have to learn what paradigms they're using because there just aren't that many available.
link |
00:16:07.960
I think there's some really, really well written C code.
link |
00:16:11.960
I find it great that if I'm messing around with something an open BSD say, I mean I can be walking around in the kernel and I'm like, I understand everything that's going on here.
link |
00:16:20.960
It's not hard for me to figure out what I need to do to make whatever change that I need to.
link |
00:16:28.960
While you can have more significant languages like it's a downside of Lisp where I don't regret the time that I spent with Lisp.
link |
00:16:36.960
I think that it did help my thinking about programming in some ways.
link |
00:16:41.960
But the people that are the biggest defenders of Lisp are saying how malleable of a language it is that if you write a huge Lisp program, you've basically invented your own kind of language and structure because it's not the primitives of the language you're using very much.
link |
00:16:56.960
It's all of the things you've built on top of that.
link |
00:16:58.960
And then a language like Racket, kind of one of the more modern Lisp versions, it's essentially touted as a language for building other languages.
link |
00:17:06.960
And I understand the value of that for a tiny little project, but the idea of that for one of these long term supported by lots of people kind of horrifies me where all of those abstractions that you're like, OK, you can't touch this code till you educate yourself on all of these things that we've built on top of that.
link |
00:17:26.960
And it was interesting to see how when Google made go, a lot of the criticisms of that are it's like, wow, this is not a state of the art language. This language is just so simple and almost crude.
link |
00:17:37.960
And you could see the programming language people just looking down at it.
link |
00:17:41.960
But it does seem to be quite popular as basically saying this is the good things about C. Everybody can just jump right in and use it.
link |
00:17:48.960
You don't need to restructure your brain to write good code in it.
link |
00:17:53.960
So I wish that I had more opportunity for doing some work in go.
link |
00:17:58.960
Rust is the other modern language that everybody talks about that I'm not fit past judgment on.
link |
00:18:03.960
I've done a little bit beyond Hello World.
link |
00:18:05.960
I wrote some like video decompression work in Rust just as an exercise.
link |
00:18:10.960
But that was a few years ago and I haven't really used it since.
link |
00:18:14.960
The best programming language is the one that works generally that you're currently using because that's another trap is in almost every case I've seen when people mixed languages on a project.
link |
00:18:24.960
That's a mistake.
link |
00:18:25.960
I would rather stay just in one language so that everybody can work across the entire thing.
link |
00:18:30.960
And we have, I get meta, we have a lot of projects that use kind of react framework.
link |
00:18:35.960
So you've got JavaScript here and then you have C++ for real work.
link |
00:18:40.960
And then you may have Java interfacing with some other part of the Android system.
link |
00:18:44.960
And those are all kind of horrible things.
link |
00:18:46.960
And that was one thing that I remember talking with Boz at Facebook about it where like, man, I wish we could have just said we're only hiring C++ programmers.
link |
00:18:58.960
And he just thought from the Facebook meta perspective, well, we just wouldn't be able to find enough with the thousands of programmers they've got there.
link |
00:19:07.960
It is not necessarily a dying breed, but you can sure find a lot more Java or JavaScript programmers.
link |
00:19:14.960
And I kind of mentioned that to Elon one time and he was kind of flabbergasted about that.
link |
00:19:20.960
It's like, well, you just, you go out and you find those programmers and you don't hire the other programmers that don't do the languages that you want to use.
link |
00:19:27.960
But right now, I guess, yeah, they're using JavaScript on a bunch of the SpaceX work for the UI side of things when you go find UI programmers, they're JavaScript programmers.
link |
00:19:36.960
I wonder if that's because there's a lot of JavaScript programmers, because I do think that great programmers are rare.
link |
00:19:44.960
That it's not, you know, if you just look at statistics of how many people are using different programming languages, that doesn't tell you the story of what the great programmers are using.
link |
00:19:55.960
And so you have to really look at what you were speaking to, which is the fundamentals of a language.
link |
00:20:00.960
What does it encourage?
link |
00:20:01.960
How does it encourage you to think?
link |
00:20:02.960
What kind of systems does it encourage you to build?
link |
00:20:05.960
There's something about C++ that has elements of creativity, but forces you to be an adult about your programming.
link |
00:20:14.960
Well, it expects you to be an adult.
link |
00:20:16.960
It does not force you to.
link |
00:20:18.960
So it brings out people that are willing to be creative in terms of building large systems and coming up with interesting solutions, but at the same time have the sort of the good software engineering practices that amend themselves to real world systems.
link |
00:20:38.960
Let me ask you about this other language, JavaScript.
link |
00:20:42.960
So if we, you know, aliens visit in thousands of years and humans are long gone, something tells me that most of the systems they find will be running JavaScript.
link |
00:20:54.960
I kind of think that if we're living in a simulation, it's written in JavaScript.
link |
00:21:00.960
You know, for the longest time, even still, JavaScript didn't get any respect, and yet it runs so much of the world and an increasing number of the world.
link |
00:21:12.960
Is it possible that all everything will be written in JavaScript one day?
link |
00:21:16.960
So the engineering under JavaScript is really pretty phenomenal.
link |
00:21:20.960
The systems that make JavaScript run as fast as it does right now are kind of miracles of modern engineering in many ways.
link |
00:21:29.960
It does feel like it is not an optimal language for all the things that it's being used for or an optimal distribution system to build huge apps in something like this without type systems and so on.
link |
00:21:44.960
But I think for a lot of people, it does reasonably the necessary things.
link |
00:21:49.960
It's still a C flavored language.
link |
00:21:51.960
It's still a braces and semicolon language. It's not hard for people to be trained in JavaScript and then understand the roots of where it came from.
link |
00:22:01.960
I think garbage collection is unequivocally a good thing for most programs to be written in.
link |
00:22:08.960
It's funny that I still, just this morning, I was on, I was seeing a Twitter thread of a bunch of really senior game dev people arguing about the virtues and costs of garbage collection.
link |
00:22:18.960
You will run into some people that are top notch programmers that just say, no, this is literally not a good thing.
link |
00:22:23.960
Oh, because it makes you lazy?
link |
00:22:25.960
Yes, that it makes you not think about things.
link |
00:22:27.960
And I do disagree.
link |
00:22:29.960
I think that there is so much objective data on the vulnerabilities that have happened in C and C++ programs, sometimes written by the best programmers in the world.
link |
00:22:39.960
It's like nobody is good enough to avoid ever shooting themselves in the foot with that.
link |
00:22:43.960
You write enough C code, you're going to shoot yourself in the foot.
link |
00:22:46.960
And garbage collection is a very great thing for the vast majority of programs.
link |
00:22:50.960
It's only when you get into the tightest of real time things that you start saying it's like, no, the garbage collection has more costs than it has benefits for me there.
link |
00:22:59.960
But that's not 99 plus percent of all the software in the world.
link |
00:23:03.960
So JavaScript is not terrible in those ways.
link |
00:23:08.960
And so much of programming is not the language itself, it's the infrastructure that surrounds it, all the libraries that you can get and the different ways you can deploy it, the portability that it gives you.
link |
00:23:23.960
And JavaScript is really strong on a lot of those things where for a long time, and it still does if I look at it, the web stack about everything that has to go when you do something really trivial in JavaScript
link |
00:23:35.960
and it shows up on a web browser to kind of x ray through that and see everything that has to happen for your one little JavaScript statement to turn into something visible in your web browser.
link |
00:23:46.960
It's very, very disquieting, just the depth of that stack and the fact that so few people can even comprehend all of the levels that are going on there.
link |
00:23:58.960
But it's again, I have to caution myself to not be the in the good old days old man about it because clearly there's enormous value here.
link |
00:24:07.960
The world does run on JavaScript to a pretty good approximation there and it's not falling apart.
link |
00:24:13.960
There's a bunch of scary stuff where you look at console logs and you just see all of these bad things that are happening, but it's still kind of limping along and nobody really notices.
link |
00:24:23.960
But so much of my systems design and systems analysis goes around.
link |
00:24:29.960
You should understand what the speed of light is, like what would be the best you could possibly do here.
link |
00:24:34.960
And it sounds horrible, but in a lot of cases, you can be a thousand times off your speed of light velocity for something and it's still be okay.
link |
00:24:44.960
And in fact, it can even sometimes still be the optimal thing in a larger system standpoint where there's a lot of things that you don't want to have to parachute in someone like me to go in and say, make this this web page run a thousand times faster.
link |
00:25:00.960
You know, make this web app into a hardcore native application that starts up in 37 milliseconds and everything responds in less than one frame latency.
link |
00:25:10.960
That's just not necessary. And if somebody wants to go pay me millions of dollars to do software like that when they can take somebody right out of a boot camp and say spin up an application for this, often being efficient is not really the best metric.
link |
00:25:26.960
And it's like there's that applies in a lot of areas where it's kind of interesting how a lot of our appliances and everything are all built around energy efficiency, sometimes at the expense of robustness in some other ways or higher costs in other ways where there's
link |
00:25:41.960
interesting things where energy or electricity could become much cheaper in a future world and that could change our engineering tradeoffs for the way we build certain things where you could throw away efficiency and actually get more benefits that actually matter.
link |
00:25:55.960
That's one of my, you know, I one of the directions I was considering swerving into was nuclear energy when I was kind of like, what do I want to do next?
link |
00:26:03.960
It was either going to be cost effective nuclear fission or artificial general intelligence. And one of the one of my pet ideas there is like, you know, people don't understand how cheap nuclear fuel is.
link |
00:26:17.960
And there would be ways that you could be a quarter of the efficiency or less. But if it wound up making your plant 10 times cheaper, that could be a radical innovation and something like that.
link |
00:26:30.960
So there's like some of these thoughts around like direct fission energy conversion, fission fragment conversion that, you know, maybe you build something that doesn't require all the steam turbines and everything, even if it winds up being less efficient.
link |
00:26:41.960
So that applies a lot in programming where there's always it's always good to know what you could do if you really sat down and took it took it far because sometimes there's discontinuities like around user reaction times.
link |
00:26:55.960
There are some points where the difference between operating in one second and 750 milliseconds, not that huge. You'll see it in web page statistics, but most of the usability stuff, not that great.
link |
00:27:07.960
But if you get down to 50 milliseconds, then all of a sudden this just feels amazing, you know, it's just like doing your bidding instantly rather than you're giving it a command, twiddling your thumbs, waiting for it to respond.
link |
00:27:18.960
So sometimes it's important to really crunch hard to get over some threshold. But there are there are broad basins in the value metric for lots of work where it just doesn't pay to even go that extra mile.
link |
00:27:31.960
And they're craftsmen that, you know, they just don't want to buy that and more power to them. You know, if somebody just wants to say, no, I'm going to be, my pride is in my work.
link |
00:27:41.960
I'm never going to do something that's not as good as I could possibly make it. I respect that and sometimes I am that person.
link |
00:27:48.960
But I try to focus more on the larger value picture and you do pick your battles and you deploy your resources in the play that's going to give you sort of the best user value in the end.
link |
00:27:59.960
Well, if you look at the evolution of life on Earth as a kind of programming effort, it seems like efficiency isn't the thing that's being optimized for.
link |
00:28:13.960
Like natural selection is very inefficient, but it kind of adapts and through the process of adaptations, building more and more complex systems that are more and more intelligent, the final result is kind of pretty interesting.
link |
00:28:27.960
And so I think of JavaScript the same way. It's like this giant mess that, you know, things naturally die off if they don't work.
link |
00:28:35.960
And if they become useful to people, they kind of naturally live and then you build this community, large community of people that are generating code and some code is sticky, some is not.
link |
00:28:47.960
And nobody knows the inefficiencies or the efficiencies or the breaking points, like how reliable this code is and you kind of just run it, assume it works and then get unpleasantly surprised and then that's very kind of the evolutionary process.
link |
00:29:02.960
So that's a really good analogy and we can go a lot of places with that where in the earliest days of programming when you had finite, you could count the bytes that you had to work on this.
link |
00:29:12.960
You had all the kind of hackers playing code golf to be one less instruction than the other person's multiply routine to kind of get through and it was so perfectly crafted.
link |
00:29:22.960
It was a crystal piece of artwork when you had a program because there just were not that many. You couldn't afford to be lazy in different ways.
link |
00:29:30.960
And in many ways I see that as akin to the symbolic AI work where again, if you did not have the resources to just say, well, we're going to do billions and billions of programmable weights here.
link |
00:29:41.960
You have to turn it down into something that is symbolic and crafted like that.
link |
00:29:46.960
But that's definitely not the way DNA and life and biological evolution and things work.
link |
00:29:53.960
On the one hand, it's almost humbling how little programming code is in our bodies.
link |
00:29:59.960
We've got a couple billion base pairs and it's like this all fits on a thumb drive for years now and then our brains are even a smaller section of that.
link |
00:30:07.960
You've got maybe 50 megabytes and this is not like Shannon Limit perfectly information dense conveyances here.
link |
00:30:16.960
It's like these are messy codes.
link |
00:30:18.960
They're broken up into amino acids.
link |
00:30:20.960
A lot of them don't do important things or they do things in very awkward ways.
link |
00:30:25.960
But it is this process of just accumulation on top of things and you need scale.
link |
00:30:32.960
Both you need scale for the population for that to work out.
link |
00:30:36.960
In the early days, in the 50s and 60s, the ancient era of computers where you could count when they say like when the Internet started even in the 70s, there were 18 hosts or something on it.
link |
00:30:47.960
It was this small finite number and you were still optimizing everything to be as good as you possibly could be.
link |
00:30:53.960
But now it's billions and billions of devices and everything going on.
link |
00:30:58.960
You can have this very much natural evolution going on where lots of things are tried, lots of things are blowing up.
link |
00:31:06.960
Venture capitalists lose their money when a startup invested in the wrong tech stack and things completely failed or failed the scale.
link |
00:31:13.960
But good things do come out of it and it's interesting to see the mimetic evolution of the way different things happen.
link |
00:31:21.960
Like mentioning Hello World at the beginning.
link |
00:31:23.960
It's funny how some little thing like that where everybody, every programmer knows Hello World now and that was a completely arbitrary sort of decision that just came out of the dominance of Unix and C and early examples of things like that.
link |
00:31:37.960
So millions of experiments are going on all the time, but some things do kind of rise to the top and win the fitness war for whether it's mind space or programming techniques or anything.
link |
00:31:49.960
Like there's a site on Stack Exchange called CodeGolf where people compete to write the shortest possible program for a particular task in all the different kinds of languages.
link |
00:32:00.960
And it's really interesting to see folks kind of their masters of their craft really play with the limits of programming languages.
link |
00:32:12.960
It's really beautiful to see.
link |
00:32:13.960
And across all the different programming languages, you get to see some of these weird programming languages and mainstream ones.
link |
00:32:21.960
The difference between Python 2 and 3, you get to see the difference between C and C++ and Java and you get to see JavaScript, all of that.
link |
00:32:29.960
And it's kind of inspiring to see how much depth of possibility there is within programming languages that CodeGolf kind of tasks reveal.
link |
00:32:42.960
Most of us, if you do any kind of programming, you kind of do boring kind of very vanilla type of code.
link |
00:32:49.960
That's the way to build large systems, but it's nice to see that the possibility of creative genius is still within those languages.
link |
00:32:56.960
It's laden within those languages.
link |
00:32:59.960
So given that you are once again one of the greatest programmers ever, what do you think makes a good programmer?
link |
00:33:07.960
Maybe a good modern programmer.
link |
00:33:09.960
So I just gave a long rant slash lecture at Meta to the TPM organization.
link |
00:33:16.960
And my biggest point was everything that we're doing really should flow from user value.
link |
00:33:23.960
You know, all the good things that we're doing.
link |
00:33:25.960
It's like we're not technical people.
link |
00:33:27.960
It's like you shouldn't be taking pride just in the specific thing like CodeGolf is the sort of thing.
link |
00:33:32.960
It's a fun puzzle game, but that really should not be a major motivator for you.
link |
00:33:37.960
It's like we're solving problems for people or we're providing entertainment to people.
link |
00:33:41.960
We're doing something of value to people that's displacing something else in their life.
link |
00:33:45.960
So we want to be providing a net value over what they could be doing, but instead they're choosing to use our products.
link |
00:33:52.960
And that's where, I mean, it sounds triter corny, but I fundamentally do think that's how you make the world a better place.
link |
00:33:59.960
If you have given more value to people than it took you and your team to create, then the world's a better place.
link |
00:34:06.960
People have gone from something of lesser value, chosen to use your product and their life feels better for that.
link |
00:34:12.960
And if you've produced that economically, that's a really good thing.
link |
00:34:17.960
On the other hand, if you spent ridiculous amounts of money, you've just kind of shoveled a lot of cash into a woodchipper there
link |
00:34:24.960
and you should maybe not feel so good about what you're doing.
link |
00:34:28.960
So being proud about a specific architecture or a specific technology or a specific code sequence that you've done,
link |
00:34:36.960
it's great to get a little smile, like a tiny little dopamine hit for that.
link |
00:34:40.960
But the top level metric should be that you're building things of value.
link |
00:34:44.960
Now, you can get into the argument about what is user value, how do you actually quantify that.
link |
00:34:50.960
And there can be big arguments about that, but it's easy to be able to say,
link |
00:34:54.960
okay, this pissed off user there is not getting value from what you're doing.
link |
00:34:58.960
This user over there with the big smile on their face, the moment of delight when something happened,
link |
00:35:03.960
there's a value that's happened there.
link |
00:35:05.960
I mean, you have to at least accept that there is a concept of user value.
link |
00:35:09.960
Even if you have trouble exactly quantifying it, you can usually make relative arguments about it.
link |
00:35:14.960
Well, this was better than this.
link |
00:35:16.960
We've improved things.
link |
00:35:18.960
So being a servant to the user is your job when you're a developer.
link |
00:35:24.960
You want to be producing something that other people are going to find valuable.
link |
00:35:29.960
And if you are technically inclined, then finding the right levers to be able to pull,
link |
00:35:35.960
to be able to make a design that's going to produce the most value for the least amount of effort.
link |
00:35:41.960
There's a ratio there where it's a problem at the big tech companies, whether it's MetaGoogle,
link |
00:35:49.960
Apple, Microsoft, Amazon, companies that have almost infinite money.
link |
00:35:54.960
I mean, I know their CFO will complain that it's not infinite money,
link |
00:35:58.960
but for most developer standpoints, it really does feel like it.
link |
00:36:02.960
And it's almost counterintuitive that if you're working hard as a developer on something,
link |
00:36:07.960
there's always this thought, if only I had more resources, more people, more RAM, more megahertz,
link |
00:36:13.960
then my product will be better.
link |
00:36:15.960
And that sense that at certain points, it's certainly true that if you are really hamstrung by this,
link |
00:36:21.960
removing an obstacle will make a better product, make more value.
link |
00:36:26.960
But if you're not making your core design decisions in this fiercely competitive way
link |
00:36:32.960
where you're saying feature A or feature B, you can't just say, let's do both,
link |
00:36:37.960
because then you're not making a value judgment about them.
link |
00:36:40.960
You're just saying, well, they both seem good.
link |
00:36:42.960
I don't want to necessarily have to pick out which one is better or how much better
link |
00:36:46.960
and tell team B that, sorry, we're not going to do this because A is more important.
link |
00:36:52.960
But that notion of always having to really critically value what you're doing,
link |
00:36:57.960
your time, the resources you expend, even the opportunity cost of doing something else,
link |
00:37:01.960
that's super important.
link |
00:37:04.960
Well, let me ask you about the big debates that you're mentioning of how to measure value.
link |
00:37:11.960
Is it possible to measure it kind of numerically,
link |
00:37:18.960
or can you do the sort of Johnny Ive, the designer route of imagining
link |
00:37:25.960
sort of somebody using a thing and imagining a smile on their face,
link |
00:37:31.960
imagining the experience of love and joy that you have when you use the thing.
link |
00:37:35.960
That's from a design perspective.
link |
00:37:37.960
Or if you're building more like a lower level thing for Linux,
link |
00:37:41.960
you imagine a developer that might come across this and use it and become happy
link |
00:37:48.960
and better off because of it.
link |
00:37:50.960
So where do you land on those things?
link |
00:37:52.960
I imagine like Meta and Google will probably try to measure the thing.
link |
00:37:58.960
It's like you try to optimize engagement or something.
link |
00:38:01.960
Let's measure engagement.
link |
00:38:03.960
I admire the designer ethic of think of a future that's immeasurable
link |
00:38:12.960
and you try to make somebody in that future that's different from today happy.
link |
00:38:16.960
So I do usually favor if you can get any kind of a metric that's good by all means
link |
00:38:23.960
listen to the data, but you can go too far there where we've had problems where
link |
00:38:27.960
it's like, hey, we had a performance regression because our fancy new telemetry system
link |
00:38:32.960
is doing a bazillion file rights to kind of archive this stuff
link |
00:38:36.960
because we needed to collect information to determine if we were doing,
link |
00:38:39.960
you know, if our plans were good.
link |
00:38:41.960
So when information is available, you should never ignore it.
link |
00:38:45.960
For actual users using the thing, human beings using the thing,
link |
00:38:50.960
large number of human beings, and you get to see sort of all the large numbers.
link |
00:38:53.960
So there's zero to one problem of when you're doing something really new,
link |
00:38:56.960
you do kind of have to make a guess.
link |
00:38:58.960
But one of the points that I've been making at Meta is we have more than enough users now
link |
00:39:04.960
that anything somebody wants to try in VR, we have users that will be interested in that.
link |
00:39:09.960
You do not get to make a completely greenfield blue sky pitch and say,
link |
00:39:14.960
I'm going to do this because I think it might be interesting.
link |
00:39:17.960
I challenge everyone.
link |
00:39:19.960
There are going to be people, whether it's, you know, working in VR on your,
link |
00:39:23.960
like on your desktop replacement or communicating with people in different ways
link |
00:39:28.960
or playing the games, there are going to be probably millions of people,
link |
00:39:34.960
or at least if you pick some tiny niche that we're not in right now,
link |
00:39:37.960
there's still going to be thousands of people out there that have the headsets
link |
00:39:41.960
that would be your target market.
link |
00:39:43.960
And I tell people, pay attention to them.
link |
00:39:45.960
Don't invent fictional users.
link |
00:39:47.960
Don't make an Alice Bob Charlie that fits whatever matrix of tendencies
link |
00:39:52.960
that you want to break the market down to because it's a mistake to think about
link |
00:39:56.960
imaginary users when you've got real users that you could be working with.
link |
00:40:01.960
But on the other hand, there is value to having a kind of wholeness of vision for a product.
link |
00:40:08.960
And companies like Meta have, you know, they understand the tradeoffs
link |
00:40:14.960
where you can have a company like SpaceX or, you know, Apple and the Steve Jobs era
link |
00:40:19.960
where you have a very powerful leading personality that I, you know,
link |
00:40:23.960
that can micromanage at a very low level and can say it's like,
link |
00:40:26.960
no, that handle needs to be different or that icon needs to change the tint there.
link |
00:40:31.960
And they clearly get a lot of value out of it.
link |
00:40:34.960
They also burn through a lot of employees that have horror stories to tell about
link |
00:40:38.960
working there afterwards.
link |
00:40:40.960
My position is that you're at your best when you've got a leader
link |
00:40:45.960
that is at their limit of what they can kind of comprehend of everything below them
link |
00:40:50.960
and they can have an informed opinion about everything that's going on.
link |
00:40:54.960
And you take somebody, you've got to believe that somebody that has 30, 40 years of experience,
link |
00:41:00.960
you would hope that they've got wisdom that the just out of boot camp person
link |
00:41:04.960
contributing doesn't have and that if they're like, well, that's wrong there,
link |
00:41:08.960
you probably shouldn't do it that way or even just don't do it that way, do it another way.
link |
00:41:13.960
So there's value there, but it can't go beyond a certain level.
link |
00:41:17.960
I mean, I have Steve Jobs stories of him saying things that are just wrong
link |
00:41:21.960
right in front of me about technical things because he was not operating at that level.
link |
00:41:27.960
But when it does work and you do get that kind of passionate leader
link |
00:41:31.960
that's thinking about the entire product and just really deeply cares about
link |
00:41:35.960
not letting anything slip through the cracks, I think that's got a lot of value.
link |
00:41:39.960
But the other side of that is the people saying that, well,
link |
00:41:42.960
we want to have these independent teams that are bubbling up the ideas
link |
00:41:45.960
because it's almost anti capitalist or anti free market to say it's like,
link |
00:41:50.960
I want my great leader to go ahead and dictate all these points there
link |
00:41:54.960
where clearly free markets bring up things that you don't expect.
link |
00:41:58.960
Like in VR, we saw a bunch of things like it didn't turn out at all
link |
00:42:02.960
the way the early people thought were going to be the key applications
link |
00:42:05.960
and things that would not have been approved by the dark cabal
link |
00:42:10.960
making the decisions about what gets into the store
link |
00:42:13.960
turn out in some cases be extremely successful.
link |
00:42:16.960
So I definitely kind of wanted to be there as a point where I did make a pitch.
link |
00:42:21.960
It's like, hey, make me VR dictator and I'll go in and get shit done.
link |
00:42:25.960
And that's just, it's not in the culture at Metta.
link |
00:42:28.960
They understand the trade offs and that's just not the way,
link |
00:42:32.960
that's not the company that they want, the team that they want to do.
link |
00:42:36.960
It's fascinating because VR and we'll talk about it more.
link |
00:42:39.960
It's still unclear to me in what way VR will change the world
link |
00:42:46.960
because it does seem clear that VR will somehow fundamentally transform this world
link |
00:42:50.960
and it's unclear to me how.
link |
00:42:53.960
Let me know when you want to get into that.
link |
00:42:56.960
Hold on a second.
link |
00:42:58.960
Stick to the you being the best programmer ever.
link |
00:43:02.960
Okay, in the early days when you didn't have adult responsibilities
link |
00:43:06.960
of leading teams and all that kind of stuff
link |
00:43:08.960
and you can focus on just being a programmer,
link |
00:43:12.960
what did the productive day in the life of John Carmack look like?
link |
00:43:17.960
How many hours of the keyboard? How much sleep?
link |
00:43:20.960
What was the source of calories that fueled the brain?
link |
00:43:23.960
What was it like? What time did you wake up?
link |
00:43:26.960
So I was able to be remarkably consistent about
link |
00:43:29.960
what was good working conditions for me for a very long time.
link |
00:43:33.960
I was never one of the programmers that would do all nighters going through
link |
00:43:39.960
work for 20 hours straight.
link |
00:43:41.960
It's like my brain generally starts turning to mush after 12 hours or so.
link |
00:43:46.960
But the hard work is really important
link |
00:43:49.960
and I would work for decades.
link |
00:43:51.960
I would work 60 hours a week.
link |
00:43:53.960
I would work a 10 hour day, 6 days a week,
link |
00:43:55.960
and try to be productive at that.
link |
00:43:58.960
Now my schedule shifted around a fair amount
link |
00:44:00.960
when I was young without any kids,
link |
00:44:02.960
any other responsibilities.
link |
00:44:04.960
I was on one of those cycling schedules
link |
00:44:06.960
where I'd kind of get in an hour later each day
link |
00:44:09.960
and roll around through the entire time
link |
00:44:11.960
and I'd wind up kind of pulling in at 2 or 3 in the afternoon sometimes
link |
00:44:15.960
and then working again past midnight or 2 in the morning.
link |
00:44:19.960
And that was when it was just me trying to make things happen.
link |
00:44:25.960
And I was usually isolated off in my office.
link |
00:44:27.960
People generally didn't bother me much at it
link |
00:44:30.960
and I could get a lot of programming work done that way.
link |
00:44:34.960
I did settle into a more normal schedule
link |
00:44:36.960
when I was taking kids to school and things like that.
link |
00:44:39.960
So kids were the forcing function that got you to wake up at the same time?
link |
00:44:43.960
It's not clear to me that there was much of a difference
link |
00:44:46.960
in the productivity with that where I kind of feel...
link |
00:44:50.960
If I just get up when I feel like it,
link |
00:44:52.960
it's usually a little later each day,
link |
00:44:54.960
but I just recently made the focusing decision
link |
00:44:57.960
to try to push my schedule back a little bit earlier
link |
00:44:59.960
to getting up at 8 in the morning
link |
00:45:01.960
and trying to shift things around.
link |
00:45:04.960
I'm often doing experiments with myself about
link |
00:45:07.960
what should I be doing to be more productive.
link |
00:45:10.960
And one of the things that I did realize was happening in recent months
link |
00:45:14.960
where I would go for a walk or a run.
link |
00:45:18.960
I cover like four miles a day
link |
00:45:20.960
and I would usually do that just as the sun's going down here in Texas now
link |
00:45:25.960
and it's still really damn hot,
link |
00:45:27.960
but I'd go out at 8.30 or something
link |
00:45:29.960
and cover the time there and then the showering.
link |
00:45:32.960
And it was putting a hold in my day
link |
00:45:34.960
where I would have still a couple of hours after that
link |
00:45:37.960
and sometimes my best hours were at night
link |
00:45:39.960
and I'd be like, I don't know what else is around.
link |
00:45:41.960
Nobody's bothering me,
link |
00:45:43.960
but that hole in the day was a problem.
link |
00:45:45.960
So just a couple of weeks ago,
link |
00:45:47.960
I made the change to go ahead and say,
link |
00:45:49.960
all right, I'm going to get up a little earlier.
link |
00:45:51.960
I'm going to do a walk or get out there first
link |
00:45:53.960
so I can have more uninterrupted time.
link |
00:45:55.960
So I'm still playing with factors like this
link |
00:45:57.960
as I kind of optimize my work efforts,
link |
00:46:00.960
but it's always been...
link |
00:46:03.960
It was 60 hours a week for a very long time.
link |
00:46:06.960
To some degree, I had a little thing in the back of my head
link |
00:46:08.960
where I would have a lot of programmers
link |
00:46:10.960
that would do these marathon sessions.
link |
00:46:12.960
And I had Dave Taylor, one of the guys that he had.
link |
00:46:14.960
He would be one of those people
link |
00:46:16.960
that would fall asleep under his desk sometimes
link |
00:46:18.960
and all the kind of classic hacker tropes about things.
link |
00:46:20.960
And a part of me was always a little bothered
link |
00:46:22.960
that that wasn't me,
link |
00:46:24.960
that I wouldn't go program 20 hours straight
link |
00:46:27.960
because I'm falling apart
link |
00:46:29.960
and not being very effective after 12 hours.
link |
00:46:32.960
I mean, yeah, 12 hour programming,
link |
00:46:34.960
that's fine when you're doing that,
link |
00:46:36.960
but not doing smart work much after.
link |
00:46:38.960
At least I'm not, but there's a range of people.
link |
00:46:40.960
I mean, that's something that a lot of people
link |
00:46:42.960
don't really get in their gut
link |
00:46:44.960
where there are people that work on four hours of sleep
link |
00:46:46.960
and are smart and can continue to do good work,
link |
00:46:48.960
but then there's a lot of people that just fall apart.
link |
00:46:51.960
So I do tell people that
link |
00:46:53.960
I always try to get eight hours of sleep.
link |
00:46:55.960
It's not this, you know,
link |
00:46:57.960
push yourself harder, get up earlier.
link |
00:46:59.960
I just do worse work where, you know,
link |
00:47:02.960
you can work 100 hours a week
link |
00:47:04.960
and people get eight hours of sleep
link |
00:47:06.960
if you just kind of prioritize things correctly.
link |
00:47:08.960
But I do believe in working hard, working a lot.
link |
00:47:11.960
There was a comment that Game Dev made
link |
00:47:14.960
that I know there's a backlash
link |
00:47:17.960
against really hard work in a lot of cases,
link |
00:47:20.960
and I get into online arguments about this all the time,
link |
00:47:23.960
but he was basically saying, yeah, 40 hours a week,
link |
00:47:25.960
that's kind of a part time job.
link |
00:47:27.960
And if you were really in it,
link |
00:47:29.960
you're doing what you think is important,
link |
00:47:31.960
what you're passionate about,
link |
00:47:33.960
what your work gets more done.
link |
00:47:35.960
And it's just really not possible to argue with that
link |
00:47:39.960
if you've been around the people
link |
00:47:41.960
that work with that level of intensity and just say,
link |
00:47:44.960
it's like, no, they should just stop.
link |
00:47:46.960
And we had, I kind of came back around to that
link |
00:47:49.960
a couple years ago where I was using the fictional example of,
link |
00:47:53.960
all right, some people say,
link |
00:47:55.960
they'll say with a straight face, they think,
link |
00:47:57.960
no, you are less productive
link |
00:47:59.960
if you work more than 40 hours a week.
link |
00:48:01.960
You're not really misinterpreting things
link |
00:48:03.960
where your marginal productivity for an hour after eight hours
link |
00:48:07.960
is less than in one of your peak hours,
link |
00:48:09.960
but you're not literally getting less done.
link |
00:48:11.960
There is a point where you start breaking things
link |
00:48:13.960
and getting worse behavior and everything out of it
link |
00:48:16.960
where you're literally going backwards,
link |
00:48:18.960
but it's not at eight or 10 or 12 hours.
link |
00:48:21.960
And the fictional example I would use was,
link |
00:48:23.960
imagine there's an asteroid coming to crash into Earth,
link |
00:48:28.960
destroy all of human life.
link |
00:48:30.960
Do you want Elon Musk or the people working at SpaceX
link |
00:48:33.960
that are building the interceptor
link |
00:48:35.960
that's going to deflect the asteroid?
link |
00:48:37.960
Do you want them to clock out at five
link |
00:48:39.960
because, damn it, they're just going to do worse work
link |
00:48:42.960
if they work another couple hours?
link |
00:48:44.960
And it seems absurd.
link |
00:48:46.960
And that's a hypothetical, though,
link |
00:48:48.960
and everyone can dismiss that,
link |
00:48:49.960
but then when coronavirus was hitting
link |
00:48:51.960
and you have all of these medical personnel
link |
00:48:54.960
that are clearly pushing themselves really, really hard,
link |
00:48:57.960
and I'd say it's like, okay, do you want all of these scientists
link |
00:49:01.960
working on treatments and vaccines
link |
00:49:03.960
and caring for all of these people?
link |
00:49:05.960
Are they really screwing everything up
link |
00:49:07.960
by working more than eight hours a day?
link |
00:49:09.960
And of course, people say I'm just an asshole
link |
00:49:11.960
to say something like that, but it's the truth.
link |
00:49:14.960
Working longer gets more done.
link |
00:49:17.960
So that's kind of the layer one,
link |
00:49:20.960
but I'd like to also say that,
link |
00:49:23.960
at least I believe, depending on the person,
link |
00:49:25.960
depending on the task,
link |
00:49:27.960
working more and harder
link |
00:49:30.960
will make you better for the next week
link |
00:49:35.960
in those peak hours.
link |
00:49:37.960
So there's something about a deep dedication to a thing
link |
00:49:41.960
that kind of gets deep in you.
link |
00:49:44.960
So the hard work isn't just about the raw hours of productivity.
link |
00:49:48.960
It's the thing it does to you
link |
00:49:53.960
in the weeks and months after, too.
link |
00:49:56.960
You're tempering yourself in some ways.
link |
00:49:58.960
And I think, you know, it's like the Girodreams of sushi.
link |
00:50:01.960
If you really dedicate yourself completely to making the sushi,
link |
00:50:04.960
like really putting in the long hours,
link |
00:50:07.960
day after day after day,
link |
00:50:09.960
you become a true craftsman of the thing you're doing.
link |
00:50:13.960
Now, there's, of course, discussions about
link |
00:50:15.960
are you sacrificing a lot of personal relationships,
link |
00:50:18.960
are you sacrificing a lot of other possible things
link |
00:50:21.960
to do with that time?
link |
00:50:23.960
But if you're talking about purely being a master
link |
00:50:27.960
or a craftsman of your art,
link |
00:50:30.960
that more hours isn't just about doing more.
link |
00:50:34.960
It's about becoming better at the thing you're doing.
link |
00:50:36.960
Yeah, and I don't gain say anybody that wants to work
link |
00:50:39.960
the minimum amount.
link |
00:50:41.960
They've got other priorities in their life.
link |
00:50:43.960
My only argument that I'm making,
link |
00:50:45.960
it's not that everybody should work hard.
link |
00:50:47.960
It's that if you want to accomplish something,
link |
00:50:49.960
if you want to be stronger and harder,
link |
00:50:51.960
is the path to getting it accomplished?
link |
00:50:53.960
Well, let me ask you about this then.
link |
00:50:55.960
The mythical work life balance.
link |
00:51:00.960
For an engineer, it seems like that's one of the professions
link |
00:51:05.960
for a programmer where working hard
link |
00:51:10.960
does lead to greater productivity in it.
link |
00:51:13.960
But it also raises the question of sort of personal relationships
link |
00:51:18.960
that kind of stop family.
link |
00:51:20.960
How are you able to find work life balance?
link |
00:51:23.960
Is there advice you can give maybe even outside yourself?
link |
00:51:26.960
Have you been able to arrive at any wisdom on this part
link |
00:51:30.960
in your years of life?
link |
00:51:32.960
I do think that there's a wide range of people
link |
00:51:34.960
where different people have different needs.
link |
00:51:36.960
It's not a one size fits all.
link |
00:51:38.960
I am certainly what works for me.
link |
00:51:40.960
I can tell enough that I'm different
link |
00:51:44.960
than a typical average person in the way things impact me.
link |
00:51:47.960
The things that I want to do, my goals are different
link |
00:51:50.960
and sort of the levers to impact things are different.
link |
00:51:54.960
I have literally never felt burnout
link |
00:51:58.960
and I know there's lots of brilliant smart people
link |
00:52:01.960
that do world leading work that get burned out
link |
00:52:04.960
and it's never hit me.
link |
00:52:06.960
I've never been at a point where I'm like,
link |
00:52:10.960
I just don't care about this.
link |
00:52:12.960
I don't want to do this anymore.
link |
00:52:14.960
I've always had the flexibility to work on lots of interesting things.
link |
00:52:18.960
I can always just turn my gaze to something else
link |
00:52:20.960
and have a great time working on that.
link |
00:52:23.960
So much of the ability to actually work hard
link |
00:52:26.960
is the ability to have multiple things to choose from
link |
00:52:29.960
and to use your time on the most appropriate thing.
link |
00:52:32.960
There are time periods where I am,
link |
00:52:35.960
it's the best time for me to read a new research paper
link |
00:52:37.960
that I need to really be thinking hard about it.
link |
00:52:40.960
Then there's a time that maybe I should just scan
link |
00:52:42.960
and organize my old notes because I'm just not on top of things.
link |
00:52:46.960
Then there's the time that, all right, let's go bang out
link |
00:52:49.960
a few hundred lines of code for something.
link |
00:52:51.960
So switching between them has been real valuable.
link |
00:52:56.960
So you always have kind of joined your heart
link |
00:52:58.960
for all the things you're doing
link |
00:53:00.960
and that is the kind of work life balance
link |
00:53:02.960
as a first sort of step.
link |
00:53:04.960
So you're always happy.
link |
00:53:06.960
Yeah, I mean, a lot of people would say
link |
00:53:09.960
that often I look like kind of a grim person
link |
00:53:11.960
with just sitting there with a neutral expression
link |
00:53:14.960
or even like knitted brows and a frown on my face
link |
00:53:16.960
as I'm staring at something.
link |
00:53:18.960
That's what happiness looks like for you.
link |
00:53:20.960
Yeah, it's kind of true.
link |
00:53:22.960
It's like, okay, I'm pushing through this.
link |
00:53:24.960
I'm making progress here.
link |
00:53:26.960
I know that doesn't work for everyone.
link |
00:53:29.960
I know it doesn't work for most people,
link |
00:53:31.960
but what I am always trying to do in those cases is
link |
00:53:34.960
I don't want to let somebody that might be a person like that
link |
00:53:38.960
be told by someone else that no, don't even try that out
link |
00:53:42.960
as an option where work life balance
link |
00:53:46.960
versus kind of your life's work
link |
00:53:48.960
where there's a small subset of the people
link |
00:53:51.960
that can be very happy being obsessive about things
link |
00:53:55.960
and obsession can often get things done
link |
00:53:58.960
that just practical, prudent, pedestrian work won't
link |
00:54:02.960
or at least won't for a very long time.
link |
00:54:05.960
There's legends of your nutritional intake
link |
00:54:09.960
in the early days.
link |
00:54:11.960
What can you say about being a programmer as a kind of athlete?
link |
00:54:17.960
So what was the nutrition that fueled it?
link |
00:54:20.960
I have never been that great on really paying attention to it
link |
00:54:25.960
where I'm good enough that I don't eat a lot.
link |
00:54:28.960
I've never been like a big, heavy guy,
link |
00:54:31.960
but it was interesting where one of the things
link |
00:54:33.960
that I can remember being an unhappy teenager
link |
00:54:35.960
not having enough money and one of the things
link |
00:54:38.960
that bothered me about not having enough money
link |
00:54:40.960
is I couldn't buy pizza whenever I wanted to.
link |
00:54:42.960
So I got rich and then I bought a whole lot of pizza.
link |
00:54:45.960
That was defining.
link |
00:54:47.960
That's what being rich felt like.
link |
00:54:49.960
There was a lot of little things.
link |
00:54:50.960
I could buy all the pizza and comic books and video games
link |
00:54:53.960
that I wanted to.
link |
00:54:55.960
It really didn't take that much,
link |
00:54:58.960
but the pizza was one of those things.
link |
00:55:00.960
It's absolutely true that for a long time
link |
00:55:02.960
it did software.
link |
00:55:03.960
I had a pizza delivered every single day.
link |
00:55:05.960
The delivery guy knew me by name.
link |
00:55:08.960
I didn't find out until years later
link |
00:55:10.960
that apparently I was such a good customer
link |
00:55:12.960
that they just never raised the price on me.
link |
00:55:14.960
I was using this six year old price for the pizzas
link |
00:55:17.960
that they were still kind of sending my way every day.
link |
00:55:20.960
So you were doing eating once a day?
link |
00:55:23.960
It would be spread out.
link |
00:55:25.960
You have a few pieces of pizza.
link |
00:55:27.960
You have some more later on
link |
00:55:28.960
and I'd maybe have something at home.
link |
00:55:30.960
One of the nice things at Facebook Meta
link |
00:55:33.960
is they feed you quite well.
link |
00:55:35.960
You get a different, I guess now it's door dash
link |
00:55:38.960
sorts of things delivered,
link |
00:55:39.960
but they take care of making sure
link |
00:55:41.960
that everybody does get well fed.
link |
00:55:43.960
I probably had better food those six years
link |
00:55:46.960
that I was working in the Meta office there
link |
00:55:48.960
than I used to before,
link |
00:55:50.960
but it's worked out okay for me.
link |
00:55:52.960
My health has always been good.
link |
00:55:54.960
I get a pretty good amount of exercise
link |
00:55:56.960
and I don't eat to excess
link |
00:55:58.960
and I avoid a lot of other kind of not so good for you things.
link |
00:56:02.960
So I'm still doing quite well at my age.
link |
00:56:04.960
Did you have a kind of, I don't know,
link |
00:56:08.960
spiritual experience with food or coffee
link |
00:56:12.960
or any of that kind of stuff?
link |
00:56:14.960
I mean, the programming experience with music
link |
00:56:17.960
or like I listen to brown noise on a program
link |
00:56:20.960
or like creating an environment
link |
00:56:22.960
and the things you take into your body,
link |
00:56:24.960
just everything you construct
link |
00:56:26.960
can become a kind of ritual
link |
00:56:28.960
that empowers the whole process of the program.
link |
00:56:31.960
Did you have that relationship with pizza or?
link |
00:56:33.960
It would really be with Diet Coke.
link |
00:56:35.960
There still is that sense of, you know,
link |
00:56:37.960
drop the can down, crack open the can of Diet Coke.
link |
00:56:39.960
All right, now I mean business.
link |
00:56:41.960
We're getting to work here.
link |
00:56:43.960
Still to this day?
link |
00:56:44.960
Yeah.
link |
00:56:45.960
Is Diet Coke a still partner?
link |
00:56:46.960
Yeah, probably eight or nine a day.
link |
00:56:48.960
Nice.
link |
00:56:49.960
Okay, what about your setup?
link |
00:56:51.960
How many screens, what kind of keyboard
link |
00:56:54.960
is there something interesting?
link |
00:56:56.960
What kind of IDE?
link |
00:56:58.960
Emax Vim or something modern?
link |
00:57:01.960
Linux, what operating system laptop
link |
00:57:03.960
or any interesting thing that brings you joy?
link |
00:57:06.960
So I kind of migrated cultures
link |
00:57:08.960
where early on through all of Game Dev,
link |
00:57:10.960
there was sort of one culture there
link |
00:57:12.960
which was really quite distinct from the more,
link |
00:57:14.960
the Silicon Valley venture, you know,
link |
00:57:17.960
culture for things.
link |
00:57:18.960
They're different groups
link |
00:57:19.960
and they have pretty different mores
link |
00:57:21.960
and the way they think about things where,
link |
00:57:23.960
and I still do think a lot of the big companies
link |
00:57:25.960
can learn things from the hardcore
link |
00:57:28.960
game development side of things
link |
00:57:30.960
where it still boggles my mind how hostile
link |
00:57:34.960
to debuggers and IDEs that so much of them,
link |
00:57:38.960
the kind of big money, get billions of dollars,
link |
00:57:40.960
Silicon Valley, venture backed funds are.
link |
00:57:43.960
Oh, that's interesting.
link |
00:57:44.960
Sorry, so you're saying like big companies
link |
00:57:47.960
at Google and Meta are hostile to?
link |
00:57:49.960
They are not big on debuggers and IDEs.
link |
00:57:52.960
So much of it is like Emacs BIM for things
link |
00:57:55.960
and we just assume that debuggers
link |
00:57:57.960
don't work most of the time for the systems
link |
00:58:00.960
and a lot of this comes from a sort of Linux bias
link |
00:58:03.960
on a lot of things where I did come up
link |
00:58:05.960
through the personal computers
link |
00:58:07.960
and then the DOS and then Windows
link |
00:58:10.960
and it was Borland Tools and then Visual Studio and.
link |
00:58:15.960
Do you appreciate the buggers?
link |
00:58:17.960
Very much so.
link |
00:58:18.960
I mean, a debugger is how you get a view
link |
00:58:20.960
into a system that's too complicated to understand.
link |
00:58:23.960
I mean, anybody that thinks just read the code
link |
00:58:25.960
and think about it, that's an insane statement.
link |
00:58:27.960
You can't even read all the code on a big system.
link |
00:58:30.960
You have to do experiments on the system
link |
00:58:33.960
and doing that by adding log statements,
link |
00:58:36.960
recompiling and rerunning it
link |
00:58:38.960
is an incredibly inefficient way of doing it.
link |
00:58:40.960
I mean, yes, you can always get things done
link |
00:58:42.960
even if you're working with stone knives
link |
00:58:44.960
and bare skins.
link |
00:58:46.960
That is the mark of a good programmer
link |
00:58:48.960
is that given any tools,
link |
00:58:50.960
you will figure out a way to get it done.
link |
00:58:52.960
But it's amazing what you can do
link |
00:58:54.960
with sometimes much, much better tools
link |
00:58:56.960
where instead of just going through
link |
00:58:58.960
this iterative compile run debug cycle,
link |
00:59:01.960
you have the old Lisp direction of like,
link |
00:59:04.960
you've got a REPL and you're working interactively
link |
00:59:06.960
and doing amazing things there.
link |
00:59:08.960
But in many cases, a debugger as a very powerful user interface
link |
00:59:11.960
that can stop, examine all the different things
link |
00:59:14.960
in your program, set all of these different breakpoints.
link |
00:59:16.960
And of course you can do that with GDP
link |
00:59:18.960
or whatever there.
link |
00:59:20.960
But this is one of the user interface
link |
00:59:22.960
fundamental principles where when something
link |
00:59:24.960
is complicated to do,
link |
00:59:26.960
you won't use it very often.
link |
00:59:28.960
There's people that will break out GDP
link |
00:59:30.960
when they're at their wits end
link |
00:59:32.960
and they just have beat their head against a problem
link |
00:59:34.960
for so long.
link |
00:59:36.960
But for somebody that kind of grew up in Game Dev,
link |
00:59:38.960
it's like they were running into the debugger anyways
link |
00:59:40.960
before they even knew there was a problem
link |
00:59:42.960
and you would just stop and see what was happening
link |
00:59:44.960
and sometimes you could fix things
link |
00:59:46.960
even before you did one compile cycle.
link |
00:59:50.960
You could be in the debugger and you could say,
link |
00:59:52.960
well, I'm just going to change this right here.
link |
00:59:54.960
And yep, that did the job and fix it and go on.
link |
00:59:56.960
And for people that don't know,
link |
00:59:58.960
GDP is a popular Linux debugger
link |
01:00:02.960
primarily for C++.
link |
01:00:04.960
They handle most of the languages,
link |
01:00:06.960
but it's based on C
link |
01:00:08.960
as the original Unix heritage.
link |
01:00:10.960
And it's kind of like command line.
link |
01:00:12.960
It doesn't allow for clean visualizations
link |
01:00:14.960
and you're exactly right.
link |
01:00:16.960
You're using this kind of debugger
link |
01:00:18.960
usually when you're at wits end
link |
01:00:20.960
and there's a problem that you can't figure out
link |
01:00:22.960
why by just looking at the codes if defined it.
link |
01:00:24.960
That's how I guess normal programmers use it.
link |
01:00:26.960
But you're saying there should be tools
link |
01:00:28.960
that kind of visualize
link |
01:00:30.960
and help you as part of the programming process.
link |
01:00:32.960
Just a normal programming process
link |
01:00:34.960
to understand the code deeper.
link |
01:00:36.960
Yeah, when I'm working on like my C++ code,
link |
01:00:38.960
I'm always running it from the debugger.
link |
01:00:42.960
You know, just I type in the code.
link |
01:00:44.960
I run it many times.
link |
01:00:46.960
The first thing I do after writing code
link |
01:00:48.960
is set a breakpoint and step through the function.
link |
01:00:50.960
Now other people will say it's like,
link |
01:00:52.960
oh, I do that in my head.
link |
01:00:54.960
Well, your head is a faulty interpreter
link |
01:00:56.960
of all those things there.
link |
01:00:58.960
And I've written brand new code.
link |
01:01:00.960
I want to step in there and I'm going to single step
link |
01:01:02.960
through that examine lots of things
link |
01:01:04.960
and see if it's actually doing what I expected it to.
link |
01:01:06.960
It is a kind of companion, the debugger.
link |
01:01:10.960
Like you're now coding in an interactive way
link |
01:01:12.960
with another being.
link |
01:01:14.960
The debugger is a kind of dumb being,
link |
01:01:16.960
but it's a reliable being.
link |
01:01:18.960
That is an interesting question
link |
01:01:20.960
of what role does AI play in that kind of,
link |
01:01:22.960
with Codex and these kind of
link |
01:01:24.960
ability to generate code.
link |
01:01:26.960
You might start having tools
link |
01:01:28.960
that understand the code
link |
01:01:30.960
in interesting deep ways
link |
01:01:32.960
that can work with you.
link |
01:01:34.960
There's a whole spectrum there
link |
01:01:36.960
from static code analyzers
link |
01:01:38.960
and various kind of dynamic tools
link |
01:01:40.960
there up to AI
link |
01:01:42.960
that can conceivably grok these programs
link |
01:01:44.960
that literally no human can understand.
link |
01:01:46.960
They're too big, too intertwined,
link |
01:01:48.960
and too interconnected,
link |
01:01:50.960
but it's not beyond the possibility
link |
01:01:52.960
of understanding.
link |
01:01:54.960
It's just beyond what we can hold in our heads
link |
01:01:56.960
as kind of mutable state
link |
01:01:58.960
while we're working on things.
link |
01:02:00.960
And I'm a big proponent again
link |
01:02:02.960
of things like static analyzers
link |
01:02:04.960
and some of that stuff where
link |
01:02:06.960
you'll find some people that don't like
link |
01:02:08.960
being scolded by a program
link |
01:02:10.960
for how they've written something where
link |
01:02:12.960
it's like, oh, I know better, and sometimes you do,
link |
01:02:14.960
but that was something that
link |
01:02:16.960
I was, it was very,
link |
01:02:18.960
very valuable for me when
link |
01:02:20.960
and not too many people get an opportunity
link |
01:02:22.960
like this to have. This is almost one of those spiritual
link |
01:02:24.960
experiences as a programmer and
link |
01:02:26.960
awakening to the
link |
01:02:28.960
software code bases were a couple million
link |
01:02:30.960
lines of code and
link |
01:02:32.960
at one point I had used a few of the
link |
01:02:34.960
different analysis tools, but
link |
01:02:36.960
I made a point to really
link |
01:02:38.960
go through and scrub the code base
link |
01:02:40.960
using every tool that I could find
link |
01:02:42.960
and it was eye opening where we had
link |
01:02:44.960
a reputation for having some of the
link |
01:02:46.960
most robust, strongest code,
link |
01:02:48.960
where there were some great things that
link |
01:02:50.960
I remember hearing from Microsoft
link |
01:02:52.960
telling us about crashes on Xbox
link |
01:02:54.960
and we had this tiny number that they said
link |
01:02:56.960
were probably literally hardware errors
link |
01:02:58.960
and then you have other significant
link |
01:03:00.960
titles that just have millions of
link |
01:03:02.960
faults that are getting recorded all the time,
link |
01:03:04.960
so I was proud of our code on a lot
link |
01:03:06.960
of levels, but when I took this
link |
01:03:08.960
code analysis squeegee through
link |
01:03:10.960
everything, it was
link |
01:03:12.960
it was shocking how many
link |
01:03:14.960
errors there were in there, things
link |
01:03:16.960
that you can say, okay, this was
link |
01:03:18.960
a copy paste, not changing something right
link |
01:03:20.960
here, lots of things that were
link |
01:03:22.960
the most common problem
link |
01:03:24.960
was something in a printf
link |
01:03:26.960
format string that was the wrong data
link |
01:03:28.960
type that could cause crashes there
link |
01:03:30.960
and you really want the warnings for
link |
01:03:32.960
things like that and the next most common
link |
01:03:34.960
was missing a check for null that could
link |
01:03:36.960
actually happen, that could blow things up
link |
01:03:38.960
and those are obviously like top C, C++
link |
01:03:40.960
things, everybody has those problems,
link |
01:03:42.960
but the long tail of
link |
01:03:44.960
all of the different little things that could go
link |
01:03:46.960
wrong there and we had good programmers
link |
01:03:48.960
and my own code stuff that I'd be looking
link |
01:03:50.960
at, it's like, oh, I wrote that code, that's
link |
01:03:52.960
definitely wrong, we've been using this
link |
01:03:54.960
for a year and
link |
01:03:56.960
it's this, you know, this
link |
01:03:58.960
mind sitting there waiting for us to step
link |
01:04:00.960
on and
link |
01:04:02.960
it was humbling, it was, and
link |
01:04:04.960
I reached the conclusion that
link |
01:04:06.960
anything that can be syntactically
link |
01:04:08.960
allowed in your language
link |
01:04:10.960
if it's going to show up
link |
01:04:12.960
eventually in a large enough code base
link |
01:04:14.960
you're not going to, good intentions
link |
01:04:16.960
aren't going to keep it from happening,
link |
01:04:18.960
you need automated tools and guard
link |
01:04:20.960
rails for things and those start with
link |
01:04:22.960
static types or even
link |
01:04:24.960
type hints in the more dynamic languages
link |
01:04:26.960
but the people that
link |
01:04:28.960
rebel against that, that basically
link |
01:04:30.960
say, that slows me down
link |
01:04:32.960
doing that, there's something to that, I get
link |
01:04:34.960
that, I've written, you know, I've cobbled
link |
01:04:36.960
things together in a notebook, I'm like
link |
01:04:38.960
wow, this is great that it just happened
link |
01:04:40.960
but yeah, that's kind of sketchy but it's working
link |
01:04:42.960
fine, I don't care, it does come back to
link |
01:04:44.960
that value analysis
link |
01:04:46.960
where sometimes it's right to not care
link |
01:04:48.960
but when you do care
link |
01:04:50.960
if it's going to be something that's going to
link |
01:04:52.960
live for years and it's going to have other people
link |
01:04:54.960
working on it and it's going to be
link |
01:04:56.960
deployed to millions of people
link |
01:04:58.960
then you want to use all of these tools
link |
01:05:00.960
you want to be told, it's like no, you've
link |
01:05:02.960
screwed up here, here, and here and that does
link |
01:05:04.960
require kind of an ego check about
link |
01:05:06.960
things where you have
link |
01:05:08.960
to be open to the fact
link |
01:05:10.960
that everything that you're doing is just littered
link |
01:05:12.960
with flaws, it's not that oh, you
link |
01:05:14.960
occasionally have a bad day, it's just
link |
01:05:16.960
whatever stream of code you output
link |
01:05:18.960
there's going to be a statistical
link |
01:05:20.960
regularity of things that you just make mistakes
link |
01:05:22.960
on and
link |
01:05:24.960
I do think there's a whole
link |
01:05:26.960
argument about test driven design
link |
01:05:28.960
and unit testing versus kind of
link |
01:05:30.960
analysis and different things
link |
01:05:32.960
I am more in favor of the
link |
01:05:34.960
analysis and the stuff that just like you can't run
link |
01:05:36.960
your program until you fix this rather
link |
01:05:38.960
than you can run it and hopefully
link |
01:05:40.960
a unit test will catch it in some way
link |
01:05:42.960
Yeah, in my private code
link |
01:05:44.960
I have asserts everywhere
link |
01:05:46.960
just there's something
link |
01:05:48.960
pleasant to me
link |
01:05:50.960
pleasurable to me about sort of the
link |
01:05:52.960
dictatorial rule of like
link |
01:05:54.960
this should be true at this point
link |
01:05:56.960
in too many times
link |
01:05:58.960
I've
link |
01:06:00.960
made mistakes
link |
01:06:02.960
that shouldn't have been made
link |
01:06:04.960
and I would assume
link |
01:06:06.960
I wouldn't be the kind of person that would make that mistake
link |
01:06:08.960
but I keep making that mistake therefore
link |
01:06:10.960
an assert really catches me
link |
01:06:12.960
really helps all the time
link |
01:06:14.960
so my
link |
01:06:16.960
I would say like 10 to 20% of my private code
link |
01:06:18.960
just for personal use is probably
link |
01:06:20.960
asserts. And they're active comments
link |
01:06:22.960
and it's one of those things that in theory
link |
01:06:24.960
they don't make any difference to the program
link |
01:06:26.960
and if it was all operating the way
link |
01:06:28.960
you expected it would be then
link |
01:06:30.960
they will never fire
link |
01:06:32.960
but even if you have it right
link |
01:06:34.960
and you wrote the code right initially
link |
01:06:36.960
then circumstances change
link |
01:06:38.960
the world outside your program changes
link |
01:06:40.960
and in fact that's one of the things
link |
01:06:42.960
where I'm kind of fond
link |
01:06:44.960
in a lot of cases of static array size
link |
01:06:46.960
declarations where
link |
01:06:48.960
I went through this period where it's like
link |
01:06:50.960
okay now we have general collection classes
link |
01:06:52.960
we should just make everything variable
link |
01:06:54.960
because I had this history of
link |
01:06:56.960
in the early days you get doom
link |
01:06:58.960
which had some fixed limits on it then
link |
01:07:00.960
everybody started making crazier and crazier
link |
01:07:02.960
things and they kept bumping up the different limits
link |
01:07:04.960
this many lines this many sectors
link |
01:07:06.960
and it seemed like
link |
01:07:08.960
a good idea well we should just make this completely
link |
01:07:10.960
you can go kind of go up to whatever
link |
01:07:12.960
and
link |
01:07:14.960
there's cases where that's the right thing to do
link |
01:07:16.960
but it also
link |
01:07:18.960
the other aspect of the world changing around you
link |
01:07:20.960
is it's good to be informed
link |
01:07:22.960
when the world has changed more than you thought it would
link |
01:07:24.960
and if you've got a continuously
link |
01:07:26.960
growing collection you're never going to find out
link |
01:07:28.960
you might have this quadratic
link |
01:07:30.960
slowdown on something where
link |
01:07:32.960
you thought oh I'm only ever going to have a handful
link |
01:07:34.960
of these but something changes
link |
01:07:36.960
and there's a new design style and all of a sudden
link |
01:07:38.960
you've got 10,000 of them
link |
01:07:40.960
so I kind of like in many cases
link |
01:07:42.960
picking a number
link |
01:07:44.960
some you know nice brown power of two
link |
01:07:46.960
number and setting it up in there
link |
01:07:48.960
and having an assert saying it's like hey you hit
link |
01:07:50.960
the you hit this limit you should probably
link |
01:07:52.960
think are the choices that you've made
link |
01:07:54.960
around all of this still relevant
link |
01:07:56.960
if somebody's using 10 times
link |
01:07:58.960
more than you thought they would
link |
01:08:00.960
yeah this code was originally written
link |
01:08:02.960
with this kind of world view
link |
01:08:04.960
with this kind of set of constraints
link |
01:08:06.960
thinking of the world in this way
link |
01:08:08.960
if something breaks that means
link |
01:08:10.960
you got to rethink the initial stuff
link |
01:08:12.960
and it's nice for it to
link |
01:08:14.960
for it to do that
link |
01:08:16.960
is there any stuff like keyboard
link |
01:08:18.960
or monitors
link |
01:08:20.960
I'm fairly pedestrian on
link |
01:08:22.960
a lot of that where I did move
link |
01:08:24.960
to triple monitors like in the last
link |
01:08:26.960
several years ago I had been dual monitor
link |
01:08:28.960
for a very long time and
link |
01:08:30.960
and it was one of those things where
link |
01:08:32.960
probably years later than
link |
01:08:34.960
I should have I'm just like well the video cards
link |
01:08:36.960
now generally have three output ports
link |
01:08:38.960
I should just put the third monitor up there
link |
01:08:40.960
that's been a pure win I've been very happy
link |
01:08:42.960
with that
link |
01:08:44.960
but no I don't have fancy keyboard
link |
01:08:46.960
or mouse or anything
link |
01:08:48.960
the key things is an IDE that has
link |
01:08:50.960
helpful debuggers
link |
01:08:52.960
has helpful tools so it's not
link |
01:08:54.960
the Emacs Vimrao and then Diet Coke
link |
01:08:56.960
yeah so I did spend
link |
01:08:58.960
one of my week long retreats
link |
01:09:00.960
where I'm like okay I'm going to make myself
link |
01:09:02.960
use
link |
01:09:04.960
it was actually classic VI which I know people will say
link |
01:09:06.960
you should never have done that you should have just used Vim
link |
01:09:08.960
directly but
link |
01:09:10.960
I gave it the good try it's like okay I'm being
link |
01:09:12.960
in kind of classic Unix developer
link |
01:09:14.960
mode here and
link |
01:09:16.960
I worked for a week on it
link |
01:09:18.960
I used Anki to like teach myself
link |
01:09:20.960
the different little key combinations
link |
01:09:22.960
for things like that and in the end it was just like
link |
01:09:24.960
alright this was kind of like
link |
01:09:26.960
my Civil War reenactment phase
link |
01:09:28.960
it's like I'm going out there doing it like they used to
link |
01:09:30.960
in the old days and it was kind of fun
link |
01:09:32.960
in that regard so many people right now
link |
01:09:34.960
they're screaming
link |
01:09:36.960
as they're listening to this
link |
01:09:38.960
so again the out is that this was not modern Vim
link |
01:09:40.960
but still
link |
01:09:42.960
yes I was very happy to get back to
link |
01:09:44.960
my visual studio at the end
link |
01:09:46.960
yeah I'm actually I struggle with this a lot
link |
01:09:48.960
because
link |
01:09:50.960
so you said Kinesis keyboard and
link |
01:09:52.960
I use Emacs primarily
link |
01:09:54.960
and I feel like
link |
01:09:56.960
I can exactly as you said
link |
01:09:58.960
I can understand the code I can navigate
link |
01:10:00.960
the code there's a lot of stuff you can build
link |
01:10:02.960
within Emacs with using Lisp
link |
01:10:04.960
you can customize a lot of things for yourself
link |
01:10:06.960
to help you
link |
01:10:08.960
introspect the code like to help you
link |
01:10:10.960
understand the code and visualize different aspects
link |
01:10:12.960
of the code you can even run debuggers
link |
01:10:14.960
but it's work
link |
01:10:16.960
and the world moves past you
link |
01:10:18.960
and the better and better ideas are constantly
link |
01:10:20.960
being built and that
link |
01:10:22.960
puts a kind of
link |
01:10:24.960
I need to take the same kind of
link |
01:10:26.960
treat as you're talking about but now
link |
01:10:28.960
I'm still fighting the Civil War
link |
01:10:30.960
I need to kind of move into the 21st century
link |
01:10:32.960
and it does seem like the world is
link |
01:10:34.960
or a large chunk of the world is moving
link |
01:10:36.960
towards visual studio code which is
link |
01:10:38.960
kind of interesting to me against the
link |
01:10:40.960
JavaScript ecosystem on the one hand
link |
01:10:42.960
and IDs are one of those
link |
01:10:44.960
things that you want to be infinitely
link |
01:10:46.960
fast you want them to just kind of
link |
01:10:48.960
immediately respond
link |
01:10:50.960
and like I mean heck I've got there's someone
link |
01:10:52.960
I know I'm an old school game dev guy
link |
01:10:54.960
that still uses visual studio 6
link |
01:10:56.960
and on a modern computer
link |
01:10:58.960
everything is just
link |
01:11:00.960
absolutely instant on something like that
link |
01:11:02.960
because it was made to work on a computer that's
link |
01:11:04.960
10,000 or 100,000
link |
01:11:06.960
times slower so just everything happens
link |
01:11:08.960
immediately and all the
link |
01:11:10.960
modern systems just feel
link |
01:11:12.960
you know they feel so crufty when
link |
01:11:14.960
it's like oh why is this refreshing the screen
link |
01:11:16.960
and moving around and updating over here
link |
01:11:18.960
and something blinks down there and you should
link |
01:11:20.960
update this and there's
link |
01:11:22.960
you know there are things that
link |
01:11:24.960
we've lost with that incredible flexibility
link |
01:11:26.960
but
link |
01:11:28.960
lots of people get tons of value from it
link |
01:11:30.960
and I am super happy that that seems
link |
01:11:32.960
to be winning over even a lot of the old
link |
01:11:34.960
Vim and Emacs people that they're kind of like
link |
01:11:36.960
hey visual studio codes maybe you know
link |
01:11:38.960
not so bad I am
link |
01:11:40.960
that may be the final peacekeeping solution
link |
01:11:42.960
where everybody is reasonably
link |
01:11:44.960
happy with something like that
link |
01:11:46.960
so can you explain what
link |
01:11:48.960
a.plan file is and
link |
01:11:50.960
what role that played in your life
link |
01:11:52.960
does it still continue to play a role
link |
01:11:54.960
back in the early early days
link |
01:11:56.960
of id software one of
link |
01:11:58.960
our big things that was unique with what we did
link |
01:12:00.960
is I had adopted
link |
01:12:02.960
next stations or kind of next step
link |
01:12:04.960
systems from I Steve Jobs
link |
01:12:06.960
is out in the
link |
01:12:08.960
out in the woods away from Apple company
link |
01:12:10.960
and
link |
01:12:12.960
they were basically it was kind of interesting
link |
01:12:14.960
because I did not really have a background
link |
01:12:16.960
with the Unix system so many of the people
link |
01:12:18.960
they get immersed in that
link |
01:12:20.960
in college and
link |
01:12:22.960
you know and that's you know that
link |
01:12:24.960
sets a lot of cultural expectations for them
link |
01:12:26.960
and I didn't have any of that
link |
01:12:28.960
but I knew that
link |
01:12:30.960
my background was I was a huge Apple
link |
01:12:32.960
to fanboy I was always
link |
01:12:34.960
a little suspicious of the Mac I was
link |
01:12:36.960
not really what I what kind
link |
01:12:38.960
of I wanted to go with
link |
01:12:40.960
but when Steve Jobs left
link |
01:12:42.960
Apple and started next this
link |
01:12:44.960
computer did just seem like one of those amazing things
link |
01:12:46.960
from the future where it had
link |
01:12:48.960
all of this cool stuff in it and we were
link |
01:12:50.960
still back in those days working on
link |
01:12:52.960
DOS everything blew up you had
link |
01:12:54.960
reset buttons because your computer would just freeze
link |
01:12:56.960
if you're doing development work literally
link |
01:12:58.960
dozens of times a day your computer was just rebooting
link |
01:13:00.960
constantly and so this
link |
01:13:02.960
idea of yes any of the
link |
01:13:04.960
the Unix work stations would have given
link |
01:13:06.960
a stable development platform where
link |
01:13:08.960
you don't crash and reboot all the
link |
01:13:10.960
time but next also had
link |
01:13:12.960
this really amazing graphical
link |
01:13:14.960
interface and it was great for building
link |
01:13:16.960
tools and it used
link |
01:13:18.960
Objective C as the kind of
link |
01:13:20.960
an interesting
link |
01:13:22.960
next was Unix based
link |
01:13:24.960
it's at Objective C so it has a lot of the
link |
01:13:26.960
elements that became Mac I mean
link |
01:13:28.960
the kind of reverse acquisition of Apple
link |
01:13:30.960
by next where that took over
link |
01:13:32.960
and became what what the modern Mac
link |
01:13:34.960
system and defined some of the developer
link |
01:13:36.960
like
link |
01:13:38.960
the tools and the whole community
link |
01:13:40.960
and you've still got if you're programming
link |
01:13:42.960
on Apple stuff now there's still all these
link |
01:13:44.960
NS somethings which was originally
link |
01:13:46.960
Next Step Objects of different kinds of things
link |
01:13:48.960
but one of the aspects
link |
01:13:50.960
of those Unix systems
link |
01:13:52.960
was they had this notion of
link |
01:13:54.960
a dot plan file where
link |
01:13:56.960
a dot file is an invisible
link |
01:13:58.960
file usually in your
link |
01:14:00.960
home directory or something and there was a trivial
link |
01:14:02.960
server running on most Unix systems
link |
01:14:04.960
at the time that
link |
01:14:06.960
when somebody ran a trivial
link |
01:14:08.960
little command called finger you could
link |
01:14:10.960
do a finger and then somebody's
link |
01:14:12.960
address it could be anywhere on the internet
link |
01:14:14.960
if you were connected correctly
link |
01:14:16.960
then all that server would do was
link |
01:14:18.960
read the dot plan file
link |
01:14:20.960
in that user's home directory and then just
link |
01:14:22.960
spit it out to you and originally
link |
01:14:24.960
the idea was that could be
link |
01:14:26.960
whether you're on vacation what your current
link |
01:14:28.960
project was it's supposed to be like the
link |
01:14:30.960
plan of what you're doing and people would
link |
01:14:32.960
use it for you know
link |
01:14:34.960
various purposes but all it did was
link |
01:14:36.960
dump that file over
link |
01:14:38.960
to the terminal of whoever issued
link |
01:14:40.960
the finger command
link |
01:14:42.960
and at one point
link |
01:14:44.960
I started just keeping a list
link |
01:14:46.960
of what I was doing in there
link |
01:14:48.960
which would be what I was working on in the day
link |
01:14:50.960
and I would have this little
link |
01:14:52.960
syntax I kind of got to myself about
link |
01:14:54.960
here's something that I'm working on
link |
01:14:56.960
I put a star when I finish it
link |
01:14:58.960
I could have a few other little bits of punctuation
link |
01:15:00.960
and at the time it
link |
01:15:02.960
started off as being just like my to do
link |
01:15:04.960
list and it would be these
link |
01:15:06.960
trivial obscure little things like
link |
01:15:08.960
I fixed something
link |
01:15:10.960
with collision detection code
link |
01:15:12.960
made fireball do something different
link |
01:15:14.960
and just little one liners that people that
link |
01:15:16.960
were following the games could kind of
link |
01:15:18.960
decipher but I did wind up
link |
01:15:20.960
starting to write
link |
01:15:22.960
much more in depth things I would have
link |
01:15:24.960
little notes of
link |
01:15:26.960
thoughts and insights and then I would
link |
01:15:28.960
eventually start having little essays I would
link |
01:15:30.960
sometimes dump into the dot plan files
link |
01:15:32.960
interspersed with the work logs of things
link |
01:15:34.960
that I was doing so in some
link |
01:15:36.960
ways it was like a super early proto
link |
01:15:38.960
blog where I was just kind
link |
01:15:40.960
of dumping out what I was working on but it
link |
01:15:42.960
was interesting enough that
link |
01:15:44.960
there were a lot of people
link |
01:15:46.960
that were interested in this
link |
01:15:48.960
so most of the people didn't have Unix workstation
link |
01:15:50.960
so there were the websites back in
link |
01:15:52.960
the day that would follow the doom and quake development
link |
01:15:54.960
that would
link |
01:15:56.960
basically make a little service that would go grab
link |
01:15:58.960
all the changes and then people could just get it with
link |
01:16:00.960
a web browser and there was a period
link |
01:16:02.960
where like all of the little
link |
01:16:04.960
kind of Dallas gaming diaspora
link |
01:16:06.960
of people that were at all in that
link |
01:16:08.960
orbit there were a couple dozen plan
link |
01:16:10.960
files going on which was
link |
01:16:12.960
and this was some years before
link |
01:16:14.960
blogging really became kind of a thing
link |
01:16:16.960
and it was kind of a
link |
01:16:18.960
a premonition of sort of the
link |
01:16:20.960
way things would go and there
link |
01:16:22.960
was it's all been collected
link |
01:16:24.960
it's available online in different places
link |
01:16:26.960
and it's kind of fun to go back and look through
link |
01:16:28.960
what I was thinking what
link |
01:16:30.960
I was doing in the different areas
link |
01:16:32.960
Have you had a chance to look back is there some interesting
link |
01:16:34.960
very low level specific
link |
01:16:36.960
to do items
link |
01:16:38.960
maybe things you've never completed all that kind
link |
01:16:40.960
of stuff and high level
link |
01:16:42.960
philosophical essay type of stuff
link |
01:16:44.960
that
link |
01:16:46.960
there's some good stuff on both where
link |
01:16:48.960
a lot of it was low level
link |
01:16:50.960
nitpicky details about game dev
link |
01:16:52.960
and
link |
01:16:54.960
I've learned enough things where there's no project
link |
01:16:56.960
that I worked on that I couldn't go back
link |
01:16:58.960
and do a better job on now
link |
01:17:00.960
I mean you just you learn things hopefully
link |
01:17:02.960
if you're doing it right you learn things as you get older
link |
01:17:04.960
and you should be able to do a better job
link |
01:17:06.960
at all of the early things and there's
link |
01:17:08.960
stuff in
link |
01:17:10.960
Wolfenstein Doomquake that's like oh clearly
link |
01:17:12.960
I could go back and do a better job
link |
01:17:14.960
at this whether it's something in the rendering engine
link |
01:17:16.960
side or how I implemented
link |
01:17:18.960
the monster behaviors
link |
01:17:20.960
or managed resources
link |
01:17:22.960
do you see the flaws in your thinking now
link |
01:17:24.960
looking back
link |
01:17:26.960
I mean sometimes I'll get the
link |
01:17:28.960
you know I'll look at it and say yeah I had a pretty
link |
01:17:30.960
clear view of I was doing good work
link |
01:17:32.960
there and I haven't
link |
01:17:34.960
really hit the point where
link |
01:17:36.960
there was another programmer Graham Divine
link |
01:17:38.960
who was he had worked at id and
link |
01:17:40.960
seventh guest and he made
link |
01:17:42.960
some comment one time where he said he looked back at some
link |
01:17:44.960
of his old notes he was like wow I
link |
01:17:46.960
was really smart back then
link |
01:17:48.960
and I don't hit
link |
01:17:50.960
that so much where I mean I look at it
link |
01:17:52.960
and I always know that yeah
link |
01:17:54.960
there's all the you know with aging you get
link |
01:17:56.960
certain changes in how you
link |
01:17:58.960
you're able to work problems but all of the
link |
01:18:00.960
problems that I've worked I
link |
01:18:02.960
I'm you know I'm sure that I could do
link |
01:18:04.960
a better job on all of them
link |
01:18:06.960
so you can still step right in if you could travel
link |
01:18:08.960
back in time and talk to that guy
link |
01:18:10.960
you would teach him a few things yeah absolutely
link |
01:18:12.960
it's awesome
link |
01:18:14.960
I'm what about the high level
link |
01:18:16.960
philosophical stuff is there some insights
link |
01:18:18.960
that stand out do you remember
link |
01:18:20.960
there's things that
link |
01:18:22.960
there's understanding about
link |
01:18:24.960
development and I
link |
01:18:26.960
you know in the industry and so on that
link |
01:18:28.960
were in a more primitive
link |
01:18:30.960
stage where
link |
01:18:32.960
I am I definitely learned
link |
01:18:34.960
a lot more in the later years
link |
01:18:36.960
about business and organization
link |
01:18:38.960
and team structure
link |
01:18:40.960
there were
link |
01:18:42.960
I mean there were definitely things that I was
link |
01:18:44.960
not the best person
link |
01:18:46.960
or even a very good person about managing
link |
01:18:48.960
like how a team should
link |
01:18:50.960
internally how people should work together
link |
01:18:52.960
I was just I
link |
01:18:54.960
you know I just
link |
01:18:56.960
get out of my way and let me work on the code
link |
01:18:58.960
and do this and more and more
link |
01:19:00.960
I've learned how
link |
01:19:02.960
in the larger scheme of things
link |
01:19:04.960
how but sometimes relatively
link |
01:19:06.960
unimportant some of those things are where it is
link |
01:19:08.960
this user value generation
link |
01:19:10.960
that's the the overarching
link |
01:19:12.960
importance for all of that and I
link |
01:19:14.960
I didn't necessarily have my eye on that
link |
01:19:16.960
ball correctly through a lot of my
link |
01:19:18.960
you know my earlier years
link |
01:19:20.960
and there's things that
link |
01:19:22.960
you know I could have I could have gotten more
link |
01:19:24.960
out of people handling things in different ways
link |
01:19:26.960
I am you know I could have made
link |
01:19:28.960
you know in some ways more
link |
01:19:30.960
successful products by following things
link |
01:19:32.960
in different ways there's mistakes that we
link |
01:19:34.960
made that we couldn't really have
link |
01:19:36.960
known how things would have worked out but
link |
01:19:38.960
it was interesting to see in later years companies
link |
01:19:40.960
like Activision showing that hey you really
link |
01:19:42.960
can just do the same game
link |
01:19:44.960
make it better every year and you can
link |
01:19:46.960
look at that from a negative standpoint
link |
01:19:48.960
and say it's like oh that's just being derivative
link |
01:19:50.960
and all that but if you step back again
link |
01:19:52.960
and say it's like no are the people buying it
link |
01:19:54.960
still enjoying it are they enjoying it more
link |
01:19:56.960
than what they might have bought otherwise
link |
01:19:58.960
and you can say no that's that's actually
link |
01:20:00.960
a great value creation
link |
01:20:02.960
engine to do that if you're in a position
link |
01:20:04.960
where you can I you know
link |
01:20:06.960
don't be forced into reinventing
link |
01:20:08.960
everything just because you think that you need
link |
01:20:10.960
to I am
link |
01:20:12.960
you know lots of things about
link |
01:20:14.960
business and team stuff that could be done
link |
01:20:16.960
better but the technical work the kind
link |
01:20:18.960
of technical visionary type stuff
link |
01:20:20.960
that I laid out I still
link |
01:20:22.960
feel pretty good about there are some
link |
01:20:24.960
classic old ones about my defending
link |
01:20:26.960
of OpenGL versus D3D
link |
01:20:28.960
which turned out
link |
01:20:30.960
to be one of the more probably
link |
01:20:32.960
important momentous things there where
link |
01:20:34.960
it never it was always
link |
01:20:36.960
a rearguard action on Windows
link |
01:20:38.960
where Microsoft was just not going
link |
01:20:40.960
to let that win but when I look
link |
01:20:42.960
back on it now
link |
01:20:44.960
that fight to keep OpenGL relevant
link |
01:20:46.960
for a number of years there
link |
01:20:48.960
meant that OpenGL was there
link |
01:20:50.960
when mobile started happening
link |
01:20:52.960
and OpenGL ES was the thing that
link |
01:20:54.960
drove all of the acceleration
link |
01:20:56.960
of the mobile industry
link |
01:20:58.960
and it's really only in the last few years
link |
01:21:00.960
as Apple's moved to metal and some
link |
01:21:02.960
of the other companies have moved to Vulcan
link |
01:21:04.960
that that's moved away
link |
01:21:06.960
but really stepping back
link |
01:21:08.960
and looking at it's like yeah I sold
link |
01:21:10.960
millions of games for different things
link |
01:21:12.960
but billions
link |
01:21:14.960
and billions of devices wound
link |
01:21:16.960
up with an appropriate
link |
01:21:18.960
capable graphics API
link |
01:21:20.960
do in no small part
link |
01:21:22.960
to me thinking that that was really important
link |
01:21:24.960
that we not just
link |
01:21:26.960
give up and use Microsoft's
link |
01:21:28.960
at that
link |
01:21:30.960
time really terrible API
link |
01:21:32.960
the thing about Microsoft is the APIs don't stay
link |
01:21:34.960
terrible they were terrible at the start
link |
01:21:36.960
but a few versions on
link |
01:21:38.960
they were actually quite good and there was a completely
link |
01:21:40.960
fair argument to be made that
link |
01:21:42.960
by the time DX9 was out
link |
01:21:44.960
it was probably a better programming environment
link |
01:21:46.960
than OpenGL but it was still
link |
01:21:48.960
a wonderful good thing
link |
01:21:50.960
that we had an open standard that could
link |
01:21:52.960
show up on Linux and Android
link |
01:21:54.960
iOS and eventually WebGL
link |
01:21:56.960
still to this day so
link |
01:21:58.960
that was one
link |
01:22:00.960
that would be on my greatest hits list of things
link |
01:22:02.960
that I kind of pushed with. In terms of impact it had
link |
01:22:04.960
on billions of devices yes
link |
01:22:06.960
so let's talk about it
link |
01:22:08.960
can you tell the origin story of id software
link |
01:22:10.960
again
link |
01:22:12.960
one of the greatest game developer
link |
01:22:14.960
companies ever it created
link |
01:22:16.960
Wolfstein 3D games that
link |
01:22:18.960
define my life also
link |
01:22:20.960
in many ways as a thing
link |
01:22:22.960
that made me realize what computers are capable of
link |
01:22:24.960
in terms of graphics in terms of
link |
01:22:26.960
performance it just
link |
01:22:28.960
unlocked something deep
link |
01:22:30.960
in me in understanding
link |
01:22:32.960
what these machines are all about as games can do that
link |
01:22:34.960
so Wolfstein 3D, Doom, Quake
link |
01:22:36.960
and just all the
link |
01:22:38.960
incredible engineering innovation that went into that
link |
01:22:40.960
so how did it all
link |
01:22:42.960
start? So I'll caveat up
link |
01:22:44.960
front that I usually don't
link |
01:22:46.960
consider myself the historian
link |
01:22:48.960
of the software side of things
link |
01:22:50.960
I usually do
link |
01:22:52.960
kind of point people at John Romero
link |
01:22:54.960
for stories about the early days
link |
01:22:56.960
where
link |
01:22:58.960
I've never been like I've commented
link |
01:23:00.960
that I'm a remarkably unsentimental person
link |
01:23:02.960
in some ways where I don't really
link |
01:23:04.960
spend a lot of time unless I'm explicitly
link |
01:23:06.960
prodded to go back and think about
link |
01:23:08.960
the early days of things and
link |
01:23:10.960
I didn't
link |
01:23:12.960
necessarily make the effort to
link |
01:23:14.960
archive everything exactly in my brain
link |
01:23:16.960
and the more that I work on machine learning
link |
01:23:18.960
and AI and the aspects of memory
link |
01:23:20.960
and how when you go back and polish certain
link |
01:23:22.960
things it's not necessarily exactly
link |
01:23:24.960
the way it happened but
link |
01:23:26.960
having said all of that from
link |
01:23:28.960
my view the way everything
link |
01:23:30.960
happened that led up to that was
link |
01:23:32.960
after I was
link |
01:23:34.960
an adult kind of taking
link |
01:23:36.960
a few college classes deciding to drop
link |
01:23:38.960
out I was doing
link |
01:23:40.960
I was hard scrabble contract
link |
01:23:42.960
programming work really struggling to
link |
01:23:44.960
kind of keep groceries and pay my rent
link |
01:23:46.960
and things and the company
link |
01:23:48.960
that I was doing the most work for was
link |
01:23:50.960
a company called Soft Disk Publishing
link |
01:23:52.960
which had the
link |
01:23:54.960
Sounds Bizarre Now business model
link |
01:23:56.960
of monthly subscription software
link |
01:23:58.960
you know before there was an internet
link |
01:24:00.960
that people could connect to and get software
link |
01:24:02.960
you would pay
link |
01:24:04.960
a certain amount and every month they would send
link |
01:24:06.960
you a disk that had some random software
link |
01:24:08.960
on it and people that were into
link |
01:24:10.960
computers thought this was kind of cool and they had
link |
01:24:12.960
different ones for the Apple 2
link |
01:24:14.960
the 2GS the PC the Mac
link |
01:24:16.960
the Amiga
link |
01:24:18.960
lots of different things here so quirky little
link |
01:24:20.960
business but I was doing a lot
link |
01:24:22.960
of contract programming for them where I'd
link |
01:24:24.960
write tiny little games and sell them
link |
01:24:26.960
for $300
link |
01:24:28.960
$500 and one of the things
link |
01:24:30.960
that I was doing again to keep
link |
01:24:32.960
my head above water here was
link |
01:24:34.960
I decided that I could make
link |
01:24:36.960
one program and I could
link |
01:24:38.960
port it to multiple systems
link |
01:24:40.960
so I would write a game like
link |
01:24:42.960
dark designs or catacombs and
link |
01:24:44.960
I would develop it on the Apple 2
link |
01:24:46.960
the 2GS and the IBM PC
link |
01:24:48.960
which apparently
link |
01:24:50.960
was the thing that really kind
link |
01:24:52.960
of piqued the attention of the
link |
01:24:54.960
people working down there like Jay Wilbur
link |
01:24:56.960
was my primary editor and Tom Hall
link |
01:24:58.960
was a secondary editor
link |
01:25:00.960
and they kept asking me it's like hey
link |
01:25:02.960
you should come down and work for us here
link |
01:25:04.960
and I
link |
01:25:06.960
pushed it off a couple times because I was
link |
01:25:08.960
really enjoying my freedom of kind of being
link |
01:25:10.960
off on my own even if I was barely
link |
01:25:12.960
getting by I loved it I was
link |
01:25:14.960
doing nothing but programming all day
link |
01:25:16.960
but I did have enough
link |
01:25:18.960
close scrapes with like damn I'm just
link |
01:25:20.960
really out of money that maybe I should
link |
01:25:22.960
get an actual job
link |
01:25:24.960
rather than contracting these kind of one at
link |
01:25:26.960
a time things and Jay Wilbur
link |
01:25:28.960
was great he was like fedexing me the checks
link |
01:25:30.960
when I would need them to kind
link |
01:25:32.960
of get over whatever hump I was at
link |
01:25:34.960
so I took the
link |
01:25:36.960
I finally took them up on their offer to come
link |
01:25:38.960
down to Shreveport, Louisiana
link |
01:25:40.960
I was in Kansas City at the time
link |
01:25:42.960
drove down
link |
01:25:44.960
to through the Ozarks and everything
link |
01:25:46.960
down to Louisiana
link |
01:25:48.960
and saw the soft disk
link |
01:25:50.960
offices went through talked to a bunch of
link |
01:25:52.960
people met the people I had been working
link |
01:25:54.960
with remotely at that time
link |
01:25:56.960
but the most important thing for me
link |
01:25:58.960
was I met two programmers
link |
01:26:00.960
there John Romero and Lane Roth
link |
01:26:02.960
that for the first time ever I had met
link |
01:26:04.960
programmers that knew more
link |
01:26:06.960
cool stuff than I did where
link |
01:26:08.960
the world was just different back then I
link |
01:26:10.960
was in Kansas City it was one of those
link |
01:26:12.960
smartest kid in the school does all the
link |
01:26:14.960
computer stuff the teachers don't have anything
link |
01:26:16.960
to teach him but all I had to learn
link |
01:26:18.960
from was these few books at the library
link |
01:26:20.960
it was not much at all
link |
01:26:22.960
and there were some aspects of programming
link |
01:26:24.960
that were kind of black magic to me
link |
01:26:26.960
like it's like oh he knows how to format
link |
01:26:28.960
a track on I am you know on a
link |
01:26:30.960
low level drive programming
link |
01:26:32.960
interface and this
link |
01:26:34.960
was I was still not at all
link |
01:26:36.960
sure I was going to take the job but I met
link |
01:26:38.960
these awesome programmers that
link |
01:26:40.960
were doing cool stuff and my Romero had
link |
01:26:42.960
worked at Origin Systems and he had done
link |
01:26:44.960
like you know so many different games
link |
01:26:46.960
ahead of time
link |
01:26:48.960
that I did kind of quickly decide like
link |
01:26:50.960
yeah I'll go take the job down there
link |
01:26:52.960
and I
link |
01:26:54.960
settled down there moved in
link |
01:26:56.960
and started working on more little
link |
01:26:58.960
projects and the first kind
link |
01:27:00.960
of big change that happened down there
link |
01:27:02.960
was the company wanted to make a gaming
link |
01:27:04.960
focused a PC gaming focused
link |
01:27:06.960
subscription just like all their
link |
01:27:08.960
other was the same formula that they used for
link |
01:27:10.960
everything pay a monthly
link |
01:27:12.960
fee and you'll get a disc with
link |
01:27:14.960
one or two games just every month
link |
01:27:16.960
and no choice in what you get but we think
link |
01:27:18.960
it'll be fun and that was the model
link |
01:27:20.960
they were comfortable with and said all right
link |
01:27:22.960
we're going to start this gamers edge department
link |
01:27:24.960
and all of us that were
link |
01:27:26.960
interested in that like me Romero
link |
01:27:28.960
I Tom Hall was kind of
link |
01:27:30.960
helping us from from his side of things
link |
01:27:32.960
Jay would peak in and we had a few other
link |
01:27:34.960
programmers
link |
01:27:36.960
working with us at the time and we were
link |
01:27:38.960
going to to just start making games
link |
01:27:40.960
just the same model
link |
01:27:42.960
and we dived in and it was fantastic
link |
01:27:44.960
you have to make new games
link |
01:27:46.960
every month every month
link |
01:27:48.960
yeah and this in
link |
01:27:50.960
retrospect looking back at it that sense
link |
01:27:52.960
that I had done all this contract programming
link |
01:27:54.960
and John Romero had done
link |
01:27:56.960
like far more of this where he had done one
link |
01:27:58.960
of his teaching himself efforts was he
link |
01:28:00.960
made a game for every letter of the alphabet
link |
01:28:02.960
that sense of like I'm just going to go make
link |
01:28:04.960
26 different games give him a different
link |
01:28:06.960
theme and you learn
link |
01:28:08.960
so much when you go through and you
link |
01:28:10.960
crank these things out like on a
link |
01:28:12.960
bi weekly monthly basis something
link |
01:28:14.960
to finish it's not like an I just
link |
01:28:16.960
an idea it's not just
link |
01:28:18.960
from from the very beginning to the very end
link |
01:28:20.960
it's done
link |
01:28:22.960
it has to be done there's no delaying
link |
01:28:24.960
it's done and you've got deadlines
link |
01:28:26.960
and that kind of
link |
01:28:28.960
rapid iteration pressure cooker
link |
01:28:30.960
environment was super important
link |
01:28:32.960
for all of us developing the skills
link |
01:28:34.960
that I you know that brought us
link |
01:28:36.960
to where we eventually went to I mean
link |
01:28:38.960
we would say like like in the history of the
link |
01:28:40.960
Beatles like it wasn't them being the Beatles
link |
01:28:42.960
it was them playing all of these other
link |
01:28:44.960
I am you know early works that that
link |
01:28:46.960
opportunity to craft all of their skills
link |
01:28:48.960
before they were famous that was
link |
01:28:50.960
very critical to their later successes
link |
01:28:52.960
and I think there's a lot of that here
link |
01:28:54.960
where we did these games that
link |
01:28:56.960
nobody remembers lots
link |
01:28:58.960
of little things that contributed
link |
01:29:00.960
to building up the skill set for the things
link |
01:29:02.960
that eventually did make us famous
link |
01:29:04.960
and just to ask you wrote the
link |
01:29:06.960
gambler I had to
link |
01:29:08.960
write it in a month just
link |
01:29:10.960
make money and nobody
link |
01:29:12.960
remembers that probably because he had to
link |
01:29:14.960
figure out because it's literally
link |
01:29:16.960
he he didn't have enough
link |
01:29:18.960
time to write it fast enough
link |
01:29:20.960
said to come up with hacks
link |
01:29:22.960
literally comes down to that
link |
01:29:24.960
point where pressure and limitation of
link |
01:29:26.960
resources is surprisingly
link |
01:29:28.960
important and it's
link |
01:29:30.960
counterintuitive in a lot of ways where you just
link |
01:29:32.960
think that if you've got all the time in the world
link |
01:29:34.960
and you've got all the resources in the world
link |
01:29:36.960
of course you're going to get something better
link |
01:29:38.960
but sometimes it really does work out that
link |
01:29:40.960
the you know I
link |
01:29:42.960
innovations mother necessity and you know
link |
01:29:44.960
where you can resource constraints and you
link |
01:29:46.960
have to do things when you don't have a choice
link |
01:29:48.960
it's surprising what you can do
link |
01:29:50.960
is there any good games written in that time
link |
01:29:52.960
would you say some of them are still fun to
link |
01:29:54.960
go back and play where
link |
01:29:56.960
you get the
link |
01:29:58.960
they were they were all about kind of the more
link |
01:30:00.960
modern term is game feel about how
link |
01:30:02.960
exact feel that things it's not the grand
link |
01:30:04.960
strategy of the design but how
link |
01:30:06.960
running and jumping and shooting and those
link |
01:30:08.960
things I feel in the
link |
01:30:10.960
in the moment and some of those are still
link |
01:30:12.960
you if you sat down on them you kind of go
link |
01:30:14.960
it's a little bit different it doesn't have the same
link |
01:30:16.960
movement feel but you move over and you're
link |
01:30:18.960
like bang jump bang it's like
link |
01:30:20.960
hey that's kind of cool still
link |
01:30:22.960
so you can get lost in the rhythm of the
link |
01:30:24.960
game like that is that what you mean by feel
link |
01:30:26.960
just like
link |
01:30:28.960
there's something about it that pulls you in
link |
01:30:30.960
nowadays again people talk about
link |
01:30:32.960
compulsion loops and things where it's that
link |
01:30:34.960
I am that sense of exactly
link |
01:30:36.960
what you're doing what your fingers are doing on
link |
01:30:38.960
the keyboard what your eyes are seeing
link |
01:30:40.960
and they're going to be the sequences of things
link |
01:30:42.960
grab the loot shoot the monster jump over
link |
01:30:44.960
the opposite will get to the end of the level
link |
01:30:46.960
these are eternal aspects of game design
link |
01:30:48.960
in a lot of ways but
link |
01:30:50.960
there are better and worse ways to do all of
link |
01:30:52.960
them and we did so many of these
link |
01:30:54.960
games that it was I we got
link |
01:30:56.960
a lot of practice with it
link |
01:30:58.960
so one of the kind of weird things
link |
01:31:00.960
that was happening at this time is
link |
01:31:02.960
John Romero was getting some
link |
01:31:04.960
some strange fan mail
link |
01:31:06.960
and back in the days this was before email
link |
01:31:08.960
so we literally got letters sometimes
link |
01:31:10.960
and telling him it's like oh I
link |
01:31:12.960
want to talk to you about your games I want to
link |
01:31:14.960
reach out different things
link |
01:31:16.960
and eventually
link |
01:31:18.960
it turned out that these were all coming
link |
01:31:20.960
from Scott Miller at Apigee Software
link |
01:31:22.960
and
link |
01:31:24.960
he was reaching out through he didn't think
link |
01:31:26.960
he could contact John directly that he would
link |
01:31:28.960
get intercepted so he was trying to get
link |
01:31:30.960
him to contact him through like
link |
01:31:32.960
back channel fan mail because he basically
link |
01:31:34.960
was saying hey I'm making all this money
link |
01:31:36.960
on shareware games
link |
01:31:38.960
I want you to make shareware games
link |
01:31:40.960
because he had seen some of the games
link |
01:31:42.960
that Romero had done
link |
01:31:44.960
and you know we looked at
link |
01:31:46.960
Scott Miller's games and we didn't think
link |
01:31:48.960
they were very good I am we're like
link |
01:31:50.960
that can't be making the kind
link |
01:31:52.960
of money that he's saying he's making 10 grand
link |
01:31:54.960
thing I am off of this game
link |
01:31:56.960
and we really thought that he was full
link |
01:31:58.960
of shit that it was a lie trying to
link |
01:32:00.960
get to get him into this
link |
01:32:02.960
but so that was kind of going on at
link |
01:32:04.960
I am you know at one level
link |
01:32:06.960
he was and it was funny the moment
link |
01:32:08.960
when Romero realized that he had some
link |
01:32:10.960
of these letters pinned up on his wall like all of
link |
01:32:12.960
his fans and then we noticed that they all had the same
link |
01:32:14.960
return address with different names on them
link |
01:32:16.960
which was a little bit of a two inch sort
link |
01:32:18.960
there trying to
link |
01:32:20.960
figure out the puzzle laid out before
link |
01:32:22.960
him yeah what happened after I kind of
link |
01:32:24.960
coincident with that was
link |
01:32:26.960
I was working on a lot of the new
link |
01:32:28.960
technologies where
link |
01:32:30.960
I was now full on the IBM PC
link |
01:32:32.960
for the first time where I was really
link |
01:32:34.960
a long hold out on Apple 2 forever
link |
01:32:36.960
and I you know I loved my Apple 2
link |
01:32:38.960
it was the computer I was wished I had when I was
link |
01:32:40.960
growing up and when I finally did have one
link |
01:32:42.960
I was I was kind of clinging on
link |
01:32:44.960
to that well past it's sort of good use
link |
01:32:46.960
by the best computer ever made you would you say
link |
01:32:48.960
um I wouldn't
link |
01:32:50.960
make judgments like that about it but it
link |
01:32:52.960
was positioned in such a way especially
link |
01:32:54.960
in the school systems that it impacted
link |
01:32:56.960
a whole lot of American
link |
01:32:58.960
programmers at least where
link |
01:33:00.960
there was programs that the Apple 2's got
link |
01:33:02.960
into the schools and they had enough
link |
01:33:04.960
capability that lots of interesting things
link |
01:33:06.960
happened with them you know in Europe
link |
01:33:08.960
it was different you had your Amiga's and
link |
01:33:10.960
Atari's and you know I'm acorns
link |
01:33:12.960
in the UK and things that
link |
01:33:14.960
that had different things but in the United States
link |
01:33:16.960
it was probably the Apple 2 made the most
link |
01:33:18.960
impact for a lot
link |
01:33:20.960
of programmers of my generation
link |
01:33:22.960
but so I was really digging
link |
01:33:24.960
into the IBM and this was
link |
01:33:26.960
even more so with the total
link |
01:33:28.960
focus because I had moved to another city
link |
01:33:30.960
where I didn't know anybody that I wasn't working
link |
01:33:32.960
with I had a little apartment
link |
01:33:34.960
and then at Softisk again the
link |
01:33:36.960
things that that drew me to it I had
link |
01:33:38.960
a couple programmers that knew more than
link |
01:33:40.960
I did and they had a
link |
01:33:42.960
library they had a set of books
link |
01:33:44.960
and a set of magazines they had a couple years
link |
01:33:46.960
ago they had a set of magazines the old
link |
01:33:48.960
Dr. Dobbs Journal and all of these
link |
01:33:50.960
magazines that had information
link |
01:33:52.960
about things and so
link |
01:33:54.960
I was just in total immersion
link |
01:33:56.960
mode it was Eat, Breathe, Sleep
link |
01:33:58.960
computer programming particularly the IBM
link |
01:34:00.960
for everything that I was
link |
01:34:02.960
doing and I was digging into
link |
01:34:04.960
a lot of these low level hardware details
link |
01:34:06.960
that people weren't usually paying
link |
01:34:08.960
attention to the way the IBM
link |
01:34:10.960
EGA cards worked
link |
01:34:12.960
which was fun for me I hadn't
link |
01:34:14.960
experienced with things at that level
link |
01:34:16.960
and back then you could get
link |
01:34:18.960
hardware documentation just down at the register
link |
01:34:20.960
levels this is where the CRTC
link |
01:34:22.960
register is this is how the
link |
01:34:24.960
color registers work and how the different things
link |
01:34:26.960
are applied and they were designed
link |
01:34:28.960
for a certain reason they were designed
link |
01:34:30.960
for an application they had
link |
01:34:32.960
an intended use in mind but
link |
01:34:34.960
I was starting to look at other
link |
01:34:36.960
ways that they could perhaps be exploited
link |
01:34:38.960
that they weren't initially intended for
link |
01:34:40.960
because you comment on like
link |
01:34:42.960
how the operating system was there
link |
01:34:44.960
what instructions said
link |
01:34:46.960
what are we talking about?
link |
01:34:48.960
So this was DOS and X86
link |
01:34:50.960
so 16 bit 8086
link |
01:34:52.960
the two 86's were there and
link |
01:34:54.960
three 86's existed they were rare
link |
01:34:56.960
we had a couple for our development systems
link |
01:34:58.960
but we were still targeting
link |
01:35:00.960
the more broad I
link |
01:35:02.960
it was all DOS 16 bit
link |
01:35:04.960
none of this was kind of DOS extenders
link |
01:35:06.960
and things. How different is it from the systems
link |
01:35:08.960
of today's it's kind of a precursor
link |
01:35:10.960
that's similar? Very little
link |
01:35:12.960
if you open up command.exe
link |
01:35:14.960
on or com on
link |
01:35:16.960
windows you see some of the remnants
link |
01:35:18.960
of all of that but it was a different world
link |
01:35:20.960
it was the 640k is enough
link |
01:35:22.960
world and nothing was
link |
01:35:24.960
protected it crashed all the time you had
link |
01:35:26.960
TSR's or terminate and stay
link |
01:35:28.960
resident hacks on top of things
link |
01:35:30.960
that would cause configuration problems
link |
01:35:32.960
all the hardware was manually
link |
01:35:34.960
configured in your auto exec
link |
01:35:36.960
so it was a very different world
link |
01:35:38.960
but the code is still the same similar
link |
01:35:40.960
you would still write
link |
01:35:42.960
my earliest code there was written in Pascal
link |
01:35:44.960
that was what I had learned
link |
01:35:46.960
between basic
link |
01:35:48.960
and C++ there's Pascal
link |
01:35:50.960
so when basic assembly language
link |
01:35:52.960
some of my intermediate
link |
01:35:54.960
stuff was well you had to for performance
link |
01:35:56.960
basic was just too slow so
link |
01:35:58.960
most of the work that I was doing as a contract
link |
01:36:00.960
programmer in my teenage years
link |
01:36:02.960
was assembly language
link |
01:36:04.960
you wrote games in assembly?
link |
01:36:06.960
yeah complete games
link |
01:36:08.960
in assembly language
link |
01:36:10.960
and it's thousands and thousands of lines
link |
01:36:12.960
of three letter acronyms for the
link |
01:36:14.960
instructions
link |
01:36:16.960
you don't earn the once again
link |
01:36:18.960
greatest programmer ever labeled
link |
01:36:20.960
without being able to write a game in assembly
link |
01:36:22.960
that's again everybody wrote there
link |
01:36:24.960
everybody serious wrote their games in assembly language
link |
01:36:26.960
it was kind of a
link |
01:36:28.960
everybody serious
link |
01:36:30.960
it was an outlier to use
link |
01:36:32.960
Pascal a little bit where there was one
link |
01:36:34.960
famous program called wizardry
link |
01:36:36.960
it was one of the great early role playing games
link |
01:36:38.960
that was written in Pascal
link |
01:36:40.960
but it was almost nothing used
link |
01:36:42.960
Pascal there but I did learn Pascal
link |
01:36:44.960
and I remember doing all of my
link |
01:36:46.960
like to this day I sketch in data structures
link |
01:36:48.960
when I'm thinking about something
link |
01:36:50.960
I'll open up a file
link |
01:36:52.960
and I'll start writing struct definitions
link |
01:36:54.960
for how data is going to be laid out
link |
01:36:56.960
and Pascal was kind of formative to that
link |
01:36:58.960
because I remember designing my rpgs
link |
01:37:00.960
in Pascal record structures
link |
01:37:02.960
and things like that and so I had
link |
01:37:04.960
I've gotten a Pascal compiler
link |
01:37:06.960
for the Apple 2GS that I could work on
link |
01:37:08.960
in the first IBM game that I developed
link |
01:37:10.960
I did in Pascal and
link |
01:37:12.960
and that's actually kind of an interesting story
link |
01:37:14.960
again talking about the constraints and resources
link |
01:37:16.960
where
link |
01:37:18.960
I had an Apple 2GS I didn't have an IBM PC
link |
01:37:20.960
I wanted to port my
link |
01:37:22.960
applications to IBM because
link |
01:37:24.960
I thought I could make more money on it
link |
01:37:26.960
so what I wound up doing is
link |
01:37:28.960
I rented a PC for a week
link |
01:37:30.960
and bought a copy of Turbo Pascal
link |
01:37:32.960
and so I had a hard
link |
01:37:34.960
one week and this was cutting into
link |
01:37:36.960
what minimal profit margin I had there
link |
01:37:38.960
but I had this computer for a week
link |
01:37:40.960
I had to get my program ported
link |
01:37:42.960
before I had to return the PC
link |
01:37:44.960
and that was kind of the first thing
link |
01:37:46.960
that I had done on the IBM PC
link |
01:37:48.960
and what led me to taking the job at Softisk
link |
01:37:50.960
and Turbo Pascal
link |
01:37:52.960
how's that different from regular Pascal
link |
01:37:54.960
is it different compiler or something like that
link |
01:37:56.960
so it was a product of Borland
link |
01:37:58.960
before Microsoft kind of killed them
link |
01:38:00.960
they were the hot stuff
link |
01:38:02.960
developer tools company
link |
01:38:04.960
Borland, Turbo Pascal, Turbo C
link |
01:38:06.960
and Turbo Prolog, I mean all the different things
link |
01:38:08.960
but what they did was
link |
01:38:10.960
they took a supremely pragmatic approach
link |
01:38:12.960
of making something useful
link |
01:38:14.960
it was one of these great examples where
link |
01:38:16.960
Pascal was an academic language
link |
01:38:18.960
and you had things like the UCSDP system
link |
01:38:20.960
that Wizardry was actually
link |
01:38:22.960
written in that they did
link |
01:38:24.960
they did manage to make a game with that
link |
01:38:26.960
but it was
link |
01:38:28.960
not a super practical system
link |
01:38:30.960
while Turbo Pascal was
link |
01:38:32.960
it was called Turbo because it was blazingly fast
link |
01:38:34.960
to compile I mean really ridiculously
link |
01:38:36.960
10 to 20 times
link |
01:38:38.960
faster than most other compilers at the time
link |
01:38:40.960
but it also had very
link |
01:38:42.960
pragmatic access to look you can just
link |
01:38:44.960
poke at the hardware in these different ways
link |
01:38:46.960
and we have libraries that let you do things
link |
01:38:48.960
and it was a pretty good
link |
01:38:50.960
it was a perfectly good way to write games
link |
01:38:52.960
and this is one of those things where people have talked about
link |
01:38:54.960
different paths that computer
link |
01:38:56.960
development could have taken
link |
01:38:58.960
where C took over the world
link |
01:39:00.960
for reasons that came out of Unix
link |
01:39:02.960
and eventually Linux
link |
01:39:04.960
and that was not a foregone conclusion at all
link |
01:39:06.960
and people can make
link |
01:39:08.960
real reasoned rational arguments
link |
01:39:10.960
that the world might have been better
link |
01:39:12.960
if it had gone a Pascal route
link |
01:39:14.960
I'm somewhat agnostic on that
link |
01:39:16.960
where I do know from experience
link |
01:39:18.960
it was perfectly good enough to do
link |
01:39:20.960
do that and it had some fundamental improvements
link |
01:39:22.960
like it had range checked arrays
link |
01:39:24.960
as an option there which could avoid
link |
01:39:26.960
many of C's
link |
01:39:28.960
real hazards that happened in a security space
link |
01:39:30.960
but C1
link |
01:39:32.960
they were basically operating at about the same level of abstraction
link |
01:39:34.960
it was a systems programming language
link |
01:39:36.960
but
link |
01:39:38.960
but you said Pascal had more emphasis on data structures
link |
01:39:40.960
actually
link |
01:39:42.960
in the tree of languages
link |
01:39:44.960
did Pascal come before C
link |
01:39:46.960
they were pretty contemporaneous
link |
01:39:48.960
so Pascal's lineage went to
link |
01:39:50.960
Modula 2 and eventually Oberon
link |
01:39:52.960
which was another Nicholas word
link |
01:39:54.960
kind of
link |
01:39:56.960
experimental language
link |
01:39:58.960
but they were all good enough at that level
link |
01:40:00.960
now some of the classic
link |
01:40:02.960
academic oriented Pascal's were just missing
link |
01:40:04.960
fundamental things like oh you can't access
link |
01:40:06.960
this core system thing because we're just using it
link |
01:40:08.960
to teach students but
link |
01:40:10.960
Turbo Pascal showed that only modest changes
link |
01:40:12.960
to it really did make it
link |
01:40:14.960
a completely capable language
link |
01:40:16.960
and it had some reasons why
link |
01:40:18.960
you could implement it as a single pass compiler
link |
01:40:20.960
so it could be way way faster
link |
01:40:22.960
although less scope for optimizations
link |
01:40:24.960
if you do it that way
link |
01:40:26.960
and it did have some range checking options
link |
01:40:28.960
it had a little bit better typing capability
link |
01:40:30.960
you'd have properly typed enums
link |
01:40:32.960
sorts of things and other stuff that C lacked
link |
01:40:34.960
but C was also
link |
01:40:36.960
clearly good enough and it wound up with
link |
01:40:38.960
a huge inertia from the UNIX
link |
01:40:40.960
ecosystem and everything that came with that
link |
01:40:42.960
garbage collection
link |
01:40:44.960
no it was not garbage collected
link |
01:40:46.960
so you could still have your use after freeze
link |
01:40:48.960
and all those other problems
link |
01:40:50.960
just getting rid of array overruns
link |
01:40:52.960
at least if you were compiled with that
link |
01:40:54.960
debugging option certainly would have avoided
link |
01:40:56.960
a lot of problems and could have a lot of
link |
01:40:58.960
benefits but so anyways that was the next
link |
01:41:00.960
thing I had to learn C because C
link |
01:41:02.960
was where it seemed like most of the
link |
01:41:04.960
things were going
link |
01:41:06.960
so I abandoned Pascal and I started working
link |
01:41:08.960
in C I started hacking on these hardware
link |
01:41:10.960
things dealing with
link |
01:41:12.960
the graphics controllers and the EGA systems
link |
01:41:14.960
and what we most
link |
01:41:16.960
wanted to do so at that time
link |
01:41:18.960
we had
link |
01:41:20.960
we were sitting in our darkened office playing
link |
01:41:22.960
all the different console video games
link |
01:41:24.960
and we were figuring out what do we want to
link |
01:41:26.960
what games do we want to make for our
link |
01:41:28.960
gamers edge product there
link |
01:41:30.960
and so we had one of the first Super
link |
01:41:32.960
Nintendos sitting there and we had
link |
01:41:34.960
an older Nintendo looking at all those
link |
01:41:36.960
games and the core thing that those consoles
link |
01:41:38.960
did that you just didn't get on the PC
link |
01:41:40.960
games was this ability to have
link |
01:41:42.960
a massive scrolling world
link |
01:41:44.960
where most of the games that you would make on the
link |
01:41:46.960
PC and early
link |
01:41:48.960
earlier personal computers would be a static
link |
01:41:50.960
screen you move little things around on it
link |
01:41:52.960
and you interact like that
link |
01:41:54.960
maybe you go to additional screens as
link |
01:41:56.960
you know as you move but
link |
01:41:58.960
arcade games and consoles had this
link |
01:42:00.960
wonderful ability to just have a big
link |
01:42:02.960
world that you're slowly moving your
link |
01:42:04.960
window through and that was
link |
01:42:06.960
for those types of games that kind of action
link |
01:42:08.960
exploration adventure games that was a
link |
01:42:10.960
super super important thing
link |
01:42:12.960
and PC games just didn't do
link |
01:42:14.960
that and what I
link |
01:42:16.960
had come across was a couple different
link |
01:42:18.960
techniques for implementing that
link |
01:42:20.960
on the PC and they're not
link |
01:42:22.960
hard complicated things
link |
01:42:24.960
when I explain them now they're
link |
01:42:26.960
they're pretty straightforward but just nobody was doing
link |
01:42:28.960
you sound like Einstein describing his
link |
01:42:30.960
five papers is pretty straightforward
link |
01:42:32.960
I understand but they're
link |
01:42:34.960
nevertheless revolutions so size scrolling
link |
01:42:36.960
is a game changer
link |
01:42:38.960
it's a genius invention
link |
01:42:40.960
and some of the consoles had different
link |
01:42:42.960
limitations about you could do one but not the
link |
01:42:44.960
other and there were similar things
link |
01:42:46.960
going on as advancements even in the console
link |
01:42:48.960
space where you'd have like the original
link |
01:42:50.960
Mario game was
link |
01:42:52.960
just horizontal scrolling and then later
link |
01:42:54.960
Mario games added vertical aspects to
link |
01:42:56.960
it and different things that
link |
01:42:58.960
you were doing to explore
link |
01:43:00.960
kind of expand the capabilities there
link |
01:43:02.960
and so much of the early game design for
link |
01:43:04.960
decades was removing limitations
link |
01:43:06.960
letting you do things that you envisioned
link |
01:43:08.960
as a designer you wanted the player to
link |
01:43:10.960
experience but the hardware just
link |
01:43:12.960
couldn't really or you didn't know
link |
01:43:14.960
how to make it happen it felt
link |
01:43:16.960
impossible you can imagine
link |
01:43:18.960
that you want to create like this
link |
01:43:20.960
big world through which you can
link |
01:43:22.960
size scroll like through which you can
link |
01:43:24.960
walk and then
link |
01:43:26.960
you ask yourself a question how do I
link |
01:43:28.960
actually build that in a way that's
link |
01:43:30.960
like the the latency
link |
01:43:32.960
is low enough the hardware
link |
01:43:34.960
can actually deliver that
link |
01:43:36.960
in such a way that it's a company
link |
01:43:38.960
and we knew what we wanted to do because
link |
01:43:40.960
we were playing all of these console games
link |
01:43:42.960
playing all these Nintendo games and arcade games
link |
01:43:44.960
clearly there is a whole world of awesome
link |
01:43:46.960
things there that we just couldn't do on
link |
01:43:48.960
the PC at least initially
link |
01:43:50.960
because every programmer can tell
link |
01:43:52.960
it's like if you want to scroll you can just redraw
link |
01:43:54.960
the whole screen but then it turns out well
link |
01:43:56.960
you're going five frames per second
link |
01:43:58.960
that's not an interactive fun experience
link |
01:44:00.960
you want to be going 30 or 60
link |
01:44:02.960
frames per second or something
link |
01:44:04.960
and it just didn't feel like that was possible
link |
01:44:06.960
it felt like the PCs had to get
link |
01:44:08.960
five times faster for you to make
link |
01:44:10.960
a playable game there
link |
01:44:12.960
and interestingly I wound up with
link |
01:44:14.960
two completely different solutions
link |
01:44:16.960
for the scrolling problem
link |
01:44:18.960
and this is
link |
01:44:20.960
this is a theme that runs through everything
link |
01:44:22.960
where all of these big technical advancements
link |
01:44:24.960
it turns out there's always a couple
link |
01:44:26.960
different ways of doing them and
link |
01:44:28.960
it's not like you found the one true
link |
01:44:30.960
way of doing it and we'll see this
link |
01:44:32.960
as we go into 3D games and things later
link |
01:44:34.960
but so the scrolling
link |
01:44:36.960
the first set of scrolling tricks that I got
link |
01:44:38.960
was
link |
01:44:40.960
the hardware had this ability to
link |
01:44:42.960
you could shift
link |
01:44:44.960
like inside the window of memory
link |
01:44:46.960
so the EGA cards at the time
link |
01:44:48.960
had 256 kilobytes of memory
link |
01:44:50.960
and it was
link |
01:44:52.960
awkwardly set up in this planer format
link |
01:44:54.960
where instead of
link |
01:44:56.960
having 256 or
link |
01:44:58.960
you know 24 million colors
link |
01:45:00.960
you had 16 colors which is 4 bits
link |
01:45:02.960
so you had 4 bit planes
link |
01:45:04.960
64k a piece of course
link |
01:45:06.960
64k is a nice round number
link |
01:45:08.960
for 16 bit addressing
link |
01:45:10.960
so your graphics card had a 16 bit
link |
01:45:12.960
window that you could
link |
01:45:14.960
look at and you could tell it to start
link |
01:45:16.960
the video scan out anywhere inside there
link |
01:45:18.960
so there were a couple games
link |
01:45:20.960
that had taken this approach if you could make
link |
01:45:22.960
a 2x2 screen or a 1x4 screen
link |
01:45:24.960
and you could do scrolling
link |
01:45:26.960
really easily like that you could just lay it
link |
01:45:28.960
all out and just pan around there
link |
01:45:30.960
but you just couldn't make it any bigger
link |
01:45:32.960
because that's all the memory that was there
link |
01:45:34.960
the first insight to the scrolling
link |
01:45:36.960
that I had was well
link |
01:45:38.960
if we make a screen that's just
link |
01:45:40.960
one tile larger you know and we usually
link |
01:45:42.960
had tiles that were 16 pixels by 16
link |
01:45:44.960
pixels the little classic Mario
link |
01:45:46.960
block that you run into
link |
01:45:48.960
lots of art gets drawn that way
link |
01:45:50.960
and your screen is a certain number of tiles
link |
01:45:52.960
but if you had one little buffer region
link |
01:45:54.960
outside of that
link |
01:45:56.960
you could easily pan around inside that
link |
01:45:58.960
16 pixel region that could be perfectly
link |
01:46:00.960
smooth but then what happens
link |
01:46:02.960
if you get to the edge and you want to keep going
link |
01:46:04.960
the first way we did
link |
01:46:06.960
scrolling was what I called
link |
01:46:08.960
adaptive tile refresh
link |
01:46:10.960
which was really just a matter of you get
link |
01:46:12.960
to the edge and then you go back
link |
01:46:14.960
to the original point and then only
link |
01:46:16.960
change the tiles that have
link |
01:46:18.960
actually that are different between where
link |
01:46:20.960
it was in most of the games at the time
link |
01:46:22.960
if you think about sort of your
link |
01:46:24.960
classic Super Mario Brothers game
link |
01:46:26.960
you've got big fields of blue sky
link |
01:46:28.960
long rows of
link |
01:46:30.960
the same brick texture
link |
01:46:32.960
and there's a lot of commonality
link |
01:46:34.960
it's kind of like a data compression thing
link |
01:46:36.960
if you take the screen and you set it down
link |
01:46:38.960
on top of each other in general
link |
01:46:40.960
only about 10% of the tiles
link |
01:46:42.960
were actually different there
link |
01:46:44.960
so this was a way to
link |
01:46:46.960
go ahead and say well I'm going to move it back
link |
01:46:48.960
and then I'm only going to change those
link |
01:46:50.960
10, 20, whatever percent
link |
01:46:52.960
tiles there and that meant
link |
01:46:54.960
that it was essentially five times
link |
01:46:56.960
faster than if you were redrawing all of the
link |
01:46:58.960
tiles and that worked well enough
link |
01:47:00.960
for us to do a bunch of these games
link |
01:47:02.960
for Gamers Edge
link |
01:47:04.960
we had a lot of these scrolling games like
link |
01:47:06.960
Slurnax and Shadow Knights and things like
link |
01:47:08.960
that that we were cranking out at this high
link |
01:47:10.960
rate that had this scrolling effect on it
link |
01:47:12.960
and it worked well enough there were design
link |
01:47:14.960
challenges there where
link |
01:47:16.960
if you made the worst case if you made a
link |
01:47:18.960
report over the entire screen
link |
01:47:20.960
you scroll over one and every single tile
link |
01:47:22.960
changes and your frame rate is now five frames
link |
01:47:24.960
per second because it had to redraw everything
link |
01:47:26.960
so the designers had a little bit
link |
01:47:28.960
that they had to worry about they had to make
link |
01:47:30.960
these relatively plain looking levels
link |
01:47:32.960
but it was still pretty magical
link |
01:47:34.960
it was something that we hadn't seen before
link |
01:47:36.960
and
link |
01:47:38.960
the first thing that we wound up doing
link |
01:47:40.960
with that was I had just gotten this
link |
01:47:42.960
working and Tom Hall
link |
01:47:44.960
was sitting there with me and
link |
01:47:46.960
we were looking over at our Super Nintendo
link |
01:47:48.960
on the side there with Super Mario
link |
01:47:50.960
3 running and we had
link |
01:47:52.960
the technology we had the
link |
01:47:54.960
tools set up there and we stayed up all night
link |
01:47:56.960
and we basically cloned
link |
01:47:58.960
the first level of Super Mario Brothers
link |
01:48:00.960
performance wise as well
link |
01:48:02.960
and so it and we had our little character
link |
01:48:04.960
running and jumping in there it wasn't
link |
01:48:06.960
it was close to pixel accurate as far as
link |
01:48:08.960
all the backgrounds and everything
link |
01:48:10.960
but the gaming was just stuff that we cobbled
link |
01:48:12.960
together from previous games that I had
link |
01:48:14.960
written I just kind of like really
link |
01:48:16.960
kick bash the whole thing together to make this demo
link |
01:48:18.960
and that was one of the rare cases
link |
01:48:20.960
when I said I don't usually do
link |
01:48:22.960
these all night programming things
link |
01:48:24.960
there's probably only two memorable ones
link |
01:48:26.960
that I can think about you know one
link |
01:48:28.960
was the all nighter to go ahead and get
link |
01:48:30.960
I am to get our dangerous Dave
link |
01:48:32.960
and copyright infringement is how we
link |
01:48:34.960
titled it because we had a game called dangerous Dave
link |
01:48:36.960
was you know running around with the shotgun shooting
link |
01:48:38.960
things I and we were
link |
01:48:40.960
just taking our most beloved game at the time
link |
01:48:42.960
there the Super Mario 3
link |
01:48:44.960
and sort of sticking Dave inside that
link |
01:48:46.960
with this new scrolling technology that
link |
01:48:48.960
was going perfectly smooth for
link |
01:48:50.960
I am you know for them
link |
01:48:52.960
as it ran and Tom
link |
01:48:54.960
and I just kind of blurrily the next morning
link |
01:48:56.960
you know kind of left and we left
link |
01:48:58.960
a disc on I you know on the
link |
01:49:00.960
desk for John Romero and Jay Wilbur
link |
01:49:02.960
to see and just said run this
link |
01:49:04.960
and we eventually made it back in
link |
01:49:06.960
later in the day and
link |
01:49:08.960
it was you know like they grabbed
link |
01:49:10.960
us and pulled us in you know pulled us
link |
01:49:12.960
into the room and that was the point where
link |
01:49:14.960
they were like we got to do something
link |
01:49:16.960
with this you know we're we're going to make
link |
01:49:18.960
a company we're going to go make our own
link |
01:49:20.960
games where this was something that
link |
01:49:22.960
we we were able to just kind of hit them
link |
01:49:24.960
with a hammer of an experience like wow
link |
01:49:26.960
this is just like so much cooler than
link |
01:49:28.960
what we thought was possible
link |
01:49:30.960
there and initially we tried
link |
01:49:32.960
to get Nintendo to to let us make
link |
01:49:34.960
Super Mario 3 on the PC
link |
01:49:36.960
that's really what we wanted to do we're like
link |
01:49:38.960
hey we can finish this it's line
link |
01:49:40.960
of sight for this will be great
link |
01:49:42.960
and we sent something to Nintendo
link |
01:49:44.960
and we heard that it did get looked at
link |
01:49:46.960
in Japan and they just
link |
01:49:48.960
weren't interested in that
link |
01:49:50.960
but that's another one of those life could have gone
link |
01:49:52.960
a very different way where we could have been
link |
01:49:54.960
like Nintendo's house PC team
link |
01:49:56.960
you know at that point
link |
01:49:58.960
and defined the direction of
link |
01:50:00.960
you know
link |
01:50:02.960
Wolfenstein
link |
01:50:04.960
and Doom and Quake
link |
01:50:06.960
has been a Nintendo creation
link |
01:50:08.960
yeah so at the same time
link |
01:50:10.960
that we were just doing our first scrolling
link |
01:50:12.960
demos I'm
link |
01:50:14.960
we reached out to Scott Miller at
link |
01:50:16.960
Apigee and said it's like hey we do
link |
01:50:18.960
want to make some games you know these things
link |
01:50:20.960
that you think you want those are those are nothing
link |
01:50:22.960
what do you see what we can actually do now this
link |
01:50:24.960
is going to be amazing and
link |
01:50:26.960
he just like popped right up and sent a check
link |
01:50:28.960
to us where we at that point
link |
01:50:30.960
we still thought he might be a fraud that
link |
01:50:32.960
he was just lying about all of this but he
link |
01:50:34.960
was totally correct on how much money
link |
01:50:36.960
he was making with his shareware titles
link |
01:50:38.960
and this was his
link |
01:50:40.960
his kind of real brainstorm about this
link |
01:50:42.960
where shareware was this idea
link |
01:50:44.960
that software doesn't have a fixed price
link |
01:50:46.960
if you use it you send out of the goodness
link |
01:50:48.960
of your heart some money to the creator
link |
01:50:50.960
and there were a couple utilities
link |
01:50:52.960
that did make some significant success
link |
01:50:54.960
like that but for the most part
link |
01:50:56.960
it didn't really work you know there wasn't
link |
01:50:58.960
much software in a pure shareware
link |
01:51:00.960
model that that was successful
link |
01:51:02.960
the apogee
link |
01:51:04.960
innovation was to
link |
01:51:06.960
take something call it shareware
link |
01:51:08.960
split it into three pieces you always made a trilogy
link |
01:51:10.960
and you would
link |
01:51:12.960
put the first piece out but then you buy
link |
01:51:14.960
the whole trilogy for
link |
01:51:16.960
some shareware amount which in reality
link |
01:51:18.960
it meant that the first part was a demo
link |
01:51:20.960
where you kind of like the demo went
link |
01:51:22.960
everywhere for free and you paid money to
link |
01:51:24.960
to get the whole set but
link |
01:51:26.960
it was still played as shareware and we were
link |
01:51:28.960
happy to have the first one go everywhere
link |
01:51:30.960
and it wasn't a crippled demo where the
link |
01:51:32.960
first episode of all these trilogies
link |
01:51:34.960
it was a real complete game and probably
link |
01:51:36.960
20 times as many people
link |
01:51:38.960
played that part of it thought they had a great game
link |
01:51:40.960
had found memories
link |
01:51:42.960
of it but never paid us a dime
link |
01:51:44.960
but enough people
link |
01:51:46.960
were happy with that where
link |
01:51:48.960
it was really quite successful and these
link |
01:51:50.960
early games that we didn't think very much
link |
01:51:52.960
of compared to commercial quality
link |
01:51:54.960
games but they were doing really good
link |
01:51:56.960
business some fairly crude
link |
01:51:58.960
things and people it was good
link |
01:52:00.960
business people enjoyed it and
link |
01:52:02.960
it wasn't like you were taking a crapshoot on what
link |
01:52:04.960
you were getting you just played a third of the
link |
01:52:06.960
experience and you loved it enough
link |
01:52:08.960
to hand write out a check
link |
01:52:10.960
and put it in an envelope and address it
link |
01:52:12.960
and send it out to Apogee
link |
01:52:14.960
to get the rest of them so
link |
01:52:16.960
it was a really pretty feel good
link |
01:52:18.960
business prospect there because
link |
01:52:20.960
everybody was happy
link |
01:52:22.960
you know they knew what they were getting
link |
01:52:24.960
when they send it in and they would send in
link |
01:52:26.960
mail if you're going to the trouble of addressing
link |
01:52:28.960
a letter and I am filling out
link |
01:52:30.960
an envelope you write something in it and
link |
01:52:32.960
there were just the literal bags of fan mail
link |
01:52:34.960
for the shareware
link |
01:52:36.960
games so people loved them
link |
01:52:38.960
I should mention that for you
link |
01:52:40.960
the definition of wealth is being
link |
01:52:42.960
able to have pizza
link |
01:52:44.960
whenever you want for me
link |
01:52:46.960
there was a dream
link |
01:52:48.960
that would play shareware games over
link |
01:52:50.960
and over the part that's free
link |
01:52:52.960
over and over and it was very
link |
01:52:54.960
deeply fulfilling experience but
link |
01:52:56.960
I dreamed of a time where
link |
01:52:58.960
I could actually afford
link |
01:53:00.960
the full experience and this is kind of this
link |
01:53:02.960
dreamland beyond
link |
01:53:04.960
the horizon when you could
link |
01:53:06.960
find out what else is there
link |
01:53:08.960
in some sense
link |
01:53:10.960
even just playing the shareware
link |
01:53:12.960
was
link |
01:53:14.960
the limitation of that
link |
01:53:16.960
life is
link |
01:53:18.960
limited eventually we all die
link |
01:53:20.960
in that way shareware was
link |
01:53:22.960
like
link |
01:53:24.960
somehow really fulfilling
link |
01:53:26.960
to have this kind of mysterious thing
link |
01:53:28.960
beyond what's free
link |
01:53:30.960
always there it's kind of
link |
01:53:32.960
I don't know that maybe
link |
01:53:34.960
it's because a part of my childhood is playing
link |
01:53:36.960
shareware games that was a really fulfilling
link |
01:53:38.960
experience it's so interesting how that model
link |
01:53:40.960
still brought joy
link |
01:53:42.960
to so many people the 20x
link |
01:53:44.960
people that played it I felt very good about
link |
01:53:46.960
that I would run into people it's like
link |
01:53:48.960
that would say oh I loved that game
link |
01:53:50.960
that you had early on Commander Keen
link |
01:53:52.960
whatever and
link |
01:53:54.960
and no they meant just the first
link |
01:53:56.960
episode that they got to see everywhere
link |
01:53:58.960
that's me I played the crap out of Commander Keen
link |
01:54:00.960
and that was all good
link |
01:54:02.960
yeah
link |
01:54:04.960
so we were in this position where Scott Miller
link |
01:54:06.960
was just fronting us cash and saying yeah
link |
01:54:08.960
make a game but
link |
01:54:10.960
we did not properly
link |
01:54:12.960
pull the trigger and say alright
link |
01:54:14.960
we're quitting our jobs we were like
link |
01:54:16.960
we're gonna do both we're gonna keep working
link |
01:54:18.960
at soft disk working on this
link |
01:54:20.960
and then we're going to go ahead
link |
01:54:22.960
and make a new game for
link |
01:54:24.960
Apogee at the same time
link |
01:54:26.960
and this eventually did lead to some legal
link |
01:54:28.960
problems and we had we had trouble
link |
01:54:30.960
it all got worked out in the end but
link |
01:54:32.960
it was not a good call at the time
link |
01:54:34.960
there and your legal mind at the time was not
link |
01:54:36.960
stellar
link |
01:54:38.960
you you were not thinking
link |
01:54:40.960
in terms of the illegal no I
link |
01:54:42.960
I definitely wasn't none of us were
link |
01:54:44.960
I and in hindsight
link |
01:54:46.960
yeah it's like how did we think we were going to get away
link |
01:54:48.960
with like even using our work computers
link |
01:54:50.960
to write write software for
link |
01:54:52.960
you know our our breakaway
link |
01:54:54.960
new company it was
link |
01:54:56.960
not a good plan how did Commander
link |
01:54:58.960
Keen come to be
link |
01:55:00.960
so the design process
link |
01:55:02.960
we would start from we had some idea of what
link |
01:55:04.960
we wanted to do we wanted to do a
link |
01:55:06.960
Mario like game it was going to be a side
link |
01:55:08.960
scroller I was going to use the technology
link |
01:55:10.960
we we had some sense
link |
01:55:12.960
of what it would have to look like because of the limitations
link |
01:55:14.960
of this adaptive tile refresh
link |
01:55:16.960
technology it had to have
link |
01:55:18.960
fields of relatively constant tiles
link |
01:55:20.960
you couldn't just paint up a background
link |
01:55:22.960
and then move that around
link |
01:55:24.960
I the early design
link |
01:55:26.960
or all the design for Commander Keen really came
link |
01:55:28.960
from Tom Hall where
link |
01:55:30.960
he was
link |
01:55:32.960
the main creative mind
link |
01:55:34.960
for the early in software stuff
link |
01:55:36.960
where we had an interesting division of things where
link |
01:55:38.960
Tom was
link |
01:55:40.960
all creative and design I was all
link |
01:55:42.960
programming John Romero was an interesting
link |
01:55:44.960
bridge where he was both a very good
link |
01:55:46.960
programmer and also very good designer
link |
01:55:48.960
and artist and kind of straddled
link |
01:55:50.960
between the areas but Commander
link |
01:55:52.960
Keen was very much Tom Hall's baby
link |
01:55:54.960
and
link |
01:55:56.960
he came up with all the design and
link |
01:55:58.960
backstory for the different things of kind of
link |
01:56:00.960
a mad scientist little kid
link |
01:56:02.960
with I am
link |
01:56:04.960
building a rocket ship and a zap gun
link |
01:56:06.960
and visiting alien worlds
link |
01:56:08.960
and doing all this that the
link |
01:56:10.960
background that we lay the game inside
link |
01:56:12.960
of and there's not
link |
01:56:14.960
a whole lot to any of these things you know
link |
01:56:16.960
design for us was always just what we
link |
01:56:18.960
needed to do to make the game that was
link |
01:56:20.960
going to be so much fun to play
link |
01:56:22.960
and we made our we laid out
link |
01:56:24.960
our first trilogy of games you know
link |
01:56:26.960
the shareware formula it's going to be
link |
01:56:28.960
three pieces we make Commander Keen one
link |
01:56:30.960
two and three and we just really
link |
01:56:32.960
started
link |
01:56:34.960
busting on all that work and it went together
link |
01:56:36.960
really quickly it was like three months
link |
01:56:38.960
and it was something that while we were
link |
01:56:40.960
still making games every month
link |
01:56:42.960
for Gamers Edge we were sharing
link |
01:56:44.960
technology between that I'd write a bunch
link |
01:56:46.960
of code for this and we just kind of use it
link |
01:56:48.960
for both again not a particularly good
link |
01:56:50.960
idea there that had consequences for us
link |
01:56:52.960
but
link |
01:56:54.960
in three months we got our first our
link |
01:56:56.960
first game out and all of a sudden it
link |
01:56:58.960
was three times as successful as
link |
01:57:00.960
the most successful thing Apogee had had
link |
01:57:02.960
before and we were making like $30,000
link |
01:57:04.960
a month
link |
01:57:06.960
from the Commander Keen stuff
link |
01:57:08.960
and that was again a surprise
link |
01:57:10.960
to us it was more than we thought that
link |
01:57:12.960
was going to that that was going to make
link |
01:57:14.960
and we said well we're going to certainly
link |
01:57:16.960
roll into another set of titles
link |
01:57:18.960
from this and in that three months
link |
01:57:20.960
I had come up with a much better way
link |
01:57:22.960
of doing the scrolling technology that
link |
01:57:24.960
was not the adaptive tile refresh
link |
01:57:26.960
which in some ways was even simpler
link |
01:57:28.960
and these things
link |
01:57:30.960
so many of the great ideas of technology
link |
01:57:32.960
are things that are back at the envelope
link |
01:57:34.960
designs I make this comment
link |
01:57:36.960
about modern machine learning where
link |
01:57:38.960
all the things that are really important
link |
01:57:40.960
practically in the last decade are each
link |
01:57:42.960
of them fits on the back of an envelope
link |
01:57:44.960
there are these simple little things
link |
01:57:46.960
they're not super dense hard to
link |
01:57:48.960
understand technologies
link |
01:57:50.960
and so the the second scrolling
link |
01:57:52.960
trick was just a matter of like
link |
01:57:54.960
okay we know we've got this 64k
link |
01:57:56.960
window
link |
01:57:58.960
and the question was always like well you could
link |
01:58:00.960
make a 2x2 but you can't
link |
01:58:02.960
go off the edge
link |
01:58:04.960
but I finally asked well what actually
link |
01:58:06.960
happens if you just go off the
link |
01:58:08.960
edge if you take your start
link |
01:58:10.960
and you say it's like okay
link |
01:58:12.960
I can move over I'm scrolling I can move
link |
01:58:14.960
over I can move down I'm scrolling
link |
01:58:16.960
I get to what should be the bottom of the memory
link |
01:58:18.960
window it's like well what if I just
link |
01:58:20.960
keep going and I say I'm going to start
link |
01:58:22.960
at you know what happens if I start
link |
01:58:24.960
at FFFE at the very
link |
01:58:26.960
end of the 64k block
link |
01:58:28.960
and it turns out it just
link |
01:58:30.960
wraps back around to the top of the block
link |
01:58:32.960
and I'm like oh well this makes
link |
01:58:34.960
everything easy you can just scroll
link |
01:58:36.960
the screen everywhere and all you have to draw
link |
01:58:38.960
is just one new line of tiles
link |
01:58:40.960
which everything you expose it might be
link |
01:58:42.960
unaligned off various parts
link |
01:58:44.960
of the screen memory
link |
01:58:46.960
but it just works that no longer
link |
01:58:48.960
had the problem of you had to have fields
link |
01:58:50.960
of the similar colors because
link |
01:58:52.960
it doesn't matter what you're doing you could be
link |
01:58:54.960
having a completely unique world
link |
01:58:56.960
and you're just drawing the new strip
link |
01:58:58.960
that comes on but it might be
link |
01:59:00.960
like you said unaligned
link |
01:59:02.960
so it can be all over the place and it turns out
link |
01:59:04.960
it doesn't matter I would have two page flipped
link |
01:59:06.960
screens as long as they didn't overlap they moved
link |
01:59:08.960
in series through this
link |
01:59:10.960
two dimensional window of graphics
link |
01:59:12.960
and that was one of those like well
link |
01:59:14.960
this is so simple this just
link |
01:59:16.960
this just works it's faster
link |
01:59:18.960
I am there it seemed like there was no
link |
01:59:20.960
downside funny thing was
link |
01:59:22.960
I it turned out after we shipped
link |
01:59:24.960
titles with this there were
link |
01:59:26.960
what they called super VGA
link |
01:59:28.960
cards the cards that would allow higher
link |
01:59:30.960
resolutions and I and
link |
01:59:32.960
different features that the standard ones didn't
link |
01:59:34.960
and on some of those
link |
01:59:36.960
cards this was a weird
link |
01:59:38.960
compatibility cork again because nobody thought
link |
01:59:40.960
this was not what it was designed to do
link |
01:59:42.960
and some of those cards had more
link |
01:59:44.960
memory they had more than just
link |
01:59:46.960
256k in four planes they had
link |
01:59:48.960
512k or a megabyte
link |
01:59:50.960
and on some of those cards
link |
01:59:52.960
I scroll my window down
link |
01:59:54.960
and then it goes into uninitialized
link |
01:59:56.960
memory that actually exists there
link |
01:59:58.960
rather than wrapping back around at the top
link |
02:00:00.960
and then
link |
02:00:02.960
I was in the tough position of do I have to
link |
02:00:04.960
track every single one of these and it was a mad
link |
02:00:06.960
house back then with there were
link |
02:00:08.960
20 different video card vendors with
link |
02:00:10.960
all slightly different implementations of
link |
02:00:12.960
their non standard functionality
link |
02:00:14.960
so either I needed to natively
link |
02:00:16.960
program all of the the VGA
link |
02:00:18.960
cards there to
link |
02:00:20.960
map in that memory and keep scrolling
link |
02:00:22.960
down through all of that or I kind
link |
02:00:24.960
of punted and took the easy solution
link |
02:00:26.960
of when you finally did run to the
link |
02:00:28.960
edge of the screen I accepted
link |
02:00:30.960
a hitch and just copied the whole screen up
link |
02:00:32.960
there so on some of those
link |
02:00:34.960
those cards it was
link |
02:00:36.960
a compatibility mode in the normal ones
link |
02:00:38.960
when it all worked fine everything was just
link |
02:00:40.960
beautifully smooth but if you had one of those
link |
02:00:42.960
cards where it did not wrap the way
link |
02:00:44.960
I wanted it to you'd be
link |
02:00:46.960
scrolling around scrolling around and
link |
02:00:48.960
then eventually you'd have a little hitch where
link |
02:00:50.960
200 milliseconds or something
link |
02:00:52.960
that was not super smooth as it
link |
02:00:54.960
froze a little bit and this was the binary
link |
02:00:56.960
thing is it one of the standard
link |
02:00:58.960
screens or isn't one of the weird ones
link |
02:01:00.960
the super VGA one yeah okay
link |
02:01:02.960
and so we would default to and I think
link |
02:01:04.960
that was one of those that changed over
link |
02:01:06.960
the kind of course of deployment where
link |
02:01:08.960
early on we would have a normal mode
link |
02:01:10.960
and then you would have you would enable the compatibility
link |
02:01:12.960
flag if your screen did this crazy
link |
02:01:14.960
flickery thing when you got to a certain
link |
02:01:16.960
point in the game and then
link |
02:01:18.960
later I think it probably got enabled by default
link |
02:01:20.960
as just more and more of the cards
link |
02:01:22.960
I kind of did not do exactly
link |
02:01:24.960
the right thing and that's the two edge
link |
02:01:26.960
sword of doing unconventional
link |
02:01:28.960
things with technology where
link |
02:01:30.960
you can find something that nobody thought about
link |
02:01:32.960
doing that kind of scrolling trick when they
link |
02:01:34.960
set up those cards but
link |
02:01:36.960
the fact that nobody thought that was the primary reason
link |
02:01:38.960
when I was relying on that then
link |
02:01:40.960
I wound up being broken on some of the later
link |
02:01:42.960
cards let me take a bit
link |
02:01:44.960
of a tangent but
link |
02:01:46.960
ask you about the hacker
link |
02:01:48.960
ethic because you mentioned shareware
link |
02:01:50.960
it's an interesting world
link |
02:01:52.960
the world of people
link |
02:01:54.960
that make money
link |
02:01:56.960
business and the people that
link |
02:01:58.960
build systems the engineers
link |
02:02:00.960
and
link |
02:02:02.960
what is the hacker
link |
02:02:04.960
ethic you've been a man
link |
02:02:06.960
of the people and you've
link |
02:02:08.960
embodied at least the part of that
link |
02:02:10.960
ethic what does it mean
link |
02:02:12.960
what did it mean to you at the time what does it mean to
link |
02:02:14.960
you today so Steven Levy's
link |
02:02:16.960
book hackers was a really
link |
02:02:18.960
formative book for me as a teenager
link |
02:02:20.960
I mean I read it several
link |
02:02:22.960
times and there was
link |
02:02:24.960
all of the great lore of the early
link |
02:02:26.960
MIT era of hackers
link |
02:02:28.960
ending up at the end with
link |
02:02:30.960
it kind of went through the early
link |
02:02:32.960
MIT hackers and the Silicon Valley
link |
02:02:34.960
hardware hackers and then
link |
02:02:36.960
the game hackers in part 3
link |
02:02:38.960
and at that time as a teenager
link |
02:02:40.960
I really
link |
02:02:42.960
was kind of bitter in some ways
link |
02:02:44.960
I thought I was born too late
link |
02:02:46.960
I thought I missed the window
link |
02:02:48.960
there and I really thought I
link |
02:02:50.960
belonged in that third section of that
link |
02:02:52.960
book with the game hackers and they were talking
link |
02:02:54.960
about the Williams at Sierra
link |
02:02:56.960
and Origin Systems with Richard Garriott
link |
02:02:58.960
and it's like
link |
02:03:00.960
I really wanted to be there
link |
02:03:02.960
and I knew that was now
link |
02:03:04.960
a few years in the past it was
link |
02:03:06.960
not to be
link |
02:03:08.960
but the early days
link |
02:03:10.960
early MIT hacker days talking
link |
02:03:12.960
a lot about this sense of
link |
02:03:14.960
the hacker ethic that there was this sense
link |
02:03:16.960
that it was about
link |
02:03:18.960
sharing information being good
link |
02:03:20.960
not keeping it to yourself and
link |
02:03:22.960
that it's not a zero sum game
link |
02:03:24.960
that you can share something
link |
02:03:26.960
with another programmer and it doesn't
link |
02:03:28.960
take it away from you
link |
02:03:30.960
you then have somebody else doing something
link |
02:03:32.960
and I also think that there's
link |
02:03:34.960
an aspect of it where it's
link |
02:03:36.960
this ability to take
link |
02:03:38.960
joy in other people's accomplishments
link |
02:03:40.960
where it's not the cutthroat bit of
link |
02:03:42.960
like I have to be first I have to be
link |
02:03:44.960
recognized as the one
link |
02:03:46.960
that did this in some way but
link |
02:03:48.960
being able to see somebody else
link |
02:03:50.960
do something and say holy shit that's amazing
link |
02:03:52.960
you know and just taking joy
link |
02:03:54.960
in the ability of something amazing
link |
02:03:56.960
that somebody else does
link |
02:03:58.960
and the
link |
02:04:00.960
big thing that I was able to do
link |
02:04:02.960
through in software was
link |
02:04:04.960
this ability to eventually release the source code
link |
02:04:06.960
for most of our like all of our really
link |
02:04:08.960
seminal game titles and that
link |
02:04:10.960
was a it was a stepping stone
link |
02:04:12.960
process where we were
link |
02:04:14.960
kind of surprised early on where
link |
02:04:16.960
people were able to
link |
02:04:18.960
hack the existing games and of course I had
link |
02:04:20.960
experience with that I remember hacking my copies
link |
02:04:22.960
of Ultima so I give myself you know
link |
02:04:24.960
9999 gold and raise my levels
link |
02:04:26.960
and you know break out the sector editor
link |
02:04:28.960
and so I was familiar with all of that
link |
02:04:30.960
so it was just it was with a smile
link |
02:04:32.960
when I started to see people doing that to our
link |
02:04:34.960
games I am you know making
link |
02:04:36.960
level editors for Commander Keen
link |
02:04:38.960
or hacking up Wolfenstein 3D
link |
02:04:40.960
but I made
link |
02:04:42.960
the pitch internally
link |
02:04:44.960
that we should actually release our own
link |
02:04:46.960
tools for like what we did
link |
02:04:48.960
what we used to create the games
link |
02:04:50.960
and that was you know that was
link |
02:04:52.960
a little bit debatable about
link |
02:04:54.960
well you know will this let other will
link |
02:04:56.960
give people a leg up it's always like what's that
link |
02:04:58.960
going to mean for the competition
link |
02:05:00.960
but the really hard pitch
link |
02:05:02.960
was to actually release the full
link |
02:05:04.960
source code for the games
link |
02:05:06.960
and it was a balancing act with
link |
02:05:08.960
the other people inside the company
link |
02:05:10.960
where it's
link |
02:05:12.960
interesting how the programmers
link |
02:05:14.960
generally did get
link |
02:05:16.960
certainly I am the people
link |
02:05:18.960
that I worked closely with they did kind of
link |
02:05:20.960
get that hacker ethic bit where
link |
02:05:22.960
you wanted to share your code you were
link |
02:05:24.960
you were proud of it you wanted other people to take it
link |
02:05:26.960
do cool things with it
link |
02:05:28.960
but interestingly
link |
02:05:30.960
the broader
link |
02:05:32.960
game industry is a little more
link |
02:05:34.960
hesitant to embrace that than
link |
02:05:36.960
like the group of people that we happen to have
link |
02:05:38.960
at id software where it was
link |
02:05:40.960
always a little interesting to me seeing how
link |
02:05:42.960
a lot of people in the game modding
link |
02:05:44.960
community were very possessive
link |
02:05:46.960
of their code they did not want to share their
link |
02:05:48.960
code they wanted it to be theirs it was their
link |
02:05:50.960
you know claim to fame and that
link |
02:05:52.960
was much more like what we tended
link |
02:05:54.960
to see with artists where you know the
link |
02:05:56.960
artists understand something about credit
link |
02:05:58.960
and I you know wanting it to be known
link |
02:06:00.960
as their work and a lot of the
link |
02:06:02.960
game programmers
link |
02:06:04.960
felt a little bit more like artists
link |
02:06:06.960
than like hacker programmers in that it was
link |
02:06:08.960
about building something that
link |
02:06:10.960
maybe felt more like art to them than
link |
02:06:12.960
the more tool based and
link |
02:06:14.960
exploration based kind of
link |
02:06:16.960
hacking culture side of things
link |
02:06:18.960
it's so interesting that this kind of
link |
02:06:22.960
fear that credit will not be
link |
02:06:24.960
sufficiently attributed to you
link |
02:06:26.960
and that's one of the things that I do
link |
02:06:28.960
bump into a lot because
link |
02:06:30.960
I try not
link |
02:06:32.960
to go I mean it's easy for
link |
02:06:34.960
me to say because so much credit is heaped on
link |
02:06:36.960
me for the id software side of
link |
02:06:38.960
things but when people come up and
link |
02:06:40.960
they want to pick a fight and say no it's
link |
02:06:42.960
like that wasn't where first person gaming
link |
02:06:44.960
came from and you can point to
link |
02:06:46.960
you know you can point to some of like things
link |
02:06:48.960
on obscure titles that I was never aware
link |
02:06:50.960
of or like the old Play Doh systems
link |
02:06:52.960
or you know each personal computer
link |
02:06:54.960
had something that was 3D
link |
02:06:56.960
and moving around and I'm
link |
02:06:58.960
you know and I'm happy to say it's like no
link |
02:07:00.960
I mean I saw Battlezone and Star Wars
link |
02:07:02.960
in the arcades I had seen 3D graphics
link |
02:07:04.960
I had seen all these things they're
link |
02:07:06.960
standing on the shoulders of lots of other people
link |
02:07:08.960
but sometimes these examples they pull out
link |
02:07:10.960
like I didn't know that existed I mean
link |
02:07:12.960
there I had never heard of that before
link |
02:07:14.960
then that didn't contribute to
link |
02:07:16.960
what I made but there's plenty of stuff that
link |
02:07:18.960
did and you know I
link |
02:07:20.960
I think there's good cases to be made
link |
02:07:22.960
that obviously Doom and Quake
link |
02:07:24.960
and Wolfenstein were formative examples
link |
02:07:26.960
for what
link |
02:07:28.960
everything that came after
link |
02:07:30.960
that but I don't feel
link |
02:07:32.960
the need to go fight and say claim
link |
02:07:34.960
primacy or initial invention
link |
02:07:36.960
of anything like that but a lot of people
link |
02:07:38.960
do want to. I think when you fight
link |
02:07:40.960
for the credit in that way
link |
02:07:42.960
and it does go against the hacker ethic
link |
02:07:44.960
you destroy
link |
02:07:46.960
something fundamental about the culture, about the
link |
02:07:48.960
community that builds cool stuff
link |
02:07:50.960
I think credit ultimately
link |
02:07:52.960
so
link |
02:07:54.960
I had this
link |
02:07:56.960
sort of there's a famous
link |
02:07:58.960
wrestler and freestyle wrestling
link |
02:08:00.960
called
link |
02:08:02.960
and he always preached
link |
02:08:04.960
that you should just focus
link |
02:08:06.960
on the art of the wrestling
link |
02:08:08.960
and let people
link |
02:08:10.960
write
link |
02:08:12.960
your story however they want
link |
02:08:14.960
the
link |
02:08:16.960
the highest form of the art is just
link |
02:08:18.960
focusing on the art and that's something
link |
02:08:20.960
that is something about the
link |
02:08:22.960
hacker ethic is just
link |
02:08:24.960
focus on building cool stuff
link |
02:08:26.960
sharing it with other cool people
link |
02:08:28.960
and credit will get
link |
02:08:30.960
assigned correctly
link |
02:08:34.960
in the long arc of history
link |
02:08:36.960
and I generally think that's true
link |
02:08:38.960
and you've got
link |
02:08:40.960
you know like there's some things
link |
02:08:42.960
there's a graphics technique that got labeled
link |
02:08:44.960
car max reverse
link |
02:08:46.960
literally named it and it turned out
link |
02:08:48.960
that I wasn't the first person to figure
link |
02:08:50.960
that out like most scientific
link |
02:08:52.960
things or mathematical things you might have
link |
02:08:54.960
like oh this other person had actually done that
link |
02:08:56.960
somewhat before and then there's
link |
02:08:58.960
things that get attributed to me like the inverse
link |
02:09:00.960
square root hack that I actually didn't
link |
02:09:02.960
do I flat out that wasn't me and it's like
link |
02:09:04.960
it's weird how the memetic power
link |
02:09:06.960
of the internet I cannot
link |
02:09:08.960
convince people of that
link |
02:09:10.960
everything just gets attributed to you now
link |
02:09:12.960
even though you've never
link |
02:09:14.960
sought that the credit of things
link |
02:09:16.960
I mean but part
link |
02:09:18.960
of the fact that the humility behind
link |
02:09:20.960
that is what attracts the
link |
02:09:22.960
attributions
link |
02:09:24.960
let's talk about a game
link |
02:09:26.960
you mean one of the greatest games ever made
link |
02:09:28.960
I know you could talk about doing quake
link |
02:09:30.960
and so on but to me Wolfenstein 3D was like
link |
02:09:32.960
whoa
link |
02:09:34.960
it blew my mind
link |
02:09:36.960
that a world like this could exist so
link |
02:09:38.960
how did Wolfenstein 3D come to be
link |
02:09:40.960
in terms of the programming
link |
02:09:42.960
in terms of the design in terms of some of the
link |
02:09:44.960
memorable technical challenges
link |
02:09:46.960
and also
link |
02:09:48.960
actually just something you haven't mentioned
link |
02:09:50.960
you know
link |
02:09:52.960
how did these ideas
link |
02:09:54.960
come to be
link |
02:09:56.960
inside your mind the adaptive
link |
02:09:58.960
side scrolling so
link |
02:10:00.960
the solutions to these technical challenges
link |
02:10:02.960
so I usually can
link |
02:10:04.960
introspectively pull back
link |
02:10:06.960
pretty detailed
link |
02:10:08.960
accounts of how technology solutions
link |
02:10:10.960
and design choices on my part
link |
02:10:12.960
came to be where
link |
02:10:14.960
technically we had done two games
link |
02:10:16.960
3D games like that before
link |
02:10:18.960
where hover tank was the first one
link |
02:10:20.960
which had flat shaded walls
link |
02:10:22.960
but did have the scaled enemies inside it
link |
02:10:24.960
and then catacombs 3D
link |
02:10:26.960
which had textured walls
link |
02:10:28.960
scaled enemies and
link |
02:10:30.960
some more
link |
02:10:32.960
some more functionality like the
link |
02:10:34.960
disappearing walls and some other stuff
link |
02:10:36.960
but what's really interesting from a
link |
02:10:38.960
game development standpoint is
link |
02:10:40.960
those games catacombs 3D
link |
02:10:42.960
hover tank and Wolfenstein
link |
02:10:44.960
they literally used
link |
02:10:46.960
the same code for
link |
02:10:48.960
a lot of the character behavior that a 2D
link |
02:10:50.960
game that I had made earlier called catacombs
link |
02:10:52.960
did where
link |
02:10:54.960
it was an overhead view game kind of like gauntlet
link |
02:10:56.960
you're running around and you can open up doors
link |
02:10:58.960
pick up items basic game stuff
link |
02:11:00.960
and the thought was
link |
02:11:02.960
that this exact same
link |
02:11:04.960
game experience just
link |
02:11:06.960
presented in a different perspective
link |
02:11:08.960
it could be literally the same game
link |
02:11:10.960
just with a different view into it
link |
02:11:12.960
would have a dramatically different
link |
02:11:14.960
impact on the players
link |
02:11:16.960
so it wasn't
link |
02:11:18.960
a true 3D you're saying that
link |
02:11:20.960
you can kind of take it
link |
02:11:22.960
you can scale enemies meaning things that are
link |
02:11:24.960
farther away you can make them smaller
link |
02:11:26.960
so from the game was
link |
02:11:28.960
a 2D map like all of our games
link |
02:11:30.960
use the same tool for creation
link |
02:11:32.960
we use the same map editor for creating
link |
02:11:34.960
keen as Wolfenstein and
link |
02:11:36.960
hevertank and catacombs and all this stuff
link |
02:11:38.960
so the game was a 2D grid
link |
02:11:40.960
made out of blocks and you
link |
02:11:42.960
could say well these are walls these are where
link |
02:11:44.960
the enemies start then they start moving around
link |
02:11:46.960
and these early games like catacombs
link |
02:11:48.960
you played it strictly in a 2D view
link |
02:11:50.960
it was a scrolling 2D view
link |
02:11:52.960
and that was kind of using an adaptive tile refresh
link |
02:11:54.960
at the time to be able to do something
link |
02:11:56.960
like that and then
link |
02:11:58.960
the thought that these early
link |
02:12:00.960
games all it did was take the same
link |
02:12:02.960
basic enemy logic but
link |
02:12:04.960
instead of seeing it from the god's eye view
link |
02:12:06.960
on top you were inside it
link |
02:12:08.960
and turning from side to side yawing
link |
02:12:10.960
your view and moving forwards and backwards
link |
02:12:12.960
and side to side and
link |
02:12:14.960
it's a striking thing where you always talk
link |
02:12:16.960
about wanting to isolate and factor changes
link |
02:12:18.960
in values and this was one of those
link |
02:12:20.960
most pure cases there where
link |
02:12:22.960
the rest of the game changed very little
link |
02:12:24.960
it was our normal kind of change the colors
link |
02:12:26.960
on something and draw a different picture
link |
02:12:28.960
for it but it's kind of the same thing
link |
02:12:30.960
but the perspective changed in a really
link |
02:12:32.960
fundamental way and
link |
02:12:34.960
it was dramatically different
link |
02:12:36.960
I can remember the reactions
link |
02:12:38.960
where the artist Adrian
link |
02:12:40.960
that had been drawing the pictures for
link |
02:12:42.960
we had a cool big troll thing in catacombs 3D
link |
02:12:44.960
and we had these walls
link |
02:12:46.960
that you could get a key and you could make
link |
02:12:48.960
the blocks disappear and really simple stuff
link |
02:12:50.960
blocks could either be there or not there
link |
02:12:52.960
so our idea of a door was
link |
02:12:54.960
being able to make a set of blocks just disappear
link |
02:12:56.960
and I remember the reaction
link |
02:12:58.960
when he had drawn these characters and he was slowly
link |
02:13:00.960
moving around and people
link |
02:13:02.960
had no experience with 3D navigation
link |
02:13:04.960
it was all still keyboard, we didn't even have mice
link |
02:13:06.960
set up at that time
link |
02:13:08.960
but slowly moving, going up
link |
02:13:10.960
picked up a key, go to a wall
link |
02:13:12.960
the wall disappears in a little animation
link |
02:13:14.960
and there's a monster right there
link |
02:13:16.960
and he practically fell out of his chair
link |
02:13:18.960
and games just
link |
02:13:20.960
didn't do that
link |
02:13:22.960
the games were the gods eye view
link |
02:13:24.960
you were a little invested in your little guy
link |
02:13:26.960
you know, happy or sad when things
link |
02:13:28.960
happened but you just did not get that
link |
02:13:30.960
kind of startle reaction
link |
02:13:32.960
something in your face, something in the back of your brain
link |
02:13:34.960
some reptile brain thing
link |
02:13:36.960
is just going oh shit, something just happened
link |
02:13:38.960
and that was one of those
link |
02:13:40.960
early points where it's like yeah
link |
02:13:42.960
this is going to make a difference
link |
02:13:44.960
this is going to be powerful and it's going to matter
link |
02:13:46.960
were you able to imagine that
link |
02:13:48.960
in the idea stage or no
link |
02:13:50.960
so not that exact thing
link |
02:13:52.960
so again, we had cases
link |
02:13:54.960
like the arcade games battle zone
link |
02:13:56.960
and star wars that you could kind of
link |
02:13:58.960
see a 3D world and things coming at you
link |
02:14:00.960
and you get some sense of it
link |
02:14:02.960
but nothing had done the kind
link |
02:14:04.960
of worlds that we were doing and the sort of
link |
02:14:06.960
action based things, 3D
link |
02:14:08.960
at the time was
link |
02:14:10.960
really largely about the simulation
link |
02:14:12.960
thoughts and this is something
link |
02:14:14.960
that really might have
link |
02:14:16.960
trended differently if not for
link |
02:14:18.960
the id software approach in the games
link |
02:14:20.960
where there were flight simulators
link |
02:14:22.960
there were driving simulators
link |
02:14:24.960
you had like hard drive in
link |
02:14:26.960
and Microsoft flight simulator
link |
02:14:28.960
and these were doing 3D and general purpose
link |
02:14:30.960
3D in ways that were
link |
02:14:32.960
more flexible than what we were doing with our
link |
02:14:34.960
games but they were looked at as
link |
02:14:36.960
simulations, they weren't trying to
link |
02:14:38.960
necessarily be fast or responsive
link |
02:14:40.960
or letting you do
link |
02:14:42.960
kind of exciting maneuvers
link |
02:14:44.960
because they were trying to simulate reality
link |
02:14:46.960
and they were taking their cues from the big systems
link |
02:14:48.960
the Evans in Sutherland and the silicon
link |
02:14:50.960
graphics that were doing things
link |
02:14:52.960
but we were taking our cues from
link |
02:14:54.960
the console and arcade games
link |
02:14:56.960
we wanted things that were
link |
02:14:58.960
sort of quarter eaters that were doing fast
link |
02:15:00.960
pace things that you could smack you around
link |
02:15:02.960
rather than just smoothly gliding you
link |
02:15:04.960
from place to place
link |
02:15:06.960
quarter eaters
link |
02:15:08.960
and you know a funny thing is
link |
02:15:10.960
so much that that built into us
link |
02:15:12.960
that Wolfenstein still had
link |
02:15:14.960
lives and you had like one of the biggest power ups
link |
02:15:16.960
in all these games like was an extra life
link |
02:15:18.960
because you started off with 3 lives
link |
02:15:20.960
and you lose your lives and then it's game over
link |
02:15:22.960
and there weren't save games in
link |
02:15:24.960
most of this stuff
link |
02:15:26.960
it sounds almost crazy to say this
link |
02:15:28.960
but it was an innovation in DOOM
link |
02:15:30.960
to not have lives
link |
02:15:32.960
you could just play DOOM as long as you wanted
link |
02:15:34.960
you just restart at the start of the level
link |
02:15:36.960
and why not?
link |
02:15:38.960
we aren't trying to take people's quarters
link |
02:15:40.960
they've already paid for the entire game
link |
02:15:42.960
we want them to have a good time
link |
02:15:44.960
and you would have some
link |
02:15:46.960
I think that there's something to the epic journey
link |
02:15:48.960
of making it to the end having to restart
link |
02:15:50.960
all the way from the beginning after a certain number
link |
02:15:52.960
of tries but now more fun is had
link |
02:15:54.960
when you just let people kind of keep trying
link |
02:15:56.960
when they're stuck rather than having to go
link |
02:15:58.960
all the way back and learn different things
link |
02:16:00.960
so you've recommended the
link |
02:16:02.960
game engine black book Wolfenstein 3D
link |
02:16:04.960
for technical exploration of the game
link |
02:16:06.960
so looking back
link |
02:16:08.960
30 years
link |
02:16:10.960
what are some memorable technical innovations
link |
02:16:12.960
that made this perspective
link |
02:16:14.960
shift into this world that's
link |
02:16:16.960
so immersive that scares you when a monster appears
link |
02:16:18.960
or some things you have to solve?
link |
02:16:20.960
so one of the interesting things
link |
02:16:22.960
that come back to the theme of
link |
02:16:24.960
deadlines and resource constraints
link |
02:16:26.960
the game catacombs 3D
link |
02:16:28.960
we shipped
link |
02:16:30.960
we were supposed to be shipping this for gamers edge
link |
02:16:32.960
on a monthly cadence and I had
link |
02:16:34.960
slipped I was actually
link |
02:16:36.960
late it slipped like six weeks because
link |
02:16:38.960
this was texture mapped walls
link |
02:16:40.960
doing stuff that I hadn't done before
link |
02:16:42.960
and
link |
02:16:44.960
at the six week point it was
link |
02:16:46.960
still kind of glitchy and buggy
link |
02:16:48.960