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
link |
and he was slowly moving around
link |
and like people had no experience with 3D navigation.
link |
It was all still keyboard.
link |
We didn't even have mice set up at that time,
link |
but slowly moving, going up, picked up a key, go to a wall.
link |
The wall disappears in a little animation
link |
and there's a monster like right there.
link |
And he practically fell out of his chair.
link |
It was just like, ah, and games just didn't do that.
link |
You know, the games were the God's eye view.
link |
You were a little invested in your little guy.
link |
You can be like, you know, happy or sad when things happen,
link |
but you just did not get that kind of startled reaction.
link |
You weren't inside the game.
link |
Something in the back of your brain,
link |
some reptile brain thing is just going,
link |
oh shit, something just happened.
link |
And that was one of those early points where it's like,
link |
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,
link |
widely considered to be one of the greatest programmers
link |
He was the cofounder of id Software
link |
and the lead programmer on several games
link |
that revolutionized the technology, the experience,
link |
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,
link |
helping to create portals into virtual worlds
link |
and to define the technological path
link |
to the metaverse and meta.
link |
And now he has been shifting some of his attention
link |
to the problem of artificial general intelligence.
link |
This was the longest conversation on this podcast
link |
at over five hours.
link |
And still, I could talk to John many, many more times,
link |
and we hope to do just that.
link |
This is the Lux Readman podcast.
link |
To support it, please check out our sponsors
link |
in the description.
link |
And now, dear friends, here's John Carmack.
link |
What was the first program you've ever written?
link |
So I remember being in a radio shack
link |
going up to the TRS 80 computers
link |
and learning just enough to be able to do
link |
10 print John Carmack.
link |
And it's kind of interesting how, of course,
link |
Carnegie and Ritchie kind of standardized Hello World
link |
as the first thing that you do
link |
in every computer programming language in every computer,
link |
but not having any interaction
link |
with the cultures of Unix or any other standardized things.
link |
It was just like, well, what am I gonna say?
link |
I'm gonna say my name.
link |
And then you learn how to do go to 10
link |
and have it scroll all off the screen.
link |
And that was definitely the first thing
link |
that I wound up doing on a computer.
link |
Can I ask you a programming advice?
link |
I was always told in the beginning
link |
that you're not allowed to use go to statements.
link |
That's really bad programming.
link |
Is this correct or not?
link |
Jumping around code, can we look at the philosophy
link |
and the technical aspects of the go to statement
link |
that seems so convenient,
link |
but it's supposed to be bad programming?
link |
Well, so certainly back in the day
link |
in basic programming languages,
link |
you didn't have proper loops.
link |
You didn't have four whiles and repeats.
link |
That was the land of Pascal for people
link |
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,
link |
which were a thousand line basic program
link |
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,
link |
add a little patch.
link |
And there's reasons why structured programming
link |
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
link |
like nested breaks or something
link |
where it can sometimes be better to do a go to cleanup
link |
or go to error rather than having multiple flags,
link |
multiple if statements littered throughout things.
link |
I mean, if you gripped through all of my code right now,
link |
I don't think any of my current code bases
link |
would actually have a go to,
link |
but deep within sort of the technical underpinnings
link |
of a major game engine,
link |
you're gonna have some go tos in a couple of places probably.
link |
Yeah, the infrastructure on top of,
link |
like the closer you get to machine code,
link |
the more go tos you're gonna see,
link |
the more of these like hacks you're going to see
link |
because the set of features available to you
link |
in low level programming languages is not, is limited.
link |
So print John Carmack,
link |
when is the first time,
link |
if we could talk about love,
link |
that you fell in love with programming?
link |
You said like, this is really something special.
link |
It really was something
link |
that was one of those love at first sight things
link |
where just really from the time
link |
that I understood what a computer was even,
link |
I mean, I remember looking through old encyclopedias
link |
of the black and white photos of the IBM mainframes
link |
at the reel to reel tape decks.
link |
And for people nowadays,
link |
it can be a little hard to understand
link |
what the world was like then from information gathering
link |
where I would go to the libraries
link |
and there would be a couple books on the shelf
link |
about computers and they would be very out of date
link |
even at that point, just not a lot of information,
link |
but I would grab everything that I could find
link |
and devour everything.
link |
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,
link |
this idea that the computer would just do exactly
link |
what you told it to.
link |
I mean, and there's a little bit of the genie monkey's paw
link |
sort of issues there where you'd better be really,
link |
really careful with what you're telling it to do,
link |
but it wasn't gonna back talk you.
link |
It wasn't gonna have a different point of view.
link |
It was gonna carry out what you told it to do.
link |
And if you had the right commands,
link |
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
link |
where you find at the start,
link |
you're just learning how to do
link |
the most basic possible things.
link |
And I can remember stuff like a Superman comic
link |
that RadioShack commissioned to have,
link |
it's like Superman had lost some of his super brain
link |
and kids had to use RadioShack TRS 80 computers
link |
to do calculations for it to help him
link |
kind of complete his heroics.
link |
And I'd find little things like that
link |
and then get a few basic books
link |
to be able to kind of work my way up.
link |
And again, it was so precious back then.
link |
I had a couple of books
link |
that would teach me important things about it.
link |
I had one book that I could start to learn
link |
a little bit of assembly language from,
link |
and I'd have a few books on basic
link |
and some things that I could get from the libraries.
link |
But my goals in the early days
link |
was almost always making games of various kinds.
link |
I loved the arcade games and the early Atari 2600 games.
link |
And being able to do some of those things myself
link |
on the computers was very much what I aspired to.
link |
And it was a whole journey where
link |
if you learn normal basic,
link |
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 sword attack troll, that type of thing.
link |
And that can be done in the context of basic.
link |
But to do things that had moving graphics,
link |
there were only the most limited things
link |
you could possibly do.
link |
You could maybe do breakout or pong
link |
or that sort of thing in low resolution graphics.
link |
And in fact, one of my first sort of major technical hacks
link |
that I was kind of fond of was on the Apple II computers,
link |
they had a mode called low resolution graphics
link |
where of course all graphics were low resolution back then,
link |
but regular low resolution graphics,
link |
it was a grid of 40 by 40 pixels normally,
link |
but they could have 16 different colors.
link |
And I wanted to make a game kind of like
link |
the arcade game Vanguard, just a scrolling game.
link |
And I wanted to just kind of have it scroll vertically up.
link |
And I could move a little ship around.
link |
You could manage to do that in basic,
link |
but there's no way you could redraw the whole screen.
link |
And I remember at the time just coming up
link |
with what felt like a brainstorm to me
link |
where I knew enough about the way the hardware was controlled
link |
where the text screen and the low resolution graphics screen
link |
were basically the same thing.
link |
And all those computers could scroll their text screen
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
link |
things that I barely understood to put it into a graphics mode
link |
and I could draw graphics and then I could just
link |
do a line feed at the very bottom of the screen.
link |
And then the system would scroll it all up
link |
using an assembly language routine
link |
that I didn't know how to write back then.
link |
So that was like this first great hack
link |
that sort of had analogs later on in my career
link |
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 |
It 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
link |
the screen, which was interesting in that that played
link |
a big part later on in the id Software days as well.
link |
So do efficient drawing where you
link |
don't have to draw the whole screen,
link |
but you draw from the bottom using
link |
the thing that was designed in the hardware for text output.
link |
Where so much of, until recently,
link |
game design was limited by what you could actually
link |
get the computer to do.
link |
Where it's easy to say, 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
link |
were all these things everybody wanted to do.
link |
But if they knew enough programming
link |
to be able to make it happen, it would happen too slow
link |
to be a good experience.
link |
Either just ridiculously slow or just slow enough
link |
that it wasn't fun to experience it like that.
link |
So much of the first couple of decades of the programming work
link |
that I did was largely figuring out
link |
how to do something that everybody
link |
knows how they want it to happen.
link |
It just has to happen 2 to 10 times faster
link |
than the straightforward way of doing things
link |
would make it happen.
link |
And it's different now because at this point, lots of things
link |
you can just do in the most naive possible way,
link |
and it still works out.
link |
You don't have nearly the creative limitations
link |
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, I'm not going
link |
to do the angry old man shaking my fist at the clouds bit
link |
where back in my day, programmers
link |
had to do real programming.
link |
It's amazing that you can just pick an idea
link |
and go do it right now.
link |
And you don't have to be some assembly language wizard
link |
or deep GPU arcanist to be able to figure out
link |
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
link |
and say that probably the thing that will define the future
link |
still requires you to operate at the limits
link |
of the current system.
link |
So we'll probably talk about this.
link |
But if you talk about building the metaverse
link |
and building a VR experience that's compelling,
link |
it probably requires you to not, to go to assembly
link |
or maybe not literally, but sort of spiritually
link |
to go to the limits of what the system is capable of.
link |
And that really was why virtual reality
link |
was specifically interesting to me
link |
where it had all the ties to,
link |
you could say that even back in the early days,
link |
I have some old magazine articles
link |
that's talking about Doom as a virtual reality experience
link |
back when just seeing anything in 3D.
link |
So you could say that we've been trying to build
link |
those virtual experiences from the very beginning.
link |
And in the modern era of virtual reality,
link |
especially on the mobile side of things,
link |
when it's standalone and you're basically using
link |
a cell phone chip to be able to produce
link |
these very immersive experiences,
link |
it does require work.
link |
It's not at the level of what an old school
link |
console game programmer would have operated at
link |
where you're looking at hardware registers
link |
and you're scheduling all the DMA accesses,
link |
but it is still definitely a different level
link |
than what a web developer or even a PC Steam game developer
link |
usually has to work at.
link |
And again, it's great.
link |
There's opportunities for people that wanna operate
link |
at either end of that spectrum there
link |
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?
link |
Your favorite, but also the best.
link |
You've seen throughout your career,
link |
you're considered by many to be
link |
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
link |
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 |
But so what I use, so nowadays I do program
link |
a reasonable amount of Python for AI, ML 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
link |
where there's some amazing stats when you say,
link |
if you just start, if you make a loop,
link |
a triply nested loop and start doing operations in Python,
link |
you can be thousands to potentially a million times slower
link |
than a proper GPU tensor operation.
link |
And these are staggering numbers.
link |
You can be as much slower as we've almost gotten faster
link |
in our pace of progress and all this other miraculous stuff.
link |
So your intuitions about inefficiencies
link |
within the Python sort of...
link |
It keeps hitting me upside the face
link |
where it's gotten to the point now I understand.
link |
It's like, okay, you just can't do a loop
link |
if you care about performance in Python.
link |
You have to figure out how you can reformat this
link |
into some big vector operation
link |
or something that's going to be done completely
link |
within a C++ library.
link |
But the other hand is it's amazingly convenient
link |
and you just see stuff that people are able
link |
to cobble together by you just import
link |
a few different things and you can do stuff
link |
that nobody on earth could do 10 years ago.
link |
And you can do it in a little cookbook thing
link |
that you copy paste it out of a website.
link |
So that is really great.
link |
When I'm sitting down to do what I consider
link |
kind of serious programming, it's still in C++.
link |
And it's really kind of a C flavored C++ at that
link |
where I'm not big into the modern template
link |
metaprogramming sorts of things.
link |
I see a lot of train wrecks coming from
link |
some of that over abstraction.
link |
I spent a few years really going kind of deep
link |
into the kind of the historical Lisp work
link |
and Haskell and some of the functional programming
link |
And there is a lot of value there
link |
in the way you think about things.
link |
And I changed a lot of the way I write my C and C++ code
link |
based on what I learned about the value
link |
that comes out of not having this random mutable state
link |
that you kind of lose track of.
link |
Because something that many people don't really appreciate
link |
till they've been at it for a long time
link |
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
link |
how fast you wrote it or how fast it operates,
link |
but it's how can it bend and adapt
link |
as situations change.
link |
And then the thing that I've really been learning
link |
in my time at Meta with the Oculus and VR work
link |
is it's also how well it hands off
link |
between the continuous kind of revolving door of programmers
link |
taking over maintenance and different things
link |
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
link |
where in some cases languages
link |
that are not generally thought well of for many reasons,
link |
like C is derided pretty broadly that yes,
link |
obviously all of these security flaws
link |
that happen with the memory and unsafeness
link |
and buffer overruns and the things that you've got there,
link |
but there is this underappreciated aspect
link |
to the language is so simple, anyone can go.
link |
And if you know C, you can generally jump in someplace
link |
and not have to learn what paradigms they're using
link |
because there just aren't that many available.
link |
I think there's some really, really well written C code.
link |
Like I find it great that if I'm messing around
link |
with something in open BSD say,
link |
I mean, I can be walking around in the kernel
link |
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
link |
to make whatever change that I need to
link |
while you can have more significant languages.
link |
Like it's a downside of Lisp
link |
where I don't regret the time that I spent with Lisp.
link |
I think that it did help my thinking
link |
about programming in some ways,
link |
but the people that are the biggest defenders of Lisp
link |
are saying how malleable of a language it is
link |
that if you write a huge Lisp program,
link |
you've basically invented your own kind of language
link |
and structure because it's not the primitives
link |
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,
link |
kind of one of the more modern Lisp versions,
link |
it's essentially touted as a language
link |
for building other languages.
link |
And I understand the value of that
link |
for a tiny little project,
link |
but the idea of that for one of these longterm
link |
supported by lots of people kind of horrifies me
link |
where all of those abstractions that you're like,
link |
okay, you can't touch this code till you educate yourself
link |
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,
link |
a lot of the criticisms of that are it's like,
link |
wow, this is not a state of the art language.
link |
This language is just so simple and almost crude.
link |
And you could see the programming language people
link |
just looking down at it.
link |
But it does seem to be quite popular as basically saying,
link |
this is the good things about C,
link |
everybody can just jump right in and use it.
link |
You don't need to restructure your brain
link |
to write good code in it.
link |
So I wish that I had more opportunity
link |
for doing some work in Go.
link |
Rust is the other modern language that everybody talks about
link |
that I'm not fit to pass judgment on.
link |
I've done a little bit beyond Hello World.
link |
I wrote some like video decompression work in Rust
link |
just as an exercise, but that was a few years ago
link |
and I haven't really used it since.
link |
The best programming language is the one that works generally
link |
that you're currently using.
link |
Because that's another trap is in almost every case
link |
I've seen when people mixed languages on a project,
link |
I would rather stay just in one language
link |
so that everybody can work across the entire thing.
link |
And we have, I get meta, we have a lot of projects
link |
that use kind of React frameworks.
link |
So you've got JavaScript here
link |
and then you have C++ for real work.
link |
And then you may have Java interfacing
link |
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
link |
with Boz at Facebook about it where like,
link |
man, I wish we could have just said,
link |
we're only hiring C++ programmers.
link |
And he just thought from the Facebook meta perspective,
link |
well, we just wouldn't be able to find enough.
link |
With the thousands of programmers they've got there,
link |
it is not necessarily a dying breed,
link |
but you can sure find a lot more Java
link |
or JavaScript programmers.
link |
And I kind of mentioned that to Elon one time
link |
and he was kind of flabbergasted about that.
link |
It's like, well, you just,
link |
you go out and you find those programmers
link |
and you don't hire the other programmers
link |
that don't do the languages that you wanna use.
link |
But right now, I guess, yeah,
link |
they're using JavaScript on a bunch of the SpaceX work
link |
for the UI side of things.
link |
When you go find UI programmers,
link |
they're JavaScript programmers.
link |
I wonder if that's because there's a lot
link |
of JavaScript programmers.
link |
Because I do think that great programmers are rare.
link |
That it's not, you know, if you just look at statistics
link |
of how many people are using different programming languages,
link |
that doesn't tell you the story
link |
of what the great programmers are using.
link |
And so you have to really look at what you were speaking to,
link |
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 is something about C++
link |
that has elements of creativity,
link |
but forces you to be an adult about your programming.
link |
It expects you to be an adult.
link |
It does not force you to.
link |
And so it brings out people that are willing to be creative
link |
in terms of building large systems
link |
and coming up with interesting solutions,
link |
but at the same time have the sort of the good
link |
software engineering practices that amend themselves
link |
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,
link |
and humans are long gone, something tells me
link |
that most of the systems they find will be run by humans.
link |
Will be running JavaScript.
link |
I kind of think that if we're living in a simulation,
link |
it's written in JavaScript.
link |
You know, for the longest time, even still,
link |
JavaScript didn't get any respect,
link |
and yet it runs so much of the world,
link |
and an increasing number of the world.
link |
Is it possible that everything will be written
link |
in JavaScript one day?
link |
So the engineering under JavaScript
link |
is really pretty phenomenal.
link |
The systems that make JavaScript run as fast
link |
as it does right now are kind of miracles
link |
of modern engineering in many ways.
link |
It does feel like it is not an optimal language
link |
for all the things that it's being used for,
link |
or an optimal distribution system to build huge apps
link |
in something like this without type systems and so on.
link |
But I think for a lot of people,
link |
it does reasonably the necessary things.
link |
It's still a C flavored language.
link |
It's still a braces and semicolon language.
link |
It's not hard for people to be trained in JavaScript
link |
and then understand the roots of where it came from.
link |
I think garbage collection is unequivocally a good thing
link |
for most programs to be written in.
link |
It's funny that I still, just this morning,
link |
I was seeing a Twitter thread
link |
of a bunch of really senior game dev people
link |
arguing about the virtues and costs of garbage collection.
link |
You will run into some people that are top notch programmers
link |
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
link |
on the vulnerabilities that have happened
link |
in C and C++ programs,
link |
sometimes written by the best programmers in the world.
link |
It's like nobody is good enough to avoid
link |
ever shooting themselves in the foot with that.
link |
You write enough C code,
link |
you're going to shoot yourself in the foot.
link |
And garbage collection is a very great thing
link |
for the vast majority of programs.
link |
It's only when you get into the tightest of real time things
link |
that you start saying, it's like, no,
link |
the garbage collection has more costs
link |
than it has benefits for me there,
link |
but that's not 99 plus percent
link |
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.
link |
It's the infrastructure around that surrounds it.
link |
All the libraries that you can get
link |
and the different stuff that you can,
link |
ways you can deploy it,
link |
the portability that it gives you.
link |
And JavaScript is really strong on a lot of those things
link |
where for a long time, and it still does if I look at it,
link |
the web stack about everything that has to go
link |
when you do something really trivial in JavaScript
link |
and it shows up on a web browser
link |
to kind of X ray through that
link |
and see everything that has to happen
link |
for your one little JavaScript statement
link |
to turn into something visible in your web browser,
link |
it's very, very disquieting,
link |
just the depth of that stack
link |
and the fact that so few people can even comprehend
link |
all of the levels that are going on there.
link |
But it's again, I have to caution myself
link |
to not be the in the good old days old man about it
link |
because clearly there's enormous value here.
link |
The world does run on JavaScript
link |
to a pretty good approximation there
link |
and it's not falling apart.
link |
There's a bunch of scary stuff
link |
where you look at console logs
link |
and you just see all of these bad things that are happening
link |
but it's still kind of limping along
link |
and nobody really notices.
link |
But so much of my systems design
link |
and systems analysis goes around.
link |
You should understand what the speed of light is,
link |
like what would be the best you could possibly do here.
link |
And it sounds horrible, but in a lot of cases,
link |
you can be a thousand times off your speed of light,
link |
velocity for something and it's still be okay.
link |
And in fact, it can even sometimes still be
link |
the optimal thing in a larger system standpoint
link |
where there's a lot of things
link |
that you don't wanna have to parachute in someone like me
link |
to go in and say, make this webpage run
link |
a thousand times faster,
link |
make this web app into a hardcore native application
link |
that starts up in 37 milliseconds
link |
and everything responds in less than one frame latency.
link |
That's just not necessary.
link |
And if somebody wants to go pay me millions of dollars
link |
to do software like that,
link |
when they can take somebody right out of a bootcamp
link |
and say, spin up an application for this.
link |
Often being efficient is not really the best metric.
link |
And it's like, that applies in a lot of areas
link |
where it's kind of interesting how a lot of our appliances
link |
and everything are all built around energy efficiency,
link |
sometimes at the expense of robustness in some other ways
link |
or higher costs in other ways
link |
where there's interesting things
link |
where energy or electricity could become much cheaper
link |
in a future world.
link |
And that could change our engineering trade offs
link |
for the way we build certain things
link |
where you could throw away efficiency
link |
and actually get more benefits that actually matter.
link |
I mean, that's one of the directions
link |
I was considering swerving into was nuclear energy.
link |
When I was kind of like, what do I wanna do next?
link |
It was either gonna be cost effective nuclear fission
link |
or artificial general intelligence.
link |
And one of my pet ideas there is like,
link |
people don't understand how cheap nuclear fuel is.
link |
And there would be ways that,
link |
you could be a quarter of the efficiency or less,
link |
but if it wound up making your plant 10 times cheaper,
link |
that could be a radical innovation in something like that.
link |
So there's like some of these thoughts
link |
around like direct fission energy conversion,
link |
fission fragment conversion,
link |
that maybe you build something
link |
that doesn't require all the steam turbines and everything,
link |
even if it winds up being less efficient.
link |
So that applies a lot in programming
link |
where it's always good to know what you could do.
link |
If you really sat down and took it far,
link |
because sometimes there's discontinuities
link |
like around user reaction times,
link |
there are some points where the difference between
link |
operating in one second and 750 milliseconds,
link |
You'll see it in webpage statistics,
link |
but most of the usability stuff, not that great.
link |
But if you get down to 50 milliseconds,
link |
then all of a sudden this just feels amazing.
link |
It's just like doing your bidding instantly
link |
rather than you're giving it a command,
link |
twiddling your thumbs, waiting for it to respond.
link |
So sometimes it's important to really crunch hard
link |
to get over some threshold,
link |
but there are broad basins in the value metric
link |
for lots of work where it just doesn't pay
link |
to even go that extra mile.
link |
And there are craftsmen that just don't wanna buy that
link |
and more power to them.
link |
If somebody just wants to say,
link |
no, I'm going to be, my pride is in my work,
link |
I'm never going to do something
link |
that's not as good as I could possibly make it,
link |
I respect that and sometimes I am that person,
link |
but I try to focus more on the larger value picture
link |
and you do pick your battles
link |
and you deploy your resources in the play
link |
that's going to give you the best user value in the end.
link |
Well, if you look at the evolution of life on Earth
link |
as a kind of programming effort,
link |
it seems like efficiency isn't the thing
link |
that's being optimized for.
link |
Like natural selection is very inefficient,
link |
but it kind of adapts and through the process
link |
of adaptations building more and more complex systems
link |
that are more and more intelligent,
link |
the final result is kind of pretty interesting.
link |
And so I think of JavaScript the same way.
link |
It's like this giant mess
link |
that things naturally die off if they don't work
link |
and if they become useful to people,
link |
they kind of naturally live
link |
and then you build this community,
link |
large community of people that are generating code
link |
and some code is sticky, some is not
link |
and nobody knows the inefficiencies or the efficiencies
link |
or the breaking points, like how reliable this code is
link |
and you kind of just run it, assume it works
link |
and then get unpleasantly surprised
link |
and then that's very kind of the evolutionary process.
link |
So that's a really good analogy
link |
and we can go a lot of places with that
link |
where in the earliest days of programming,
link |
when you had finite, you could count the bytes
link |
that you had to work on this,
link |
you had all the kind of hackers playing code golf
link |
to be one less instruction
link |
than the other person's multiply routine
link |
to kind of get through and it was so perfectly crafted.
link |
It was a crystal piece of artwork when you had a program
link |
because there just were not that many,
link |
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
link |
where again, if you did not have the resources to just say,
link |
well, we're gonna do billions and billions
link |
of programmable weights here,
link |
you have to turn it down into something
link |
that is symbolic and crafted like that
link |
but that's definitely not the way DNA and life
link |
and biological evolution and things work.
link |
On the one hand, it's almost humbling
link |
how little programming code is in our bodies.
link |
We've got a couple of billion base pairs
link |
and it's like this all fits on a thumb drive for years now
link |
and then our brains are even a smaller section of that.
link |
You've got maybe 50 megabytes
link |
and this is not like Shannon Limit perfectly
link |
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
link |
or they do things in very awkward ways
link |
but it is this process of just accumulation
link |
on top of things and you need scale,
link |
both you need scale for the population for that to work out
link |
and in the early days in the 50s and 60s,
link |
the kind of ancient era of computers
link |
where you could count when they say like
link |
when the internet started even in the 70s,
link |
there were like 18 hosts or something on it.
link |
It was this small finite number
link |
and you were still optimizing everything
link |
to be as good as you possibly could be
link |
but now it's billions and billions of devices
link |
and everything going on and you can have
link |
this very much natural evolution going on
link |
where lots of things are tried,
link |
lots of things are blowing up,
link |
venture capitalists lose their money
link |
when a startup invested in the wrong tech stack
link |
and things completely failed or failed the scale
link |
but good things do come out of it
link |
and it's interesting to see the mimetic evolution
link |
of the way different things happen
link |
like mentioning hello world at the beginning.
link |
It's funny how some little thing like that
link |
where everybody, every programmer knows hello world now
link |
and that was a completely arbitrary sort of decision
link |
that just came out of the dominance of Unix and C
link |
and early examples of things like that.
link |
So millions of experiments are going on all the time
link |
but some things do kind of rise to the top
link |
and win the fitness war for whether it's mind space
link |
or programming techniques or anything.
link |
Like there's a site on Stack Exchange called CodeGolf
link |
where people compete to write the shortest possible program
link |
for a particular task in all the different kinds
link |
of languages and it's really interesting to see
link |
folks kind of, they're masters of their craft,
link |
really play with the limits of programming languages.
link |
It's really beautiful to see
link |
and across all the different programming languages,
link |
you get to see some of these weird programming languages
link |
and mainstream ones, difference between Python 2 and 3,
link |
you get to see the difference between C and C++ and Java
link |
and you get to see JavaScript, all of that
link |
and it's kind of inspiring to see how much depth
link |
of possibility there is within programming languages
link |
that CodeGolf kind of tasks reveal.
link |
Most of us, if you do any kind of programming,
link |
you kind of do boring kind of very vanilla type of code.
link |
That's the way to build large systems
link |
but it's nice to see that the possibility
link |
of creative genius is still within those languages.
link |
It's laden within those languages.
link |
So given that you are once again,
link |
one of the greatest programmers ever,
link |
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
link |
to the TPM organization and my biggest point was
link |
everything that we're doing really should flow
link |
from user value, 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
link |
just in the specific thing.
link |
Like CodeGolf is the sort of thing, it's a fun puzzle game
link |
but that really should not be a major motivator for you.
link |
It's like, we're solving problems for people
link |
or we're providing entertainment to people.
link |
We're doing something of value to people
link |
that's displacing something else in their life.
link |
So we wanna be providing a net value
link |
over what they could be doing
link |
but instead they're choosing to use our products.
link |
And that's where, I mean, it sounds trite or corny
link |
but I fundamentally do think that's how you make
link |
the world a better place.
link |
If you have given more value to people
link |
than it took you and your team to create,
link |
then the world's a better place.
link |
People have, they've gone from something of lesser value,
link |
chosen to use your product
link |
and their life feels better for that.
link |
And if you've produced that economically,
link |
that's a really good thing.
link |
On the other hand, if you spent ridiculous amounts of money
link |
you've just kind of shoveled a lot of cash
link |
into a wood chipper there
link |
and you should maybe not feel so good
link |
about what you're doing.
link |
So being proud about like a specific architecture
link |
or a specific technology or a specific code sequence
link |
that you've done, it's great to get a little smile
link |
like a tiny little dopamine hit for that
link |
but the top level metrics should be
link |
that you're building things of value.
link |
Now you can get into the argument about how you,
link |
what is user value?
link |
How do you actually quantify that?
link |
And there can be big arguments about that
link |
but it's easy to be able to say,
link |
okay, this pissed off user there is not getting value
link |
from what you're doing.
link |
This user over there with the big smile on their face,
link |
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
link |
that there is a concept of user value
link |
even if you have trouble exactly quantifying it,
link |
you can usually make relative arguments about it.
link |
Well, this was better than this, we've improved things.
link |
So being a servant to the user is your job
link |
when you're a developer, you wanna be producing something
link |
that other people are gonna find valuable.
link |
And if you are technically inclined
link |
then finding the right levers to be able to pull
link |
to be able to make a design that's going to produce
link |
the most value for the least amount of effort.
link |
And it always has to be kind of divided,
link |
there's a ratio there where you,
link |
it's a problem at the big tech companies,
link |
whether it's Meta Google, Apple, Microsoft, Amazon,
link |
companies that have almost infinite money.
link |
I mean, I know their CFO will complain
link |
that it's not infinite money
link |
but from most developers standpoints
link |
it really does feel like it.
link |
And it's almost counterintuitive
link |
that if you're working hard as a developer on something,
link |
there's always this thought,
link |
if only I had more resources, more people, more RAM,
link |
more megahertz, then my product will be better.
link |
And that sense that at certain points, it's certainly true
link |
that if you are really hamstrung by this,
link |
removing an obstacle will make a better product,
link |
But if you're not making your core design decisions
link |
in this fiercely competitive way
link |
where you're saying feature A or feature B,
link |
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 wanna necessarily have to pick out
link |
which one is better or how much better
link |
and tell team B that, sorry, we're not gonna do this
link |
because A is more important.
link |
But that notion of always having to really critically value
link |
what you're doing, your time, the resources you expend,
link |
even the opportunity cost of doing something else,
link |
that's super important.
link |
Well, let me ask you about the big debates
link |
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,
link |
the designer route of imagining
link |
sort of somebody using a thing
link |
and imagining a smile on their face,
link |
imagining the experience of love and joy
link |
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
link |
for like Linux, you imagine a developer
link |
that might come across this and use it
link |
and become happy and better off because of it.
link |
So where do you land on those things?
link |
So I imagine like Meta and Google
link |
will probably try to measure the thing.
link |
They'll try to, it's like you try to optimize engagement
link |
or something, let's measure engagement.
link |
And then I think there is a kind of,
link |
I mean, I admire the designer ethic of like,
link |
think of a future that's immeasurable
link |
and you try to make somebody in that future
link |
that's different from today happy.
link |
So I do usually favor,
link |
if you can get any kind of a metric that's good,
link |
by all means, listen to the data.
link |
But you can go too far there where we've had problems
link |
where it's like, hey, we had a performance regression
link |
because our fancy new telemetry system
link |
is doing a bazillion file writes
link |
to kind of archive this stuff
link |
because we needed to collect information
link |
to determine if we were doing,
link |
if our plans were good.
link |
So when information is available,
link |
you should never ignore it.
link |
I mean, all of it.
link |
For actual users using the thing,
link |
human beings using the thing,
link |
large number of human beings,
link |
and you get to see sort of a lot of large numbers.
link |
So there's the zero to one problem
link |
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
link |
is we have more than enough users now
link |
that anything somebody wants to try in VR,
link |
we have users that will be interested in that.
link |
You do not get to make a completely
link |
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,
link |
whether it's working in VR on your,
link |
like on your desktop replacement
link |
or communicating with people in different ways
link |
or playing the games.
link |
There are going to be probably millions of people,
link |
or at least if you pick some tiny niche
link |
that we're not in right now,
link |
there's still going to be thousands of people out there
link |
that have the headsets 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
link |
that fits whatever matrix of tendencies
link |
that you want to break the market down to,
link |
because it's a mistake to think about imaginary users
link |
when you've got real users that you could be working with.
link |
But on the other hand,
link |
there is value to having a kind of wholeness
link |
of vision for a product.
link |
And companies like Meta have,
link |
they understand the trade offs where you can have a company
link |
like SpaceX or Apple in the Steve Jobs era,
link |
where you have a very powerful leading personality
link |
that can micromanage at a very low level
link |
and can say it's like, no, that handle needs to be different
link |
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
link |
that have horror stories to tell
link |
about working there afterwards.
link |
My position is that you're at your best
link |
when you've got a leader that is at their limit
link |
of what they can kind of comprehend
link |
of everything below them.
link |
And they can have an informed opinion
link |
about everything that's going on.
link |
And you take somebody, you've got to believe
link |
that somebody that has 30, 40 years of experience,
link |
you would hope that they've got wisdom
link |
that the just out of bootcamp person contributing
link |
And that if they're like, well, that's wrong there,
link |
you probably shouldn't do it that way
link |
or even just don't do it that way, do it another way.
link |
So there's value there,
link |
but it can't go beyond a certain level.
link |
I mean, I have Steve Jobs stories of him saying things
link |
that are just wrong right in front of me
link |
about technical things because he was not operating
link |
But when it does work and you do get
link |
that kind of passionate leader
link |
that's thinking about the entire product
link |
and just really deeply cares
link |
about not letting anything slip through the cracks,
link |
I think that's got a lot of value.
link |
But the other side of that is the people saying that,
link |
well, we wanna have these independent teams
link |
that are bubbling up the ideas
link |
because it's almost it's anti capitalist
link |
or anti free market to say,
link |
it's like I want my grand, my great leader
link |
to go ahead and dictate all these points there
link |
where clearly free markets bring up things
link |
that you don't expect.
link |
Like in VR, we saw a bunch of things
link |
like it didn't turn out at all
link |
the way the early people thought
link |
were gonna be the key applications
link |
and things that would not have been approved
link |
by the dark cabal making the decisions
link |
about what gets into the store turn out
link |
to in some cases be extremely successful.
link |
So yeah, I definitely kind of wanted to be,
link |
there was a point where I did make a pitch.
link |
It's like, hey, make me VR dictator
link |
and I'll go in and get shit done.
link |
I am, and that's just, it's not in the culture at Meta.
link |
You know, and they understand the trade offs they,
link |
and that's just not the way,
link |
that's not the company that they want,
link |
the team that they wanna do.
link |
It's fascinating because VR and we'll talk about it more.
link |
It's still unclear to me
link |
in what way VR will change the world
link |
because it does seem clear that VR
link |
will somehow fundamentally transform this world
link |
and it's unclear to me how yet.
link |
Let me know when you wanna get into that.
link |
Well, hold on a second.
link |
So in the stick to the you being the best programmer ever.
link |
Okay, in the early days when you didn't have,
link |
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
link |
of John Carmack look like?
link |
How many hours is the keyboard?
link |
What was the source of calories that fueled the brain?
link |
What times did you wake up?
link |
So I was able to be remarkably consistent
link |
about what was good working conditions for me
link |
for a very long time.
link |
I was never one of the programmers
link |
that would do all nighters going through work
link |
for 20 hours straight.
link |
It's like my brain generally starts turning to mush
link |
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, six 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 |
and 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 two or three
link |
in the afternoon sometimes and then working again
link |
past midnight or two in the morning.
link |
And that was, when it was just me trying
link |
to make things happen and I was usually isolated off
link |
in my office, people generally didn't bother me much at in
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
link |
at the same time each day.
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 eight in the morning
link |
and trying to shift things around.
link |
Like I'm often doing experiments with myself
link |
about what should I be doing to be more productive
link |
and one of the things that I did realize was happening
link |
in recent months where I would go for a walk or a run.
link |
I cover like four miles a day and I would usually do that
link |
just as the sun's going down here in Texas now
link |
and it's still really damn hot but I'd go out
link |
at 8.30 or something and cover the time there
link |
and then the showering and it was putting a hold in my day
link |
where I would have still a couple hours after that
link |
and sometimes my best hours were at night
link |
when nobody else is around, nobody's bothering me
link |
but that hole in the day was a problem
link |
so just a couple weeks ago, I made the change
link |
to go ahead and say, all right,
link |
I'm gonna get up a little earlier,
link |
I'm gonna 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, it was 60 hours a week
link |
for a very long time.
link |
To some degree, I had a little thing in the back of my head
link |
where I was almost jealous of some of the programmers
link |
that would do these marathon sessions
link |
and I had like 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 like always a little bothered
link |
that that wasn't me, that I wouldn't go program
link |
20 hours straight 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 it never, you're 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 I always try
link |
to get eight hours of sleep.
link |
It's not this, you know, push yourself harder,
link |
get up earlier, I just do worse work
link |
where, you know, you can work a hundred hours a week
link |
and still 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 a game dev made
link |
that I know there's a backlash against really hard work
link |
in a lot of cases and I get into online arguments
link |
about this all the time but he was basically saying,
link |
yeah, 40 hours a week, 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, working more 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
link |
and just say, it's like, no, they should just stop.
link |
And we had, I kind of came back around to that
link |
a couple of years ago where I was using
link |
the fictional example of, all right, some people say,
link |
they'll say with a straight face, they think, no,
link |
you are less productive if you work
link |
more than 40 hours a week.
link |
And they're generally misinterpreting things
link |
where your marginal productivity for an hour
link |
after eight hours 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 impact,
link |
to crash into Earth, 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 gonna go 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,
link |
do you want all of these scientists working on treatments
link |
and vaccines 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 |
Well, 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, 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
link |
of productivity, 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, it's like Jiro dreams of sushi.
link |
If you really dedicate yourself completely
link |
to making the sushi, to really putting in the long hours,
link |
day after day after day, you become a true craftsman
link |
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 |
you could 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 gainsay anybody
link |
that wants to work 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 |
working longer 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
link |
that's one of the professions for a programmer
link |
where working hard does lead to greater productivity in it.
link |
But it also raises the question of
link |
sort of personal relationships and all that kind of stuff,
link |
family, and how are you able to find work life balance?
link |
Is there advice you can give,
link |
maybe even outside of yourself?
link |
Have you been able to arrive at any wisdom
link |
on this part 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
link |
in the way things impact me,
link |
the things that I want to do,
link |
my goals are different,
link |
and sort of the levers to impact things are different,
link |
where 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 |
But I've always had the flexibility
link |
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 |
And 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 it's the best time
link |
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
link |
because I'm just not on top of things.
link |
Then there's the time that,
link |
all right, let's go bang out a few hundred lines of code
link |
So switching between them has been real valuable.
link |
So you'll always have kind of joy in your heart
link |
for all the things you're doing,
link |
and that is a kind of work life balance
link |
as a first sort of step.
link |
Yeah, I do. So you're always happy.
link |
Yeah, I mean, that's like a lot of people would say
link |
that often I look like kind of a grim person,
link |
you know, 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 where that it's like,
link |
okay, I'm pushing through this, 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
link |
is I don't want to let somebody
link |
that might be a person like that be told by someone else
link |
that no, don't even try that out as an option
link |
where work life balance 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, you know, 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 sort of as a, you know,
link |
being a programmer as a kind of athlete?
link |
So what was the nutrition that fueled?
link |
I have never been that great on really paying attention
link |
to it where I'm good enough that I don't eat a lot.
link |
You know, 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 like,
link |
one of the things that bothered me
link |
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 |
So that was defining, like, that's what being rich felt like.
link |
A lot of the little things, like I could buy all the pizza
link |
and comic books and video games that I wanted to.
link |
And it really didn't take that much,
link |
but the pizza was one of those things
link |
that it's absolutely true that for a long time
link |
at id Software, I had a pizza delivered every single day.
link |
You know, the delivery guy knew me by name
link |
and 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 |
And 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 or were you?
link |
It would be spread out.
link |
You know, you have a few pieces of pizza,
link |
you have some more later on
link |
and I'd maybe have something at home.
link |
It was one of the nice things that Facebook Meta
link |
is they feed you quite well.
link |
You get a different, I guess now it's DoorDash
link |
sorts of things delivered,
link |
but they take care of making sure
link |
that everybody does get well fed.
link |
And 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
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, you know, the programming experience,
link |
you know, with music or like I listen to brown noise
link |
on a program 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, the programming.
link |
Did you have that relationship with pizza or?
link |
It would really be with Diet Coke.
link |
I mean, 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 still a part of it?
link |
Yeah, probably eight or nine a day.
link |
Okay, what about your setup?
link |
What kind of keyboard?
link |
Is there something interesting?
link |
What kind of IDE, Emacs 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
link |
from the more the Silicon Valley venture,
link |
you know, 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 game development
link |
side of things where it still boggles my mind
link |
how hostile 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 |
like Google and Meta are hostile to?
link |
They are not big on debuggers and IDEs.
link |
Like so much of it is like Emacs, Vim for things.
link |
And we just assume that debuggers don't work
link |
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 and then the DOS
link |
and then Windows and it was Borland tools
link |
and then Visual Studio and.
link |
Do you appreciate the buggers?
link |
I mean, a debugger is how you get a view into a system
link |
that's too complicated to understand.
link |
I mean, anybody that thinks just read the code
link |
and think about it.
link |
That's an insane statement in the,
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 and bear skins.
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 this iterative
link |
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
link |
as a very powerful user interface that can stop,
link |
examine all the different things in your program,
link |
set all of these different breakpoints.
link |
And of course you can do that with GDB or whatever there,
link |
but this is one of the user interface
link |
fundamental principles
link |
where when something is complicated to do,
link |
you won't use it very often.
link |
There's people that will break out GDB
link |
when they're at their wits end
link |
and they just have beat their head
link |
against a problem for so long.
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 would 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 who don't know,
link |
GDB is a sort of popular, I guess, Linux debugger
link |
primarily for C++.
link |
They handle most of the languages,
link |
but it's based on C as the original kind of Unix heritage.
link |
And it's kind of like command line.
link |
It's not user friendly.
link |
It doesn't allow for clean visualizations
link |
and you're exactly right.
link |
So that you're using this kind of debugger
link |
usually when you're at what's end
link |
and there's a problem that you can't figure out why
link |
by just looking at the codes, you have to find 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 and help you
link |
as part of the programming process,
link |
just the normal programming process
link |
to understand the code deeper.
link |
Yeah, when I'm working on like my C, C++ code,
link |
I'm always running it from the debugger.
link |
Just I type in the code, I run it many times.
link |
The first thing I do after writing code
link |
is set a break point 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 wanna step in there
link |
and I'm gonna single step through that,
link |
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 codecs and these kind of ability to generate code,
link |
that might be, you might start having tools
link |
that understand the code in interesting deep ways
link |
that can work with you.
link |
There's a whole spectrum there
link |
from static code analyzers and various kind of dynamic tools
link |
there up to AI that can conceivably grok these programs
link |
that literally no human can understand.
link |
They're too big, too intertwined and too interconnected,
link |
but it's not beyond the possibility of understanding.
link |
It's just beyond what we can hold in our heads
link |
as kind of mutable state while we're working on things.
link |
And I'm a big proponent, again,
link |
of things like static analyzers and some of that stuff
link |
where you'll find some people that don't like being scolded
link |
by a program for how they've written something
link |
where it's like, oh, I know better.
link |
And sometimes you do, but that was something
link |
that it was very, very valuable for me
link |
when, and not too many people get an opportunity
link |
like this to have.
link |
This is almost one of those spiritual experiences
link |
as a programmer, an awakening to,
link |
the id software code bases
link |
were a couple of million lines of code.
link |
And at one point I had used a few
link |
of the different analysis tools,
link |
but I made a point to really go through
link |
and scrub the code base using every tool that I could find.
link |
And it was eyeopening where we had a reputation
link |
for having some of the most robust, strongest code,
link |
where there were some great things
link |
that 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 titles
link |
that just have millions of faults
link |
that are getting recorded all the time.
link |
So I was proud of our code on a lot of levels,
link |
but when I took this code analysis squeegee
link |
through everything, it was shocking
link |
how many errors there were in there.
link |
Things that you can say, okay, this was a copy paste,
link |
not changing something right here.
link |
Lots of things that were, the most common problem
link |
was something in a printf format string
link |
that was the wrong data type that could cause crashes there.
link |
And you really want the warnings for things like that.
link |
Then the next most common was missing a check for null
link |
that could actually happen, that could blow things up.
link |
And those are obviously like top C, C++ things.
link |
Everybody has those problems.
link |
But the long tail of all of the different little things
link |
that could go wrong there, and we had good programmers
link |
and my own code, stuff that I'd be looking at,
link |
it's like, oh, I wrote that code, that's definitely wrong.
link |
We've been using this for a year
link |
and it's this submarine, this mine sitting there
link |
waiting for us to step on.
link |
And it was humbling.
link |
It was, and I reached the conclusion
link |
that anything that can be syntactically allowed
link |
in your language, if it's gonna show up eventually
link |
in a large enough code base,
link |
you're not gonna, good intentions
link |
aren't going to keep it from happening.
link |
You need automated tools and guardrails for things.
link |
And those start with things like static types
link |
and or even type hints in the more dynamic languages.
link |
But the people that rebel against that,
link |
that basically say that slows me down doing that.
link |
There's something to that, I get that.
link |
I've written, I've cobbled things together in a notebook.
link |
I'm like, wow, this is great that it just happened,
link |
but yeah, that's kind of sketchy,
link |
but it's working fine, I don't care.
link |
It does come back to that value analysis
link |
where sometimes it's right to not care.
link |
But when you do care, if it's going to be something
link |
that's going to live for years
link |
and it's gonna have other people working on it,
link |
and it's gonna be deployed to millions of people,
link |
then you wanna use all of these tools.
link |
You wanna be told it's like, no,
link |
you've screwed up here, here and here.
link |
And that does require kind of an ego check about things
link |
where you have to be open to the fact
link |
that everything that you're doing
link |
is just littered with flaws.
link |
It's not that, oh, you occasionally have a bad day.
link |
It's just whatever stream of code you output,
link |
there is going to be a statistical regularity of things
link |
that you just make mistakes on.
link |
And I do think there's the whole argument
link |
about test driven design and unit testing
link |
versus kind of analysis and different things.
link |
I am more in favor of the analysis and the stuff
link |
that just like you can't run your program
link |
until you fix this rather than you can run it
link |
and hopefully a unit test will catch it in some way.
link |
Yeah, in my private code, I have asserts everywhere.
link |
There's something pleasant to me, pleasurable to me
link |
about sort of the dictatorial rule of like,
link |
this should be true at this point.
link |
And too many times I've made mistakes
link |
that shouldn't have been made.
link |
And I would assume I wouldn't be the kind of person
link |
that would make that mistake,
link |
but I keep making that mistake.
link |
Therefore, an assert really catches me,
link |
really helps all the time.
link |
So my code, I would say like 10 to 20% of my private code
link |
just for personal use is probably asserts.
link |
And they're active comments.
link |
That'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 you expected
link |
it would be, then 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 in a lot of cases
link |
of static array size declarations,
link |
where 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 in the early days,
link |
you get doom, which had some fixed limits on it.
link |
Then everybody started making crazier and crazier things.
link |
And they kept bumping up the different limits,
link |
this many lines, this many sectors.
link |
And it seemed like a good idea,
link |
well, we should just make this completely generic.
link |
It can go kind of go up to whatever.
link |
And there's cases where that's the right thing to do,
link |
but it also, the other aspect of the world
link |
changing around you 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 growing collection,
link |
you're never gonna find out.
link |
You might have this quadratic slow down on something
link |
where you thought, oh, I'm only ever gonna have
link |
a handful of these, but something changes
link |
and there's a new design style.
link |
And all of a sudden you've got 10,000 of them.
link |
So I kind of like in many cases, picking a number,
link |
some nice brown power of two number
link |
and setting it up in there and having an assert saying,
link |
it's like, hey, you hit this limit.
link |
You should probably think are the choices
link |
that you've made around all of this still relevant
link |
if somebody's using 10 times more
link |
than you thought they would.
link |
Yeah, this code was originally written
link |
with this kind of worldview,
link |
with this kind of set of constraints.
link |
You were thinking of the world in this way.
link |
If something breaks, that means you gotta rethink
link |
the initial stuff.
link |
And it's nice for it to do that.
link |
Is there any stuff like a keyboard or monitors?
link |
I'm a fairly pedestrian on a lot of that
link |
where I did move to triple monitors
link |
like in the last several years ago.
link |
I had been dual monitor for a very long time.
link |
And it was one of those things where probably years later
link |
than I should have, I'm just like, well,
link |
the video cards now generally have three output ports.
link |
I should just put the third monitor up there.
link |
That's been a pure win.
link |
I've been very happy with that.
link |
But no, I don't have fancy keyboard or mouse
link |
or anything really going on.
link |
The key things is an IDE that has helpful debuggers,
link |
has helpful tools.
link |
So it's not the Emacs Vim route and then Dicode.
link |
Yeah, so I did spend,
link |
I spent one of my week long retreats where I'm like,
link |
okay, I'm gonna make myself use,
link |
it was actually classic VI,
link |
which I know people will say you should never have done that.
link |
You should have just used Vim directly.
link |
But I gave it the good try.
link |
It's like, okay, I'm being in kind of classic
link |
Unix developer mode here.
link |
And 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.
link |
And in the end, it was just like, all right,
link |
this was kind of like my civil war reenactment phase.
link |
It's like, I'm going out there doing it
link |
like they used to in the old days.
link |
And it was kind of fun in that regard.
link |
So many people right now.
link |
They're screaming as they're listening to this.
link |
So again, the out is that this was not modern Vim,
link |
but still, yes, I was very happy to get back
link |
to my visual studio at the end.
link |
Yeah, I'm actually, I struggle with this a lot
link |
because I use a Kinesis keyboard
link |
and I use Emacs primarily.
link |
And I feel like I can, exactly as you said,
link |
I can understand the code.
link |
I can navigate the code.
link |
There's a lot of stuff you could build with an Emacs
link |
You can customize a lot of things for yourself
link |
to help you introspect the code,
link |
like to help you understand the code
link |
and visualize different aspects of the code.
link |
You can even run debuggers,
link |
but it's work and the world moves past you
link |
and the better and better ideas are constantly being built.
link |
And that puts a kind of,
link |
I need to take the same kind of retreat
link |
as you're talking about,
link |
but now 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,
link |
which is kind of interesting to me.
link |
Again, it's the JavaScript ecosystem on the one hand
link |
and IDs are one of those things
link |
that you want to be infinitely fast.
link |
You want them to just kind of immediately respond.
link |
And like, I mean, heck, I've got,
link |
there's someone I know,
link |
I'm an old school game dev guy
link |
that still uses visual studio six.
link |
And on a modern computer,
link |
everything is just absolutely instant
link |
on something like that,
link |
because it was made to work on a computer
link |
that's 10,000 or a hundred thousand times slower.
link |
So just everything happens immediately.
link |
And all the modern systems just feel,
link |
they feel so crufty when it's like,
link |
oh, why is this refreshing the screen
link |
and moving around and updating over here?
link |
And something blinks down there
link |
and you should update this.
link |
And there are things that we've lost
link |
with that incredible flexibility,
link |
but lots of people get tons of value from it.
link |
And I am super happy that that seems to be winning
link |
over even a lot of the old Vim and Emacs people
link |
that they're kind of like,
link |
hey, visual studio codes, maybe not so bad.
link |
I am, that may be the final peacekeeping solution
link |
where everybody is reasonably happy
link |
with something like that.
link |
So can you explain what a dot plan file is
link |
and what role that played in your life?
link |
Does it still continue to play a role?
link |
Back in the early, early days of id Software,
link |
one of our big things that was unique with what we did
link |
is I had adopted next stations
link |
or kind of next step systems
link |
from Steve Jobs's out in the woods away from Apple company.
link |
And they were basically, it was kind of interesting
link |
because I did not really have a background
link |
with the Unix system.
link |
So many of the people they get immersed in that in college
link |
and that sets a lot of cultural expectations for them.
link |
And I didn't have any of that,
link |
but I knew that my background was,
link |
I was a huge Apple II fan boy.
link |
I was always a little suspicious of the Mac.
link |
I was not really what kind of I wanted to go with.
link |
But when Steve Jobs left Apple and started Next,
link |
this computer did just seem like one of those amazing things
link |
from the future where it had all of this cool stuff in it.
link |
And we were still back in those days working on DOS,
link |
everything blew up.
link |
You had reset buttons
link |
because your computer would just freeze.
link |
If you're doing development work,
link |
literally dozens of times a day,
link |
your computer was just rebooting constantly.
link |
And so this idea of, yes, any of the Unix workstations
link |
would have given a stable development platform
link |
where you don't crash and reboot all the time.
link |
But Next also had this really amazing graphical interface
link |
and it was great for building tools.
link |
And it used Objective C as kind of an interesting dead end
link |
for things like that.
link |
So Next was Unix based, it said Objective C.
link |
So it has a lot of the elements.
link |
I mean, the kind of reverse acquisition of Apple by Next
link |
where that took over
link |
and became what the modern Mac system is.
link |
And to find some of the developer,
link |
like the tools and the whole community.
link |
Yeah, you've still got,
link |
if you're programming on Apple stuff now,
link |
there's still all these NS somethings,
link |
which was originally Next step objects
link |
of different kinds of things.
link |
But one of the aspects of those Unix systems
link |
was they had this notion of a.plan file
link |
where a.file is an invisible file.
link |
Usually in your home directory or something.
link |
And there was a trivial server running
link |
on most Unix systems at the time
link |
that when somebody ran a trivial little command
link |
called finger, you could do finger
link |
and then somebody's address,
link |
it could be anywhere on the internet
link |
if you were connected correctly.
link |
Then all that server would do was read the.plan file
link |
in that user's home directory
link |
and then just spit it out to you.
link |
And originally the idea was that could be
link |
whether you're on vacation, what your current project was.
link |
It's supposed to be like the plan of what you're doing.
link |
And people would use it for various purposes,
link |
but all it did was dump that file over
link |
to the terminal of whoever issued the finger command.
link |
And at one point 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 syntax.
link |
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 was,
link |
it started off as being just like my to do list.
link |
And it would be these trivial, obscure little things
link |
like I fixed something with collision detection code,
link |
made Fireball do something different
link |
and just little one liners that people
link |
that were following the games could kind of decipher.
link |
But I did wind up starting to write much more in depth things.
link |
I would have little notes of thoughts and insights
link |
and then I would eventually start having little essays.
link |
I would sometimes dump into the dot plan files
link |
interspersed with the work logs of things that I was doing.
link |
So in some ways it was like a super early proto blog
link |
where I was just kind of dumping out what I was working on.
link |
But it was interesting enough that there were a lot
link |
of people that were interested in this.
link |
So most of the people didn't have Unix workstation.
link |
So there were the websites back in the day
link |
that would follow the Doom and Quake development
link |
that would basically make a little service
link |
that would go grab all the changes
link |
and then people could just get it with a web browser.
link |
And there was a period where like all of the little
link |
kind of Dallas gaming diaspora of people
link |
that were at all in that orbit,
link |
there were a couple dozen plan files going on,
link |
which was, and this was some years before blogging
link |
really became kind of a thing.
link |
And it was kind of a premonition
link |
of sort of the way things would go.
link |
And there 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 I was doing in the different areas.
link |
Have you had a chance to look back?
link |
Is there some interesting, very low level specific
link |
to do items, maybe things you've never completed,
link |
all that kind of stuff and high level philosophical essay
link |
type of stuff that stands out?
link |
Yeah, there's some good stuff on both
link |
where a lot of it was low level nitpicky details
link |
about game dev and I've learned enough things
link |
where there's no project that I worked on
link |
that I couldn't go back and do a better job on now.
link |
I mean, you just, you learn things,
link |
hopefully if you're doing it right,
link |
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.
link |
And there's stuff in Wolfenstein Doomquake that's like,
link |
oh, clearly I could go back and do a better job at this,
link |
whether it's something in the rendering engine side
link |
or how I implemented the monster behaviors
link |
or managed resources or anything like that.
link |
Do you see the flaws in your thinking now?
link |
Like looking back?
link |
I mean, sometimes I'll get the,
link |
I'll look at it and say, yeah, I had a pretty clear view
link |
of I was doing good work there.
link |
And I haven't really hit the point
link |
where there was another programmer, Graham Devine,
link |
who was, he had worked at ID and Seventh Guest
link |
and he made some comment one time
link |
where he said he looked back at some of his old notes
link |
and he was like, wow, I was really smart back then.
link |
And I don't hit that so much where,
link |
I mean, I look at it and I always know that,
link |
yeah, there's all the, you know, with aging,
link |
you get certain changes in how you're able to work problems,
link |
but all of the problems that I've worked,
link |
I'm sure that I could do a better job on all of them.
link |
So you can still step right in.
link |
If you could travel back in time and talk to that guy,
link |
you would teach him a few things.
link |
What about the high level philosophical stuff?
link |
Is there some insights that stand out that you remember?
link |
There's things that I was understanding about development
link |
and, you know, in the industry and so on
link |
that were in a more primitive stage
link |
where I definitely learned a lot more in the later years
link |
about business and organization and team structure.
link |
There were, I mean, there were definitely things
link |
that I was not the best person
link |
or even a very good person about managing,
link |
like how a team should operate internally,
link |
how people should work together.
link |
I was just, you know, just get out of my way
link |
and let me work on the code and do this.
link |
And more and more, I've learned how,
link |
in the larger scheme of things,
link |
how sometimes relatively unimportant
link |
some of those things are,
link |
where it is this user value generation
link |
that's the overarching importance for all of that.
link |
And I didn't necessarily have my eye on that ball correctly
link |
through a lot of my, you know, my earlier years.
link |
And there's things that, you know,
link |
I could have gotten more out of people
link |
handling things in different ways.
link |
I am, you know, I could have made, you know,
link |
in some ways more successful products
link |
by following things in different ways.
link |
There's mistakes that we made
link |
that we couldn't really have known
link |
how things would have worked out,
link |
but it was interesting to see in later years companies
link |
like Activision showing that,
link |
hey, you really can just do the same game,
link |
make it better every year.
link |
And you can look at that from a negative standpoint
link |
and say, it's like, oh, that's just being derivative
link |
But if you step back again and say, it's like, no,
link |
are the people buying it still enjoying it?
link |
Are they enjoying it more
link |
than what they might have bought otherwise?
link |
And you can say, no, that's actually
link |
a great value creation engine to do that
link |
if you're in a position where you can.
link |
I, you know, don't be forced into reinventing everything
link |
just because you think that you need to.
link |
You know, lots of things about business and team stuff
link |
that could be done better, but the technical work,
link |
the kind of technical visionary type stuff
link |
that I laid out, I still feel pretty good about.
link |
There are some classic old ones about my defending
link |
of OpenGL versus D3D,
link |
which turned out to be one of the more
link |
probably important momentous things there
link |
where it never, it was always a rear guard action on Windows
link |
where Microsoft was just not gonna let that win.
link |
But when I look back on it now,
link |
that fight to keep OpenGL relevant
link |
for a number of years there
link |
meant that OpenGL was there when mobile started happening
link |
and OpenGL ES was the thing that drove
link |
all of the acceleration of the mobile industry.
link |
And it's really only in the last few years
link |
as Apple's moved to Metal
link |
and some of the other companies have moved to Vulkan
link |
that that's moved away.
link |
But really stepping back and looking at it,
link |
it's like, yeah, I sold tens of millions of games
link |
for different things.
link |
But billions and billions of devices wound up
link |
with an appropriate capable graphics API
link |
due in no small part to me thinking
link |
that that was really important
link |
that we not just give up and use Microsoft's
link |
at that time really terrible API.
link |
The thing about Microsoft is the APIs don't stay terrible.
link |
They were terrible at the start, but a few versions on,
link |
they were actually quite good.
link |
And there was a completely fair argument to be made
link |
that by the time DX9 was out,
link |
it was probably a better programming environment
link |
than OpenGL, but it was still a wonderful good thing
link |
that we had an open standard
link |
that could show up on Linux and Android and iOS
link |
and eventually WebGL still to this day.
link |
So that was one, that would be on my greatest hits list
link |
of things that I kind of pushed with.
link |
The impact it had on billions of devices, yes.
link |
So let's talk about it.
link |
Can you tell the origin story of id Software?
link |
Again, one of the greatest game developer companies ever.
link |
It created Wolfenstein 3D games
link |
that defined my life also in many ways
link |
as a thing that made me realize
link |
what computers are capable of in terms of graphics,
link |
in terms of performance, it just unlocked something deep
link |
in me and understanding what these machines are all about
link |
as games can do that.
link |
So Wolfenstein 3D, Doom, Quake,
link |
and just all the incredible engineering innovation
link |
that went into that.
link |
So how did it all start?
link |
So I'll caveat upfront
link |
that I usually don't consider myself the historian
link |
of the software side of things.
link |
I usually do kind of point people at John Romero
link |
for stories about the early days where I've never been,
link |
like I've commented that I'm a remarkably
link |
unsentimental person in some ways
link |
where I don't really spend a lot of time
link |
unless I'm explicitly prodded to go back
link |
and think about the early days of things.
link |
And I didn't necessarily make the effort
link |
to archive everything exactly in my brain.
link |
And the more that I work on machine learning and AI
link |
and the aspects of memory
link |
and how when you go back and polish certain things,
link |
it's not necessarily exactly the way it happened.
link |
But having said all of that, from my view,
link |
the way everything happened that led up to that was
link |
after I was an adult
link |
and kind of taking a few college classes
link |
and deciding to drop out, I was doing,
link |
I was hardscrabble contract programming work,
link |
really struggling to kind of keep groceries
link |
and pay my rent and things.
link |
And the company that I was doing the most work for
link |
was a company called Softdisk Publishing,
link |
which had the sounds bizarre now business model
link |
of monthly subscription software.
link |
Before there was an internet that people could connect to
link |
and get software, you would pay a certain amount
link |
and every month they would send you a disc
link |
that had some random software on it.
link |
And people that were into computers
link |
thought this was kind of cool.
link |
And they had different ones for the Apple II,
link |
the 2GS, the PC, the Mac, the Amiga,
link |
lots of different things here.
link |
So quirky little business,
link |
but I was doing a lot of contract programming for them
link |
where I'd write tiny little games
link |
and sell them for 300, $500.
link |
And one of the things that I was doing again
link |
to keep my head above water here was
link |
I decided that I could make one program
link |
and I could port it to multiple systems.
link |
So I would write a game like Dark Designs or Catacombs
link |
and I would develop it on the Apple II, the 2GS
link |
and the IBM PC, which apparently was the thing
link |
that really kind of piqued the attention
link |
of the people working down there.
link |
Like Jay Wilbur was my primary editor
link |
and Tom Hall was a secondary editor.
link |
And they kept asking me, it's like,
link |
hey, you should come down and work for us here.
link |
And I pushed it off a couple of times
link |
because I was really enjoying my freedom
link |
of kind of being off on my own.
link |
Even if I was barely getting by, I loved it.
link |
I was doing nothing but programming all day,
link |
but I did have enough close scrapes with like,
link |
damn, I'm just really out of money
link |
that maybe I should get an actual job
link |
rather than contracting these kind of one at a time things.
link |
And Jay Wilbur was great.
link |
He was like FedExing me the checks when I would need them.
link |
I had to kind of get over whatever hump I was at.
link |
So I took the, I finally took them up on their offer
link |
to come down to Shreveport, Louisiana.
link |
I was in Kansas city at the time,
link |
drove down to through the Ozarks and everything
link |
down to Louisiana and saw the soft disk offices,
link |
went through, talked to a bunch of people,
link |
met the people I had been working with remotely
link |
But the most important thing for me
link |
was I met two programmers there,
link |
John Romero and Lane Roth that for the first time ever,
link |
I had met programmers that knew more cool stuff than I did
link |
where the world was just different back then.
link |
I was in Kansas city.
link |
It was one of those smartest kid in the school
link |
does all the computer stuff.
link |
The teachers don't have anything to teach him.
link |
But all I had to learn from was these few books
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 a track on,
link |
I am on a low level drive programming interface.
link |
And this was, I was still not at all sure
link |
I was gonna take the job,
link |
but I met these awesome programmers
link |
that were doing cool stuff.
link |
And Romero had worked at Origin Systems
link |
and he had done like, so many different games ahead of time
link |
that I did kind of quickly decide,
link |
it's like, yeah, I'll go take the job down there.
link |
And I settled down there, moved in
link |
and started working on more little projects.
link |
And the first kind of big change that happened down there
link |
was the company wanted to make a gaming focused,
link |
a PC gaming focused subscription.
link |
Just like all their other,
link |
it was the same formula that they used for everything.
link |
Pay a monthly fee and you'll get a disc
link |
with one or two games just every month
link |
and no choice in what you get, but we think it'll be fun.
link |
And that was the model they were comfortable with
link |
and they said, all right,
link |
we're gonna start this gamers edge department.
link |
And all of us that were interested in that,
link |
like me, Romero, Tom Hall was kind of helping us
link |
from his side of things, Jay would peek in
link |
and we had a few other programmers working with us
link |
And we were going to just start making games,
link |
just the same model.
link |
And we dived in and it was fantastic.
link |
Do you have to make new games?
link |
And this, in retrospect, looking back at it,
link |
that sense that I had done all this contract programming
link |
and John Romero had done like far more of this
link |
where he had done one of his teaching himself efforts
link |
was he made a game for every letter of the alphabet.
link |
It's that sense of like,
link |
I'm just gonna go make 26 different games,
link |
give them a different theme.
link |
And you learn so much when you go through
link |
and you crank these things out
link |
like on a biweekly, monthly basis,
link |
something like that. From start to finish.
link |
It's not like just an idea.
link |
It's not just from the very beginning to the very end.
link |
It has to be done.
link |
There's no delaying.
link |
And you've got deadlines.
link |
And that kind of rapid iteration pressure cooker environment
link |
was super important for all of us developing the skills
link |
that brought us to where we eventually went to.
link |
I mean, people would say like,
link |
like in the history of the Beatles,
link |
like it wasn't them being the Beatles.
link |
It was them playing all of these other early works
link |
that that opportunity to craft all of their skills
link |
before they were famous,
link |
that was very critical to their later successes.
link |
And I think there's a lot of that here
link |
where we did these games that nobody remembers,
link |
lots of little things that contributed
link |
to building up the skillset for the things
link |
that eventually did make us famous.
link |
Yeah, Dostoevsky wrote The Gambler.
link |
I had to write it in a month, just to make money.
link |
And nobody remembers that probably
link |
because he had to figure out,
link |
because it's literally,
link |
he didn't have enough time to write it fast enough.
link |
So he had to come up with hacks.
link |
it again comes down to that point
link |
where pressure and limitation of resources
link |
is surprisingly important.
link |
And it's counterintuitive in a lot of ways
link |
where you just think that if you've got all the time
link |
in the world and you've got all the resources in the world,
link |
of course, you're gonna get something better.
link |
But sometimes it really does work out
link |
that the innovations, mother necessity,
link |
where you can, or resource constraints,
link |
and you 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 |
Some of them are still fun to go back and play
link |
where you get the,
link |
they were all about kind of,
link |
the more modern term is game feel,
link |
about how just the exact feel that things,
link |
it's not the grand strategy of the design,
link |
but how running and jumping and shooting
link |
and those things I feel in the moment.
link |
And some of those are still,
link |
if you sat down on them, you kind of go,
link |
it's a little bit different.
link |
It doesn't have the same movement feel,
link |
but you move over and you're like, bang, jump, bang.
link |
It's like, hey, that's kind of cool still.
link |
So you can get lost in the rhythm of the game.
link |
Is that what you mean by feel?
link |
Just like there's something about it that pulls you in?
link |
Nowadays, again, people talk about compulsion loops
link |
and things where it's that sense of exactly
link |
what you're doing, what your fingers are doing
link |
on the keyboard, what your eyes are seeing,
link |
and there are gonna be these sequences of things.
link |
Grab the loot, shoot the monster,
link |
jump over the obstacle, get to the end of the level.
link |
These are eternal aspects of game design in a lot of ways,
link |
but there are better and worse ways to do all of them.
link |
And we did so many of these games
link |
that we got a lot of practice with it.
link |
So one of the kind of weird things
link |
that was happening at this time
link |
is John Romero was getting some strange fan mail.
link |
And back in the days, this was before email.
link |
So we literally got letters sometimes and telling him,
link |
it's like, oh, I wanna talk to you about your games.
link |
I wanna reach out, different things.
link |
And eventually it turned out
link |
that these were all coming from Scott Miller
link |
at Apogee Software.
link |
And he was reaching out through,
link |
he didn't think he could contact John directly,
link |
that he would get intercepted.
link |
So he was trying to get him to contact him
link |
through like back channel fan mail,
link |
because he basically was saying,
link |
hey, I'm making all this money 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 we looked at Scott Miller's games
link |
and we didn't think they were very good.
link |
We're like, that can't be making the kind of money
link |
that he's saying he's making 10 grand or something
link |
And we really thought that he was full of shit,
link |
that it was a lie trying to get him into this.
link |
But so that was kind of going on at one level.
link |
And it was funny the moment when Romero realized
link |
that he had some of these letters pinned up on his wall,
link |
like all of his fans.
link |
And then we noticed that they all had the same return
link |
address with different names on them,
link |
which was a little bit of a two edged sword there.
link |
Trying to figure out the puzzle laid out before him.
link |
Yeah, what happened after I kind of coincident with that
link |
was I was working on a lot of the new technologies
link |
where I was now full on the IBM PC for the first time,
link |
where I was really a long hold out on Apple II forever.
link |
And I loved my Apple II.
link |
It was the computer I always wished I had
link |
when I was growing up.
link |
And when I finally did have one,
link |
I was kind of clinging on to that well past it
link |
sort of good use by day.
link |
Is it the best computer ever made you would you say?
link |
I wouldn't make judgments like that about it,
link |
but it was positioned in such a way,
link |
especially in the school systems that it impacted
link |
a whole lot of American programmers at least,
link |
where there was programs that the Apple IIs
link |
got into the schools and they had enough capability
link |
that lots of interesting things happened with them.
link |
In Europe, it was different.
link |
You had your Amigas and Ataris and Acorns in the UK
link |
and things that had different things.
link |
But in the United States,
link |
it was probably the Apple II made the most impact
link |
for a lot of programmers of my generation.
link |
But so I was really digging into the IBM
link |
and this was even more so with the total focus
link |
because I had moved to another city
link |
where I didn't know anybody that I wasn't working with.
link |
I had a little apartment and then at Softdisk,
link |
again, the things that drew me to it,
link |
I had a couple of programmers that knew more than I did
link |
and they had a library.
link |
They had a set of books and a set of magazines.
link |
They had a couple of years of magazines,
link |
the old Dr. Dobbs journal and all of these magazines
link |
that had information about things.
link |
And so I was just in total immersion mode.
link |
It was eat, breathe, sleep, computer programming,
link |
particularly the IBM for everything that I was doing.
link |
And I was digging into a lot of these
link |
low level hardware details
link |
that people weren't usually paying attention to,
link |
the way the IBM EGA cards worked, which was fun for me.
link |
I hadn't had experience with things at that level.
link |
And back then you could get hardware documentation
link |
just down at the register levels.
link |
This is where the CRTC register is.
link |
This is how the color registers work
link |
and how the different things are applied.
link |
And they were designed for a certain reason.
link |
They were designed for an application.
link |
They had an intended use in mind,
link |
but I was starting to look at other ways
link |
that they could perhaps be exploited
link |
that they weren't initially intended for.
link |
Could you comment on like, first of all, what operating system was there?
link |
What instruction set was it?
link |
Like, what are we talking about?
link |
So this was DOS and x86.
link |
The 286s were there and 386s existed.
link |
We had a couple for our development systems,
link |
but we were still targeting the more broad.
link |
It was all DOS 16 bit.
link |
None of this was kind of DOS extenders and things.
link |
How different is it from the systems of today?
link |
Is it kind of a precursor that's similar?
link |
If you open up command.exe or com on Windows,
link |
you see some of the remnants of all of that,
link |
but it was a different world.
link |
It was the 640K is enough world, and nothing was protected.
link |
It crashed all the time.
link |
You had TSRs or terminate and stay resident hacks
link |
on top of things that would cause configuration problems.
link |
All the hardware was manually configured in your auto exec.
link |
So it was a very different world.
link |
But the code is still the same, similar.
link |
You could still write it.
link |
My earliest code there was written in Pascal.
link |
That was what I had learned at an earlier point.
link |
So between BASIC and C++, there was Pascal.
link |
So when BASIC assembly language, some of my intermediate stuff
link |
was, well, you had to for performance.
link |
BASIC was just too slow.
link |
So most of the work that I was doing
link |
as a contract programmer in my teenage years
link |
was assembly language.
link |
Wait, you wrote games in assembly?
link |
Yeah, complete games in assembly language.
link |
And it's thousands and thousands of lines
link |
of three letter acronyms for the instructions.
link |
You don't earn the once again greatest programmer ever label
link |
without being able to write a game in assembly.
link |
Everybody serious wrote their games in assembly language.
link |
Everybody serious.
link |
Everybody serious.
link |
It was an outlier to use Pascal a little bit,
link |
where there was one 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 Pascal there.
link |
But I did learn Pascal.
link |
And I remember doing all of my.
link |
To this day, I sketch in data structures.
link |
When I'm thinking about something, I'll open up a file
link |
and I'll start writing struct definitions for how
link |
data is going to be laid out.
link |
And Pascal was kind of formative to that
link |
because I remember designing my RPGs in Pascal record
link |
structures and things like that.
link |
And so I had gotten the Pascal compiler for the Apple 2GS
link |
that I could work on.
link |
And the first IBM game that I developed, I did in Pascal.
link |
And that's actually kind of an interesting story,
link |
again, talking about the constraints and resources
link |
where I had an Apple 2GS.
link |
I didn't have an IBM PC.
link |
I wanted to port my applications to IBM
link |
because I thought I could make more money on it.
link |
So what I wound up doing is I rented a PC for a week
link |
and bought a copy of Turbo Pascal.
link |
And so I had a hard 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 before I had to return
link |
the PC and that was kind of what the first thing
link |
that I had done on the IBM PC and what led me
link |
to taking the job at Softdisk.
link |
And Turbo Pascal, how's that different from regular Pascal?
link |
Is it a different compiler or something like that?
link |
It was a product of Borland, which before Microsoft
link |
kind of killed them, they were the hot stuff
link |
developer tools company.
link |
You had Borland, Turbo Pascal and Turbo C
link |
and Prologue, I mean, all the different things.
link |
But what they did was they took a supremely pragmatic
link |
approach of making something useful.
link |
It was one of these great examples where Pascal
link |
was an academic language and you had things like
link |
the UCSDP system that Wizardry was actually written in
link |
that they did manage to make a game with that,
link |
but it was not a super practical system.
link |
While Turbo Pascal was, it was called Turbo
link |
because it was blazingly fast to compile.
link |
I mean, really ridiculously 10 to 20 times faster
link |
than most other compilers at the time.
link |
But it also had very pragmatic access to look,
link |
you can just 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, it was a perfectly good way
link |
to write games and this is one of those things
link |
where people have talked about different paths
link |
that computer development could have taken
link |
where C took over the world for reasons
link |
that came out of Unix and eventually Linux.
link |
And that was not a foregone conclusion at all.
link |
And people can make real reasoned rational arguments
link |
that the world might've been better
link |
if it had gone a Pascal route.
link |
I'm somewhat agnostic on that where I do know
link |
from experience, it was perfectly good enough to do that.
link |
And it had some fundamental improvements
link |
like it had range checked arrays as an option there,
link |
which could avoid many of C's real hazards
link |
that happened in a security space.
link |
But C1, they were basically offering it
link |
about the same level of abstraction.
link |
It was a systems programming language, but.
link |
But you said Pascal had a more emphasis on data structures.
link |
I actually, in the tree of languages,
link |
did Pascal come before C?
link |
They were pretty contemporaneous.
link |
So Pascal's lineage went to Modula 2 and eventually Oberon,
link |
which was another Nicholas word, kind of experimental language.
link |
But they were all good enough at that level.
link |
Now, some of the classic academic oriented Pascals
link |
were just missing fundamental things like, oh, you can't
link |
access this core system thing because we're just
link |
using it to teach students.
link |
But Turbo Pascal showed that only modest changes to it
link |
really did make it a completely capable language.
link |
And it had some reasons why you could implement it
link |
as a single pass compiler 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, sorts of things,
link |
and other stuff that C lacked.
link |
But C was also clearly good enough.
link |
And it wound up with a huge inertia
link |
from the Unix ecosystem and everything that came with that.
link |
Garbage collection?
link |
No, it was not garbage collected.
link |
It's just the same kind of thing as C.
link |
So you could still have your use after freeze
link |
and all those other problems.
link |
But just getting rid of array overruns,
link |
at least if you were compiled with that debugging option,
link |
certainly would have avoided a lot of problems
link |
and could have a lot of benefits.
link |
But so anyways, that was the next thing.
link |
I had to learn C because C was where it seemed like most
link |
of the things were going.
link |
So I abandoned Pascal and I started working in C.
link |
I started hacking on these hardware things dealing
link |
with the graphics controllers and the EGA systems.
link |
And what we most wanted to do, so at that time
link |
we were sitting in our darkened office
link |
playing all the different console video games.
link |
And we were figuring out what games
link |
do we want to make for our Gamer's Edge product there.
link |
And so we had one of the first Super Nintendos sitting there.
link |
And we had an older Nintendo looking at all those games.
link |
And the core thing that those consoles did that you just
link |
didn't get on the PC games was this ability
link |
to have a massive scrolling world where
link |
most of the games that you would make on the PC
link |
and earlier personal computers would be a static screen.
link |
You move little things around on it and you interact like that.
link |
Maybe you go to additional screens as you move.
link |
But arcade games and consoles had this wonderful ability
link |
to just have a big world that you're slowly
link |
moving your window through.
link |
And that was for those types of games,
link |
that kind of action exploration adventure games,
link |
that was a super, super important thing.
link |
And PC games just didn't do that.
link |
And what I had come across was a couple
link |
of different techniques for implementing that on the PC.
link |
And they're not hard, complicated things.
link |
When I explain them now, they're pretty straightforward.
link |
But just nobody was doing it.
link |
You sound like Einstein describing his five papers
link |
is pretty straightforward.
link |
But they're nevertheless revolutionary.
link |
So side scrolling is a game changer.
link |
Yeah, and scrolling is a genius invention.
link |
It's either vertical.
link |
And some of the consoles had different limitations
link |
about you could do one but not the other.
link |
And there were similar things going on as advancements,
link |
even in the console space, where you'd have the original Mario
link |
game was just horizontal scrolling.
link |
And then later, Mario games added vertical aspects to it
link |
and different things that you were
link |
doing to explore, kind of expand the capabilities there.
link |
And so much of the early game design for decades
link |
was removing limitations, letting you do things
link |
that you envisioned as a designer,
link |
you wanted the player to experience,
link |
but the hardware just couldn't really
link |
or you didn't know how to make it happen.
link |
It felt impossible.
link |
You can imagine that you want to create like this big world
link |
through which you can side scroll,
link |
like through which you can walk.
link |
And then you ask yourself a question,
link |
how do I actually build that in a way that's
link |
like the latency is low enough, the hardware can actually
link |
deliver that in such a way that it's a compelling experience.
link |
Yeah, and we knew what we wanted to do
link |
because we were playing all of these console games,
link |
playing all these Nintendo games and arcade games.
link |
Clearly, there was a whole world of awesome things
link |
there that we just couldn't do on the PC, at least initially.
link |
Because every programmer can tell,
link |
it's like if you want to scroll, you can just
link |
redraw the whole screen.
link |
But then it turns out, well, you're
link |
going five frames per second.
link |
That's not an interactive fun experience.
link |
You want to be going 30 or 60 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 five times faster for you
link |
to make a playable game there.
link |
And interestingly, I wound up with two completely different
link |
solutions for the scrolling problem.
link |
And this is a theme that runs through everything, where
link |
all of these big technical advancements, it turns out
link |
there's always a couple different ways of doing them.
link |
And it's not like you found the one true way of doing it.
link |
And we'll see this as we go into 3D games and things later.
link |
But so the scrolling, the first set of scrolling tricks
link |
that I got was the hardware had this ability to,
link |
you could shift inside the window of memory.
link |
So the EGA cards at the time had 256 kilobytes of memory.
link |
And it was awkwardly set up in this planar format,
link |
where instead of having 256 or 24 million colors,
link |
you had 16 colors, which is four bits.
link |
So you had four bit planes, 64k a piece.
link |
Of course, 64k is a nice round number
link |
for 16 bit addressing.
link |
So your graphics card had a 16 bit window
link |
that you could look at.
link |
And you could tell it to start the video scan out
link |
anywhere inside there.
link |
So there were a couple games that
link |
had taken this approach of you could make a 2 by 2 screen
link |
or a 1 by 4 screen.
link |
And you could do scrolling really easily like that.
link |
You could just lay it 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 that I had
link |
was, well, if we make a screen that's just one tile larger,
link |
and we usually had tiles that were 16 pixels by 16 pixels,
link |
the little classic Mario 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 outside of that,
link |
you could easily pan around inside that 16 pixel region.
link |
That could be perfectly smooth.
link |
But then what happens if you get to the edge
link |
and you want to keep going?
link |
The first way we did scrolling was
link |
what I called adaptive tile refresh, which was really
link |
just a matter of you get to the edge
link |
and then you go back to the original point
link |
and then only change the tiles that have actually
link |
that are different between where it was.
link |
In most of the games at the time,
link |
if you think about your classic Super Mario Brothers game,
link |
you've got big fields of blue sky, long rows
link |
of the same brick texture.
link |
And there's a lot of commonality.
link |
It's like a data compression thing.
link |
If you take the screen and you set it down
link |
on top of each other, in general, only about 10%
link |
of the tiles were actually different there.
link |
So this was a way to go ahead and say,
link |
well, I'm going to move it back, and then I'm only
link |
going to change those 10%, 20%, whatever percent tiles there.
link |
And that meant that it was essentially five times faster
link |
than if you were redrawing all of the tiles.
link |
And that worked well enough for us
link |
to do a bunch of these games for Gamer's Edge.
link |
We had a lot of these scrolling games like Slurred Axe
link |
and Shadow Knights and things like that
link |
that we were cranking out at this high rate that
link |
had this scrolling effect on it.
link |
And it worked well enough.
link |
There were design challenges there
link |
where if you made the worst case,
link |
if you made a checkerboard over the entire screen,
link |
you scroll over one and every single tile changes
link |
and your frame rate's now five frames per second
link |
because it had to redraw everything.
link |
So the designers had a little bit
link |
that they had to worry about.
link |
They had to make these relatively plain looking
link |
levels, but it was still pretty magical.
link |
It was something that we hadn't seen before.
link |
And the first thing that we wound up doing with that
link |
was I had just gotten this working,
link |
and Tom Hall was sitting there with me,
link |
and we were looking over at our Super Nintendo on the side
link |
there with Super Mario 3 running.
link |
And we had the technology, we had the tools set up there,
link |
and we stayed up all night.
link |
And we basically cloned the first level
link |
of Super Mario Brothers.
link |
Performance wise as well?
link |
And we had our little character running and jumping in there.
link |
It was close to pixel accurate as far
link |
as all the backgrounds and everything,
link |
but the gaming was just stuff that we cobbled together
link |
from previous games that I had written.
link |
I just really kitbashed the whole thing together
link |
to make this demo.
link |
And that was one of the rare cases
link |
when I said I don't usually do these all night programming
link |
There's probably only two memorable ones
link |
that I can think about.
link |
One was the all nighter to go ahead and get
link |
our Dangerous Dave and copyright infringement
link |
is how we titled it.
link |
Because we had a game called Dangerous Dave running around
link |
with a shotgun shooting things, and we were just
link |
taking our most beloved game at the time there, the Super Mario
link |
3, and sticking Dave inside that with this new scrolling
link |
technology that was going perfectly smooth for them
link |
And Tom and I just blearily the next morning left,
link |
and we left a disk on the desk for John Romero and Jay
link |
Wilbur to see and just said, run this.
link |
And we eventually made it back in later in the day,
link |
and it was like they grabbed us and pulled us into the room.
link |
And that was the point where they were like,
link |
we got to do something with this.
link |
We're going to make a company.
link |
We're going to go make our own games, where
link |
this was something that we were able to just kind of hit them
link |
with a hammer of an experience like, wow, this
link |
is just like so much cooler than what we thought
link |
was possible there.
link |
And initially, we tried to get Nintendo
link |
to let us make Super Mario 3 on the PC.
link |
That's really what we wanted to do.
link |
We were like, hey, we can finish this.
link |
It's line of sight.
link |
This will be great.
link |
And we sent something to Nintendo,
link |
and we heard that it did get looked at in Japan,
link |
and they just weren't interested in that.
link |
But that's another one of those life could
link |
have gone a very different way, where
link |
we could have been like Nintendo's house PC team
link |
And define the direction of Wolfenstein and Doom and Quake
link |
could have been a Nintendo creation.
link |
So at the same time that we were just
link |
doing our first scrolling demos, we
link |
reached out to Scott Miller at Apogee and said,
link |
it's like, hey, we do want to make some games.
link |
These things that you think you want, those are nothing.
link |
What do you see what we can actually do now?
link |
This is going to be amazing.
link |
And he just popped right up and sent a check to us,
link |
where at that point, we still thought
link |
he might be a fraud, that he was just lying about all of this.
link |
But he was totally correct on how much money
link |
he was making with his shareware titles.
link |
And this was his real brainstorm about this,
link |
where shareware was this idea that software
link |
doesn't have a fixed price.
link |
If you use it, you send out of the goodness of your heart
link |
some money to the creator.
link |
And there were a couple of utilities
link |
that did make some significant success like that.
link |
But for the most part, it didn't really work.
link |
Now, there wasn't much software in a pure shareware model
link |
that was successful.
link |
The Apogee innovation was to take something,
link |
call it shareware, split it into three pieces.
link |
You always made a trilogy.
link |
And you would put the first piece out,
link |
but then you buy the whole trilogy
link |
for 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 everywhere for free
link |
and you paid money to get the whole set.
link |
But it was still play to shareware.
link |
And we were happy to have the first one go everywhere.
link |
And it wasn't a crippled demo, where the first episode
link |
of all these trilogies, it was a real complete game.
link |
And probably 20 times as many people played that part of it,
link |
thought they had a great game, had fond memories of it,
link |
but never paid us a dime.
link |
But enough people were happy with that,
link |
where it was really quite successful.
link |
And these early games that we didn't think very much of
link |
compared to commercial quality games,
link |
but they were doing really good business,
link |
some fairly crude things.
link |
And people, it was good business.
link |
People enjoyed it.
link |
And it wasn't like you were taking a crapshoot
link |
on what you were getting.
link |
You just played a third of the experience.
link |
And you loved it enough to hand write out a check
link |
and put it in an envelope and address it and send it out
link |
to Apogee to get the rest of them.
link |
So it was a really pretty feel good business prospect there,
link |
because everybody was happy.
link |
They knew what they were getting when they sent it in.
link |
They would send in fan mail.
link |
If you're going to the trouble of addressing a letter
link |
and filling out an envelope, you write something in it.
link |
And there were just the literal bags of fan mail
link |
for the shareware games, so people loved them.
link |
I should mention that for you, the definition of wealth
link |
is being able to have pizza whenever you want.
link |
For me, there was a dream that I would play shareware games
link |
over and over, the part that's free, over and over.
link |
And it was very deeply fulfilling experience.
link |
But I dreamed of a time when I could actually
link |
afford the full experience.
link |
And this is kind of this dreamland beyond the horizon
link |
when you could find out what else is there.
link |
In some sense, even just playing the shareware was,
link |
it's the limitation of that.
link |
You know, life is limited, eventually we all die.
link |
In that way, shareware was somehow really fulfilling
link |
to have this kind of mysterious thing beyond what's free
link |
It's kind of, I don't know, maybe it's because
link |
a part of my childhood is playing shareware games.
link |
That was a really fulfilling experience.
link |
It's so interesting how that model still brought joy
link |
to so many people.
link |
The 20X people that played it.
link |
I felt very good about that.
link |
I would run into people that would say,
link |
oh, I loved that game that you had early on,
link |
Commander Keen, whatever.
link |
And no, they meant just the first episode
link |
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 |
But so we were in this position where Scott Miller
link |
was just fronting us cash, saying, yeah, make a game.
link |
But we did not properly pull the trigger and say,
link |
all right, we're quitting our jobs.
link |
We were like, we're gonna do both.
link |
We're gonna keep working at Softdisk, working on this.
link |
And then we're going to go ahead and make a new game
link |
for Apogee at the same time.
link |
And this eventually did lead to some legal problems.
link |
And we had trouble.
link |
It all got worked out in the end,
link |
but it was not a good call at the time there.
link |
And your legal mind at the time was not stellar.
link |
You were not thinking in terms of the illegal terms.
link |
No, I definitely wasn't.
link |
And in hindsight, yeah, it's like,
link |
how did we think we were gonna get away
link |
with even using our work computers
link |
to write software for our breakaway new company?
link |
It was not a good plan.
link |
How did Commander Keen come to be?
link |
So the design process, we would start from,
link |
we had some idea of what we wanted to do.
link |
We wanted to do a Mario like game.
link |
It was gonna be a side scroller.
link |
It was gonna use the technology.
link |
We had some sense of what it would have to look like
link |
because of the limitations
link |
of this adaptive tile refresh technology.
link |
It had to have fields of relatively constant tiles.
link |
You couldn't just paint up a background
link |
and then move that around.
link |
The early design or all the design for Commander Keen
link |
really came from Tom Hall,
link |
where he was kind of the main creative mind
link |
for the early id software stuff,
link |
where we had an interesting division of things
link |
where Tom was all creative and design.
link |
I was all programming.
link |
John Romero was an interesting bridge
link |
where he was both a very good programmer
link |
and also a very good designer and artist
link |
and kind of straddled between the areas.
link |
But Commander Keen was very much Tom Hall's baby.
link |
And he came up with all the design and backstory
link |
for the different things of kind of a mad scientist,
link |
little kid with building a rocket ship
link |
and a zap gun and visiting alien worlds
link |
and doing all of this that the background
link |
that we lay the game inside of.
link |
And there's not a whole lot to any of these things.
link |
Design for us was always just what we needed to do
link |
to make the game that was gonna be so much fun to play.
link |
And we laid out our first trilogy of games,
link |
the shareware formula, it's gonna be three pieces.
link |
We make Commander Keen one, two, and three.
link |
And we just really started busting on all that work.
link |
And it went together really quickly.
link |
It was like three months or something
link |
that while we were still making games every month
link |
for Gamer's Edge, we were sharing technology between that.
link |
I'd write a bunch of code for this
link |
and we'd just kind of use it for both.
link |
Again, not a particularly good idea there
link |
that had consequences for us.
link |
But in three months, we got our first game out
link |
and all of a sudden it was three times as successful
link |
as the most successful thing Apogee had had before.
link |
And we were making like $30,000 a month
link |
immediately from the Commander Keen stuff.
link |
And that was again, a surprise to us.
link |
It was more than we thought that that was gonna make.
link |
And we said, well, we're gonna certainly roll
link |
into another set of titles from this.
link |
And in that three months, I had come up
link |
with a much better way of doing the scrolling technology
link |
that was not the adaptive tile refresh,
link |
which in some ways was even simpler.
link |
And these things, so many of the great ideas of technology
link |
are things that are back of the envelope designs.
link |
I make this comment about modern machine learning
link |
where all the things that are really important
link |
practically in the last decade are,
link |
each of them fits on the back of an envelope.
link |
There are these simple little things.
link |
They're not super dense, hard to understand technologies.
link |
And so the second scrolling trick was just a matter of like,
link |
okay, we know we've got this 64K window.
link |
And the question was always like,
link |
well, you could make a two by two,
link |
but you can't go off the edge.
link |
But I finally asked, well, what actually happens
link |
if you just go off the edge?
link |
If you take your start and you say, it's like,
link |
okay, I can move over, I'm scrolling,
link |
I can move over, I can move down, I'm scrolling.
link |
I get to what should be the bottom of the memory window.
link |
It's like, well, what if I just keep going?
link |
And I say, I'm gonna start at,
link |
what happens if I start at FFFE
link |
at the very end of the 64K block?
link |
And it turns out it just wraps back around to the top
link |
And I'm like, oh, well, this makes everything easy.
link |
You can just scroll the screen everywhere
link |
and all you have to draw is just one new line of tiles,
link |
which everything you expose,
link |
it might be unaligned off various parts
link |
of the screen memory, but it just works.
link |
That no longer had the problem of you had to have fields
link |
of the similar colors because it doesn't matter
link |
what you're doing, you could be having
link |
a completely unique world and you're just drawing
link |
the new strip as it comes on.
link |
But it might be, like you said, unaligned,
link |
so it can be all over the place.
link |
Yes, and it turns out it doesn't matter.
link |
I would have two page flipped screens,
link |
as long as they didn't overlap, they moved in series
link |
through this two dimensional window of graphics.
link |
And that was one of those like, well, this is so simple.
link |
This just works, it's faster,
link |
there it seemed like there was no downside.
link |
Funny thing was, it turned out after we shipped titles
link |
with this, there were what they called super VGA cards,
link |
the cards that would allow higher resolutions
link |
and different features that the standard ones didn't.
link |
And on some of those cards,
link |
this was a weird compatibility quirk again,
link |
because nobody thought this was not
link |
what it was designed to do.
link |
And some of those cards had more memory.
link |
They had more than just 256K and four planes.
link |
They had 512K or a megabyte.
link |
And on some of those cards, I scroll my window down
link |
and then it goes into uninitialized memory
link |
that actually exists there
link |
rather than wrapping back around at the top.
link |
And then I was in the tough position
link |
of do I have to track every single one of these?
link |
And it was a mad house back then
link |
with there were 20 different video card vendors
link |
with all slightly different implementations
link |
of their nonstandard functionality.
link |
So either I needed to natively program
link |
all of the VGA cards there to map in that memory
link |
and keep scrolling down through all of that,
link |
or I kind of punted and took the easy solution
link |
of when you finally did run to the edge of the screen,
link |
I accepted a hitch and just copied the whole screen up there.
link |
So on some of those cards, it was a compatibility mode.
link |
In the normal ones, when it all worked fine,
link |
everything was just beautifully smooth.
link |
But if you had one of those cards
link |
where it did not wrap the way I wanted it to,
link |
you'd be scrolling around, scrolling around,
link |
and then eventually you'd have a little hitch
link |
where 200 milliseconds or something
link |
that was not super smooth as it froze a little bit.
link |
And this is the binary thing.
link |
Is it one of the standard screens
link |
or is it one of the weird ones, the Super VGA ones?
link |
And so we would default to,
link |
and I think that was one of those
link |
that changed over the kind of course of deployment
link |
where early on we would have a normal mode
link |
and then you would enable the compatibility flag
link |
if your screen did this crazy flickery thing
link |
when you got to a certain point in the game.
link |
And then later, I think it probably got enabled by default
link |
as just more and more of the cards
link |
kind of did not do exactly the right thing.
link |
And that's the two edged sword
link |
of doing unconventional things with technology
link |
where you can find something that nobody thought about
link |
doing that kind of scrolling trick
link |
when they set up those cards.
link |
But the fact that nobody thought that was the primary reason
link |
when I was relying on that,
link |
then I wound up being broken on some of the later cards.
link |
Let me take a bit of a tangent,
link |
but ask you about the hacker ethic.
link |
Cause you mentioned shareware.
link |
It's an interesting world.
link |
The world of people that make money,
link |
the business and the people that build systems,
link |
And what is the hacker ethic?
link |
You've been a man of the people
link |
and you've embodied at least the part of that ethic.
link |
What does it mean?
link |
What did it mean to you at the time?
link |
What does it mean to you today?
link |
So Steven Levy's book, Hackers,
link |
was a really formative book for me as a teenager.
link |
I mean, I read it several times
link |
and there was all of the great lore
link |
of the early MIT era of hackers
link |
and ending up at the end with,
link |
it kind of went through the early MIT hackers
link |
and then the Silicon Valley hardware hackers
link |
and then the game hackers in part three.
link |
And at that time as a teenager,
link |
I really was kind of bitter in some ways.
link |
I thought I was born too late.
link |
I thought I missed the window there.
link |
And I really thought I belonged in that third section
link |
of that book with the game hackers.
link |
And they were talking about the Williams at Sierra
link |
and origin systems with Richard Garriott.
link |
And it's like, I really wanted to be there.
link |
And I knew that was now a few years in the past.
link |
but the early days, especially the early MIT hacker days,
link |
talking a lot about this sense of the hacker ethic,
link |
that there was this sense that
link |
it was about sharing information, being good,
link |
not keeping it to yourself,
link |
and that it's not a zero sum game,
link |
that you can share something with another programmer
link |
and it doesn't take it away from you.
link |
You then have somebody else doing something.
link |
And I also think that there's an aspect of it
link |
where it's this ability to take joy
link |
in other people's accomplishments,
link |
where it's not the cutthroat bit of like,
link |
I have to be first,
link |
I have to be recognized as the one that did this
link |
but being able to see somebody else do something
link |
and say, holy shit, that's amazing.
link |
And just taking joy in the ability of something amazing
link |
that somebody else does.
link |
And the big thing that I was able to do through ID Software
link |
was this ability to eventually release the source code
link |
like all of our really seminal game titles.
link |
And that was a, it was a stepping stone process
link |
where we were kind of surprised early on
link |
where people were able to hack the existing games.
link |
And of course I had experience with that.
link |
I remember hacking my copies of Ultima.
link |
So I'd give myself 9999 gold and raise my levels
link |
and 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 games,
link |
I am making level editors for Commander Keen
link |
or hacking up Wolfenstein 3D,
link |
but I made the pitch internally
link |
that we should actually release our own tools
link |
for like what we did, what we use to create the games.
link |
And that was a little bit debatable about,
link |
well, will this let other, we'll give people leg up.
link |
what's that gonna mean for the competition?
link |
But the really hard pitch was to actually release
link |
the full source code for the games.
link |
And it was a balancing act with the other people
link |
inside the company where it's interesting
link |
how the programmers generally did get,
link |
certainly the people that I worked closely with,
link |
they did kind of get that hacker ethic bit
link |
where you wanted to share your code.
link |
You were proud of it.
link |
You wanted other people to take it, do cool things with it.
link |
But interestingly, the broader game industry
link |
is a little more hesitant to embrace that
link |
than like the group of people
link |
that we happen to have at id Software,
link |
where it was always a little interesting to me
link |
seeing how a lot of people in the game modding community
link |
were very possessive of their code.
link |
They did not wanna share their code.
link |
They wanted it to be theirs.
link |
It was their claim to fame.
link |
And that was much more like what we tended to see
link |
with artists where the artists understand something
link |
about credit and wanting it to be known as their work.
link |
And a lot of the game programmers
link |
felt a little bit more like artists
link |
than like hacker programmers,
link |
in that it was about building something
link |
that maybe felt more like art to them
link |
than the more tool based and exploration based
link |
kind of hacking culture side of things.
link |
Yeah, it's so interesting that this kind of fear
link |
that credit will not be sufficiently attributed to you.
link |
And that's one of the things that I do bump into a lot
link |
because I try not to go...
link |
I mean, it's easy for me to say
link |
because so much credit is heaped on me
link |
for the id Software side of things.
link |
But when people come up and they wanna pick a fight
link |
and say, no, it's like that wasn't where first person gaming
link |
came from and you can point to some of like things
link |
on obscure titles that I was never aware of
link |
or like the old Playdoh systems
link |
or each personal computer had something that was 3Dish
link |
and moving around.
link |
And I'm happy to say it's like, no, I mean,
link |
I saw Battlezone and Star Wars in the arcades.
link |
I had seen 3D graphics, I had seen all these things
link |
that are standing on the shoulders of lots of other people.
link |
But sometimes these examples they pull out,
link |
it's like, no, I didn't know that existed.
link |
I mean, I had never heard of that before then
link |
that didn't contribute to what I made,
link |
but there's plenty of stuff that did.
link |
And I think there's good cases to be made
link |
that obviously Doom and Quake and Wolfenstein
link |
were formative examples for what everything
link |
that came after that.
link |
But I don't feel the need to go fight
link |
and say claim primacy or initial invention
link |
of anything like that.
link |
But a lot of people do want to.
link |
I think when you fight for the credit in that way
link |
and it does go against the hacker ethic,
link |
you destroy something fundamental about the culture,
link |
about the community that builds cool stuff.
link |
I think credit ultimately,
link |
so I had this sort of,
link |
there's a famous wrestler and freestyle wrestling
link |
called Buvai Sarasateeva.
link |
And he always preached that you should just focus
link |
on the art of the wrestling and let people
link |
write your story however they want.
link |
The highest form of the art is just focusing on the art.
link |
And that is something about the hacker ethic
link |
is just focus on building cool stuff,
link |
sharing it with other cool people,
link |
and credit will get assigned correctly
link |
in the long arc of history.
link |
Yeah, and I generally think that's true.
link |
there's some things, there's a graphics technique
link |
that got labeled CarMax Reverse.
link |
I am literally named,
link |
and it turned out that I wasn't the first person
link |
to figure that out.
link |
Most scientific things or mathematical things you wind up,
link |
it's like, oh, this other person
link |
had actually done that somewhat before.
link |
And then there's things that get attributed to me
link |
like the inverse square root hack that I actually didn't do.
link |
I flat out, that wasn't me.
link |
And it's like, it's weird how the memetic power
link |
of the internet, I cannot convince people of that.
link |
You're like the Mark Twain of programming.
link |
Everything just gets attributed to you now,
link |
even though you've never sought the credit of things.
link |
But part of the fact of the humility behind that
link |
is what attracts the attributions.
link |
Let's talk about a game.
link |
I mean, one of the greatest games ever made.
link |
I know you could talk about doing Quake and so on,
link |
but to me, Wolfenstein 3D was like, whoa.
link |
It blew my mind that a world like this could exist.
link |
So how did Wolfenstein 3D come to be
link |
in terms of the programming, in terms of the design,
link |
in terms of some of the memorable technical challenges?
link |
And also, actually just something you haven't mentioned
link |
is how did these ideas come to be inside your mind,
link |
the adaptive side scrolling,
link |
the solutions to these technical challenges?
link |
So I usually can introspectively pull back
link |
pretty detailed accounts of how technology solutions
link |
and design choices on my part came to be,
link |
where 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, which had textured walls,
link |
scaled enemies, and some more functionality,
link |
like the disappearing walls and some other stuff.
link |
But what's really interesting
link |
from a game development standpoint is those games,
link |
Catacombs 3D, Hover Tank, and Wolfenstein,
link |
they literally used the same code
link |
for a lot of the character behavior
link |
that a 2D game that I had made earlier called Catacombs did,
link |
where 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 that this exact same game experience
link |
just 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 impact on the players.
link |
So it wasn't a true 3D,
link |
you're saying that you could kind of fake it,
link |
you can like scale enemies,
link |
meaning things that are farther away,
link |
you can make them smaller.
link |
So the game was a 2D map,
link |
like all of our games use the same tool for creation.
link |
We use the same map editor for creating Keen as Wolfenstein
link |
and Hover Tank and Catacombs and all this stuff.
link |
So the game was a 2D grid made out of blocks.
link |
And you could say, well, these are walls,
link |
these are where the enemies start,
link |
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 like that.
link |
And then the thought that these early games,
link |
all it did was take the same basic enemy logic,
link |
but instead of seeing it from the God's eye view on top,