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