John Carmack: Doom, Quake, VR, AGI, Programming, Video Games, and Rockets | Lex Fridman Podcast #309
I845O57ZSy4 • 2022-08-04
Transcript preview
Open
Kind: captions
Language: en
I remember the reaction where he had
drawn these characters and he was slowly
moving around and like people had no
experience with 3D navigation it was all
still keyboard we didn't even have mice
uh set up at that time but slowly moving
going up picked up a key go to a wall
the wall disappears in a little
animation and there's a monster like
right there and he practically fell out
of his chair it was just like ah and
games just didn't do that you know the
games were the God's eye view you were a
little invested in your little guy you
can be like you know happy or sad when
things happen but you just did not get
that kind of startle
reaction your face something in the back
of your brain some reptile brain thing
is just going oh something just
happened and that was one of those early
points where it's like yeah this is
going to make a difference this is going
to be powerful and it's going to
matter the following is a conversation
with John carac widely considered to be
one of the greatest programmers ever he
was the co-founder of ID software and
the lead programmer on several games
that revolutionized the technology the
experience and the role of gaming in our
society including Commander Keane
Wolfenstein 3D doom and Quake he spent
many years as the CTO of oculus VR
helping to create portals into Virtual
Worlds and to define the technological
path to the metaverse at meta and now he
has been shifting some some of his
attention to the problem of artificial
general
intelligence this was the longest
conversation on this podcast at over 5
hours and still I could talk to John
many many more times and we hope to do
just that this is the Lex Freedman
podcast to support it please check out
our sponsors in the description and now
dear friends here's John
carac what was the first program you've
ever written do you remember yeah I do
so I remember being in a Radio Shack
going up to the trs8 computers and
learning just enough to be able to do 10
print John carac I and it's kind of
interesting how of course I you know
carnigan en Richie kind of standardized
hello world is the first thing that you
do in every computer programming
language and every computer but not
having any interaction with the cultures
of Unix or any other standardized things
it was just like well what am I going to
say I'm going to say my name and then
you learn how to do goto1 and have it
scroll all off the screen and that was
definitely the first thing that I wound
up doing on a computer can I ask you
programming advice I was always told in
the beginning that you're not allowed to
use go-to statements that's really bad
programming is this correct or not
jumping around code can can we look at
the philosophy and the technical uh
aspects of the go-to statement that
seems so convenient but it's supposed to
cly back in the day in basic programming
languages you didn't have proper Loops
you didn't have four whils and repeats
you know that was the land of Pascal for
people that kind of generally had access
to it back then so you had no choice but
to use Goos and as you made what were
big programs back then which were a
thousand line basic program is a really
big program they did tend to sort of
degenerate into madness uh you didn't
have good editors or code exploration
tools so you would wind up fixing things
in one place add a little patch and
there's reasons why structured
programming generally helps
understanding but go-tos aren't
poisonous sometimes they're the right
thing to do uh usually it's because
there's a a language feature missing
like nested breakes or something where
it's it can sometimes be better to do a
go-to cleanup or go-to error rather than
having multiple Flags multiple if
statements littered throughout things
but but it is rare I if you grip through
all of my code right now um I don't
think any of my current code bases would
actually have a go-to but
deep within sort of the technical
underpinnings of a major game engine
you're going to have some go-tos in a
couple places probably yeah the
infrastructure on top of like the closer
you get to the machine code the more
go-tos you're going to see the more of
these like hacks you're going to see
because uh the set of features available
to you in low-level programming
languages is not uh is limited
so print John carac when is the first
time if we could talk about love that
you fell in love with programming you
said like this this is really something
special it really was something that was
one of those love at first sight things
where just really from the time that I
understood what a computer was even I
mean I remember looking through old
encyclopedias at the black and white
photos of the IBM main frames with the
real toore tape decks and for people
nowadays it can be a little hard to
understand what the world was like then
from information gathering where I would
go to the libraries and there would be
couple books on the Shelf about
computers and they would be very out of
date even at that point just not a lot
of information but I would grab
everything that I could find and you
know devour everything whenever time or
Newsweek had some article about
computers I would like cut it out with
scissors and put it somewhere it just it
felt like this magical thing to me this
idea that the computer would just do
exactly what you told it to I mean and
there's a little bit of the genie
monkeys paw sort of issues there where
you'd better be really really careful
with what you're telling it to do but it
wasn't going to back talk you it wasn't
going to have a different point of view
it was going to carry out what you told
it to do and if you had the right
commands you could make it do these
pretty magical things and so what kind
of programs did you write at first so be
on the print John carac so I can
remember as going through the learning
process where you find at the start
you're just learning how to do the most
basic possible things and I can remember
stuff like uh uh Superman com IC that
Radio Shack commissioned to have I it's
like Superman had lost some of his super
brain and kids had to use Radio Shack
trs8 computers to do calculations for to
help him kind of complete his heroics
and I'd find little things like that um
and then get a few basic books to be
able to kind of work my way up and again
it was so precious back then I had a
couple books that would teach me
important things about it I had one book
that I could start to little learn a
little bit of assembly language from and
I'd have a few books on basic and some
things that I could get from the
libraries but I my goals in the early
days was almost always making games of
various kinds you know I had uh I loved
the arcade games and the early Atari
2600 games and being able to do some of
those things myself on the computers was
very much what I aspired to and it was a
whole journey where if you learn normal
basic you can't do any kind of an action
game you can write an adventure game you
can write things where you say what do
you do here uh get sworded attack troll
that type of thing and that can be done
in the context of basic uh but to do
things that had moving Graphics there
were only the most limited things you
could possibly do you could maybe do
breakout or pong or that sort of thing
in low resolution graphics and in fact
one of my first sort of major technical
hacks that I was kind of fond of was on
the Apple 2 computers they had a they
had a Mode called low resolution
Graphics where of course all Graphics
were low resolution back then but you
know regular low resolution Graphics it
was a grid of 40x40 pixels normally but
they could have 16 different colors and
I wanted to make a game kind of like the
uh the arcade game Vanguard just a
scrolling game and I wanted to just kind
of have it scroll vertically up and I
could move a little ship around you
could manage to do that in basic but
there's no way you could redraw the
whole screen and I remember at the time
just coming up with what felt like a
brainstorm to me where I knew enough
about the way the hardware was
controlled where the text screen and the
low resolution Graphics screen were
basically the same thing and all those
computers could scroll their text screen
reasonably you could do a listing and it
would scroll things up and I figured out
that I could kind of tweak just a couple
things that I barely understood to put
it into a graphics mode and I could draw
graphics and then I could just do a line
feed at the very bottom of the screen
and then the system would scroll it all
up using an Assembly Language routine
that I didn't know how to write back
then so I that was like this first great
hack that sort of had analoges later on
in my career for a lot of different
things so I found out that I could draw
a screen I could do a line feed at the
bottom it would scroll it up once I
could draw a couple more lines of stuff
at the bottom and that was my first way
to kind of scroll the screen which I you
know which was interesting and that that
played a big part later on in the ID
software days as well so do efficient
scroll efficient
drawing where you don't have to draw the
whole screen but you draw from the
bottom using the thing that was designed
in the hardware for text output yeah
where so much of until recently I game
design was limited by what you could
actually get the computer to do where
it's easy to say like okay I want to
scroll the screen you just redraw the
entire screen at a slight offset and
nowadays that works just fine computers
are ludicrously fast uh but up until a
decade ago or so there were all these
things everybody wanted to do but if
they knew enough programming to be able
to make it happen it would happen too
slow to be a good experience either just
ridiculously slow or just slow enough
that it wasn't fun to experience it like
that so so much of kind of the first
couple decades of the programming work
that I did was largely figuring out how
to do something that everybody knows how
they want it to to happen it just has to
happen two to 10 times faster than sort
of the straightforward way of doing
things would make it happen and it's
different now because at this point lots
of things you can just do in the most
naive possible way and it still works
out you know you don't have nearly the
creative limitations or the incentives
for optimizing on that level and there's
a lot of pros and cons to that but I do
generally you know I'm not going to do
the the angry old man shaking my fist at
the clouds bit where back in my day
programmers had to do real programming
you know it's it's amazing that you can
just kind of pick an idea and go do it
right now and you don't have to be some
Assembly Language Wizard or deep GPU
Arcanist to be able to figure out how to
make your wishes happen well there's
still see that's true but let me put on
my old man with a fist hat and say that
probably the thing that will Define the
future still requires you to operate at
the limits of the current system so
we'll probably talk about this but if
you talk about building the meterse and
building a VR experience that's
compelling it probably requires you to
not to go to assembly or maybe not
literally but sort of uh spiritually to
go to the limits of what the system is
capable of yeah and that really was why
virtual reality was um specifically
interesting to me where it had all the
ties to you could say that even back in
the early days I have some old magazine
articles that's talking about Doom as a
virtual reality experience back when
just seeing anything in 3D uh so you
could say that we've been trying to
build those virtual experiences from the
very beginning and in the modern era of
virtual reality especially on the mobile
side of things when it's Standalone and
you're basically using a cell phone chip
to be able to produce these very
immersive experiences it does require
work it's not at the level of what an
old school console game programmer would
have operated at where you're looking at
Hardware registers and you're scheduling
all the DN uh dma accesses but it is
still definitely a different level than
what a web developer or uh or even a PC
Steam game developer usually has to work
at and again it's great there's
opportunities for people that want to
operate at either end of that Spectrum
there and still provide a lot of value
to the
world let me ask you uh uh sort of a big
question about preference what would you
say is the best programming
language your favorite but also the best
you've seen throughout your career
you're considered by many to be the
greatest programmer ever I mean it's so
difficult to place that label on anyone
if but if you put it on anyone it's you
so let me ask you these kind of
ridiculous questions of what's the best
band of all time but in your case what's
the best programming language everything
has all the caveats about it but so what
I use so nowadays I I do program a
reasonable amount of python for AIML
sorts of work uh that's I'm not a a
native python programmer it's something
I came to very late in my career I
understand what it's good for dream in
Python I do not and it has some of those
things where there's some amazing stats
when you say if you just start if you
make a loop you know a triple nested
Loop and start doing operations in
Python you can be thousands to
potentially a million times slower than
a proper GPU tensor operation and these
are staggering numbers you know you can
be as much slower as we've almost gotten
faster in our I you know our pace of
progress and all this other miraculous
stuff so your intuition is about
inefficiencies within the the python
sort of it keeps hitting me upside the
face where it just it's gotten to the
point now I understand it's like okay
you just can't do a loop if you care
about performance in Python you have to
figure out how you can reformat this
into some big Vector operation or
something that's going to be done
completely within a C++ library but the
other hand is it's it's amazingly
convenient and you just see stuff that
people are able to Cobble together by
you just import a few different things
and you can do stuff that nobody on
Earth could do 10 years ago and can do
it in a little cookbook thing that you
copy pasted out of a website so that is
really great when I'm sitting down to do
what I consider kind of serious
programming it's still in C++ and it's
really kind of a CF flavored C++ at that
where I'm not big into the modern uh
template metaprogramming sorts of things
I see a lot of train wrecks coming from
some of that over
abstraction uh I spent a few years
really going kind of deep into the kind
of the historical list board work and
the hasal and some of the functional
programming sides of things and
there's there is a lot of value there in
the way you think about things and I
changed a lot of the way I write my CN
C++ code based on what I learned about
uh the value that comes out of not
having this random mutable state that
you kind of lose track of because
something that many people don't really
appreciate till they've been at it for a
long time is that it's not the writing
of the program initially it's the whole
life span of the program and that's when
it's not necessarily just how fast you
wrote it or how how fast it operates but
it's how can it Bend and adapt as
situations change and then the thing
that I've really been learning in my
time at meta with uh the Oculus and VR
work is it's also how well it hands off
between a continuous kind of revolving
door of programmers taking over
maintenance and different things and how
you get people up to speed in different
areas and there's all these other
different aspects of it so C++ a good
language for Handover between Engineers
probably not the best uh and there's
some really interesting aspects to this
where in some cases languages that are
not um that are not generally thought
well of for many reasons like C is
derided pretty broadly that yes
obviously all of these security flaws
that happen with the memory unsafe and
uh buffer overruns and the things that
you've got there but there is this
underappreciated aspect to the language
is so simple anyone can go and you know
if you know C you can generally jump in
someplace and not have to learn what
paradigms they're using because they're
just aren't that many available I think
there's you know and there's some really
really well-written C code like it's I
find it great that if I'm messing around
with something an open BSD say I mean I
can be walking around in the kernel and
I'm like I understand everything that's
going on here uh it's not hard for me to
figure out what's I you know what I need
to do to to you know make whatever
change that I need to
while you can have you know more
significant languages like it's a
downside of lisp where I don't regret
the time that I spent with lisp I I
think that it I it did help you know
help my thinking about programming in
some ways but the people that are the
biggest Defenders of lisp are saying how
malleable of a language it is that if
you write a huge Lis program you've
basically invented your own kind of
language and structure because it's not
The Primitives of the language you're
using very much it's all of the things
you've built on top of that and then a
language like racket kind of one of the
more modern list versions it's
essentially touted as a language for
building other languages and I
understand the value of that for a tiny
little project but the idea of that for
one of these long-term supported by lots
of people kind of horrifies me where all
of those abstractions that you're like
okay you can't touch this code till you
educate yourself on all of these things
that we've built on top of that and it
was interesting to see how when Google
made go a lot of the criticisms of that
are it's like wow this is not a
state-of-the-art language this language
is just so simple and almost crude and
you could see the programming language
people just looking down at it but it
does seem to be quite popular as
basically saying this is the good things
about C everybody can just jump right in
and use it you don't need to restructure
your brain to write good code in it so I
I wish that I had more opportunity for
doing some work in go uh rust is the
other modern language that everybody
talks about that I'm not fit to pass
judgment on I've done you know a little
bit beyond hello world I wrote Some Like
video decompression work in Rust just as
an exercise but that was a few years ago
and I haven't really used it since you
know the best programming language is
the one that works generally that you're
currently using because that's another
trap is in almost every case I've seen
when people mixed languages on a project
that's a mistake I would rather stay
just in one language so that everybody
can work across the entire thing and we
have like at meta we have a lot of
projects that use kind of react
framework so you've got JavaScript here
and then you have uh C++ for real work
and then you may have Java interfacing
with some other part of the Android
system and those are all kind of
horrible things and that was you know
one thing that I I remember talking with
uh with BOS at Facebook about it where
like man I wish we could have just said
we're only hiring C++ programmers I am
and he just thought from the from the
Facebook meta perspective well we just
wouldn't be able to find enough I you
know with the thousands of programmers
they've got there it is not necessarily
a Dying Breed but you can sure find a
lot more Java JavaScript programmers and
I I kind of mentioned that to Elon one
time and he was kind of flabbergasted
about that it's like well you just you
go out and you find those programmers
and you don't hire the other programmers
that don't do the languages that you
want to use but right now I guess yeah
they're using JavaScript on a bunch of
the the SpaceX work for the UI side of
things when you go find UI programmers
they're JavaScript programmers I wonder
if that's because there's a lot of
JavaScript programmers because I I do
think that great programmers are
rare that it's not you know if you just
look at statistics of how many people
are using different programming
languages that doesn't tell you the
story of what the great programmers are
using and so you have to really look at
what you speaking to which is the
fundamentals of a language what does it
encourage how does it encourage you to
think what kind of systems does it
encourage you to build there is
something about
C++ that has elements of creativity but
forces you to be an adult about your
programming it expects you to be an
adult does not force you to and
so so it brings out people that are
willing to be creative in terms of
building large systems and coming up
with interesting Solutions but at the
same time have the sort of the good
software engineering practices that uh
amend themselves to Real World Systems
let me ask you about this other language
JavaScript so if we you know aliens
visit in in thousands of years and
humans are long gone something tells me
that most of the systems they find will
be running JavaScript I kind of think
that if the simul if we're living the
simulation it's ring it's written in
JavaScript um you know for the longest
time even
still JavaScript didn't get any respect
and yet it runs so much of the world and
an increasing number of the world is it
possible that all everything will be
written in JavaScript one day so the
engineering under JavaScript is really
pretty phenomenal uh the the systems
that make JavaScript run as fast as it
does right now are kind of Miracles of
modern engineering in many ways it does
feel like it is not an optimal language
for all the things that it's being used
for or an optimal distribution system to
hu to build huge apps in something like
this uh without type systems and so on
um but I think for a lot of people it
does reasonably the necessary things
it's still a CF flavored language it's
still a you know a braces and semicolon
language uh it's not hard for people to
be trained JavaScript and then
understand the roots of where it came
from I think garbage collection is
unequivocably a good thing for most
programs to be written in it's funny
that I still just this morning I was on
I was seeing a Twitter thread of a bunch
of really senior Game Dev people arguing
about the the virtues and costs of
garbage collection and you will run into
some people that are top-notch
programmers that just say no this is
literally not a good thing oh because it
makes you lazy yes that it makes you not
think about things and and I do disagree
I think that the there is so much
objective data on the the
vulnerabilities that have happened in CN
C++ programs sometimes written by the
best programmers in the world it's like
nobody is good enough to avoid ever
shooting themselves in the foot with
that you write enough C code you're
going to shoot yourself in the foot and
garbage collection is a very great thing
for the vast majority of programs it's
only when you get into the tightest of
real time things that you start saying
it's like no the garbage collection has
more costs than it has benefits for me
there but that's not 99 plus% of all the
software in the world so JavaScript is
not terrible in those ways and um and so
much of programming is not the language
itself it's the infrastructure around
every you know that surrounds it all the
libraries that you can get and the
different stuff that you can ways you
can deploy it I the portability that it
gives you and JavaScript is really
strong on a lot of those things where
for a long time and it still does if I
look at it the the web stack about
everything that has to go when you do
something really trivial in JavaScript
and it shows up on a web browser to kind
of X-ray through that and see everything
that has to happen for your one little
JavaScript statement to turn into
something visible in your web
browser it's very very disquieting just
the the depth of that stack and the fact
that so few people can even comprehend
all of the levels that are going on on
there but it's again I have to caution
myself to not be the in the good old
days old man about it because clearly
there's enormous value here the world
does run on JavaScript to a pretty good
approximation there and it's not falling
apart there's a bunch of scary stuff
where you look at console logs and you
just see all of these bad things that
are happening but it's still kind of
limping along and nobody really
notices but so much of my systems design
and systems analysis goes around you
should understand what the speed of
light is like what would be the best you
could possibly do here and it sounds
horrible but in a lot of cases you can
be a thousand times off your speed of
light uh velocity for something and it's
still be okay and in fact it can even
sometimes still be the optimal thing in
a larger system standpoint where there's
a lot of things that you don't want to
have to parachute in someone like me to
go in and say make this this web page
Run a thousand times faster you know
make this web app into a a hardcore
native application that starts up in 37
milliseconds and everything responds in
less than one frame latency that's just
not necessary and if somebody wants to
go pay me millions of dollars to do
software like that when they can take
somebody right out of a boot camp and
say spin up an application for this uh
often being efficient is not really the
best metric it's like there's that
applies in a lot of areas where it's
kind of interesting how a lot of our
appliances and everything are all built
around Energy Efficiency sometimes at
the expense of robustness in some other
ways or higher costs in other ways where
there's interesting things where energy
or electricity could become much cheaper
in a future world and that could change
our engineering tradeoffs for the way we
build certain things where you could
throw away efficiency and actually get
more benefits that actually matter I
mean that's one of my you know I one of
the directions I was considering
swerving into was uh nuclear energy when
I was kind of like what do I want to do
next it was either going to be I
cost-effective nuclear fion or
artificial general intelligence and one
of the one of my pet ideas there is like
you know people don't understand how
cheap nuclear fuel is and there would be
ways that uh you could be a quarter the
efficiency or less but if it wound up
making your plant 10 times cheaper that
could be a radical innovation in
something like that so there's like some
of these thoughts around like direct
fion energy conversion you know fion
fragment conversion that you know maybe
you build something that doesn't require
all the steam turbines and everything
even if it winds up being less efficient
so that applies a lot in programming
where there's always it's always good to
know what you could do if you really sat
down and took it uh took it far because
sometimes there's discontinuities like
around user reaction times there are
some points where the difference between
operating in 1 second and 750
milliseconds uh not that huge you'll see
it in webpage statistics but most of the
usability stuff not that great but if
you get down to 50 milliseconds then all
of a sudden this just feels amazing you
know it's just like doing your bidding
instantly rather than you're giving it a
command twiddling your thumbs waiting
for it to respond so sometimes it's
important to really crunch hard to get
over some threshold but there are there
are broad basins in the value metric for
lots of work where it just doesn't pay
to even go that extra mile and there are
Craftsmen that you know they just don't
want to buy that and more power to them
you know if somebody just wants to say
no I'm going to be I'm my pride is in my
work I'm never going to do something
that's not as good as I could possibly
make it I respect that and sometimes I
am that person but I try to focus more
on the larger value picture and you do
pick your battles and you deploy your
resources in the play that's going to
give you sort of the best user value in
the end well if you look at the
evolution of life on Earth as a kind of
um programming
effort it's uh it seems like efficiency
isn't the thing that's being optimized
for like natural selection is very
inefficient but it it kind
of uh adapts and through the process of
adaptation is building more and more
complex systems they're more and more
intelligent the final result is kind of
pretty interesting and so I think of
JavaScript the same way it's like this
giant mess that you know things
naturally die off if they don't work and
they if they if they become useful to
people they kind of naturally live and
then you build this community large
community of people that are generating
code and some code is sticky some is not
and nobody knows the the inefficiencies
or the efficiencies or the breaking
points like how reliable this code is
and you kind of just run it assume it
works and then get unpleasantly
surprised and then that's very kind of
The evolutionary process so that's a
really good analogy and we can go a lot
of places with that where in the
earliest days of programming when you
had finite you could count the bites
that you had to work on this you had all
the the kind of hackers playing code
golf to be one less instruction than the
other person's multiply routine to kind
of get through and and it was so
perfectly crafted it was a crystal piece
of artwork when you had a program
because there just were not that many
you couldn't afford to be lazy in
different ways and in many ways I see
that as akin to the symbolic AI work
where again if you did not have the
resources to just say well we're going
to do billions and billions of
programmable weights here you have to
turn it down into something that is
symbolic and crafted like that but
that's definitely not the way DNA and
life and uh biological evolution and
things work I you know on the one hand
it's it's almost uming how little
programming code is in our bodies you
know we've got a couple billion base
pairs and it's like this all fits on a
thumb drive for years now and then our
brains are even a smaller section of
that you've got maybe 50 megabytes and
this is not like Shannon limit perfectly
uh information dense uh conveyances here
it's like these are messy codes you know
they're broken up into amino acids a lot
of them don't do important things or
they do things in very awkward ways but
it is this process of just accumulation
on top of things and you need you need
scale both you need scale for sort of
the population for that to work out and
in the early days in the the 50s and 60s
the the kind of ancient era of computers
where you could count when they said
like when the internet started even in
the 70s there were like 18 hosts or
something on it it was this small finite
number and you were still optimizing
everything to be as good as you possibly
could be but now it's billions and
billions of devices and everything going
on and you can have this very much
Natural Evolution going on where lots of
things are tried lots of things are
blowing up Venture capitalists lose
their money I when a startup invested in
the wrong Tech stack and things
completely failed or failed the scale
but you know but good things do come out
of it and it's interesting to see the
the mimetic evolution of the way
different things happen like mentioning
hello world at the beginning it's funny
how some little thing like that where
everybody every programmer knows hello
world now and that was a completely
arbitrary sort of decision that just
came out of the the dominance of Unix
and c and uh early examples of things
like that so millions of experiments are
going on all the time but some things do
kind of rise to the top and win the
fitness War for whe whether it's mind
space or programming techniques or
anything like there's a site on stack
exchange called code golf where people
compete to write the shortest possible
program for a particular task in all the
different kinds of languages and it's
really interesting to
see folks kind of um they're masters of
their craft really play with the limits
of programming languages it's really
beautiful to see and across all the
different programming languages you get
to see some of these weird programming
languages and mainstream ones python
difference between Python 2 and 3 you
get to see the difference between C and
C++ and Java you get to see JavaScript
all of that and it's it's kind
of um inspiring to see how much depth of
possibility there is within programming
languages that code golf kind of tasks
reveal most of us if you do any kind of
programming you kind of do boring kind
of very vanilla type of code that's the
way to build large systems but it's nice
to see that the possibility of creative
genius is still within those languages
it's
uh Laden with those languages so given
that given that you are once again one
of the greatest programmers ever uh what
do you think makes a good programmer
maybe a good modern programmer so I just
gave a long rant SL lecture at meta uh
to the TPM organization and my my
biggest point was everything that we're
doing really should flow from user value
you know all the good things that we're
doing it's like we're we're not
technical people it's like you shouldn't
be taking Pride just in the specific
thing like code golf is the sort of
thing it's a fun puzzle game but that
really should not be a major motivator
for you it's like we're solving problems
for people or we're providing
entertainment to people we're doing
something of value to people that's
displacing something else in their life
so we want to be providing a net value
over what they could be doing uh but
instead they're choosing to use our
products and that's where I mean it
sounds TR or corny but I fundamentally
do think that's how you make the world a
better place if you have given more
value to people than it took you and
your team to create then the world's a
better place people have uh they've gone
from something of lesser value chosen to
use your product and their life feels
better for that and if you've produced
that economically that's that's a really
good thing uh you know on the other hand
if you spent ridiculous amounts of money
you've just kind of shoveled a lot of
cash into a wood chipper there and you
should maybe you know not feel so good
about what you're doing so being proud
about like a specific architecture or a
specific technology or a specific code
sequence that you've done it's great to
get a little smile like a tiny little
dopamine hit for that but the the top
level metric should be that you're
building things of value now you can get
into the argument about how you you know
what is user value how do you actually
quantify that and there can be big
arguments about that but it's easy to be
able to say okay this pissed off user
there is not getting Val from what
you're doing this user over there with
the big smile on their face I am the
moment of delight when something
happened there's a value that's happened
there I mean if you you have to at least
accept that there is a concept of user
value even if you have trouble exactly
quantifying it you can usually make
relative arguments about it well this
was better than this uh We've improved
things so you know being a you know
being a servant to the user is your job
when you're de when you're a developer
you want to be producing something that
I you know other people are going to
find valuable and if you are technically
inclined then finding the right levers
to be able to pull to be able to make a
design that's going to produce the most
value for the least amount of effort and
it always has to be uh kind of divide
there's a ratio there where you it's a
problem at the big tech companies you
know whether it's you know meta Google
Apple Microsoft Amazon companies that
have almost infinite money I I mean I
know their CFO will complain that it's
not infinite money but from most
developer standpoints it really does
feel like it and it's almost
counterintuitive that if you're working
hard as a developer on something there's
always this thought if only I had more
resources more people more RAM more
megahertz I then my product will be
better and that sense that at certain
points it's certainly true that if you
are really hamstrung by this removing an
obstacle will will make a better product
make more value but if you're not making
your core design decisions in this
fiercely competitive uh way where you're
saying feature a or feature B you can't
just say let's do both uh because then
you're not making a value judgment about
them you're just saying well they both
seem good I don't want to necessarily
have to pick out which one is better or
how much better and tell Team B that uh
sorry we're not going to do this because
a is more important but that um that
notion of always having to really
critically value what you're doing your
time the resources you expend even the
opportunity cost of doing something else
that's you know super important well let
me ask you about this the big debates
that you're mentioning of how to measure
value is it possible to measure it kind
of um
numerically uh or can you do the sort of
Johnny the designer route of
imagining sort of uh some somebody using
a thing and imagining a smile on their
face Imagining the experience of love
and joy that you have when you use the
thing that's from a design perspective
or if you're building more like a low
lower level thing for like Linux you
imagine a developer that might come
across this and use it and become uh
happy and better off because of it so
where do you land on those things is it
measurable so I imagine like meta and
Google will probably try to measure the
thing they'll try to it's like you try
to optimize engagement or something
let's measure engagement and then I
think there is a kind of I mean I admire
the designer ethic of like think of a
future that's immeasurable and you try
to make somebody in that future that's
different from today happy so I do
usually favor if you can get any kind of
a a metric that's good by all means
listen to the data but you can go too
far there where we've had problems where
it's like hey we had a performance
regression because our fancy new
Telemetry system is doing a bazillion
file rights uh to kind of archive this
stuff because we needed to collect
information to determine if we were
doing you know if our plans were good so
when information is available you should
never ignore it I mean from actual users
using the thing human beings using the
thing large number of human beings and
you get to see sort of there's the zero
to one problem of when you're doing
something really new you do kind of have
to make a guess but one of the points
that I've been making at meta is we have
more than enough users now that anything
somebody wants to try in VR we have
users that will be interested in that
you do not get to make a completely
Greenfield Blue Sky pitch and say I'm
going to do this because I think it
might be interesting I challenge
everyone there are going to be people
whether it's you know working in VR on
your I like on your desktop replacement
or communicating with people in
different ways or playing the games
there there are going to be probably
millions of people or at least in if you
pick some tiny Niche that we're not in
right now there's still going to be
thousands of people out there that have
the headsets that would be your target
market and I tell people pay attention
to them don't invent fictional users
don't you know make an ALICE Bob Charlie
uh that fits whatever Matrix of of
tendencies that you want to break the
market down to because it's a mistake to
think about imaginary users when you've
got real users that you could be working
with but you know on the other hand
there is there is value to having a kind
of wholeness of vision for a product and
I companies like meta have you know they
understand the trade-offs where you can
have a company like SpaceX or you know
Apple in the the Steve Jobs era where
you have a very powerful leading
personality that I you know that can
micromanage at a very low level and can
say it's like no that handle needs to be
different or that uh that icon needs to
change the tint there and they clearly
get a lot of value out of it they also
burn through a lot of employees that
have horror stories to tell about uh
working there afterwards my position is
that you're at your best when you've got
a leader that is at their limit of what
they can kind of comprehend of
everything below them uh and they can
have an informed opinion about
everything that's going on and you take
somebody it's You've Got to Believe that
somebody that has 30 40 years of
experience you would hope that they've
got wisdom that the the just out of boot
camp person uh contributing doesn't have
and that if they're like well that's
wrong there you probably shouldn't do it
that way or even just don't do it that
way do it another way so there's value
there but it can't go beyond a certain
level I you I mean I have Steve Jobs
stories of him saying things that are
just wrong right in front of me about
technical things because he was not
operating at that level
but when it does work and you do get
that kind of passionate leader that's
thinking about the entire product and
just really deeply cares about not
letting anything slip through the cracks
I I think that's got a lot of value but
the other side of that is the people
saying that well we want to have these
independent teams that are bubbling up
the ideas because like it's it's almost
it's anti- capitalist or anti-free
Market to say it's like I want my grand
you know my great leader to go ahead and
dictate all these points there where
clearly free markets bring up things
that you know you don't expect like in
VR we we saw a bunch of things like it
didn't turn out at all the way the early
people thought were going to be the key
applications and things that you know
would not have been approved by uh you
know the the dark cabal making the
decisions about what gets into the store
turn out to some cases be extremely
successful uh so yeah I definitely kind
of wanted to be there was a point where
I did make a pitch it's like hey make me
VR dictator and I'll go in get done
I am and that's just it's not in the
culture at meta you know and they they
understand the tradeoffs they I and
that's just not the way that's not the
company that they want the team that
they uh that they want to do yeah it's
fascinating because VR and we'll talk
about it more it's still it's still
unclear to
me in what way VR will change the world
because it does seem clear that VR will
somehow fundamentally transform this
world and it's unclear to me how yeah
yeah and it's let me know when you want
to get into that
well hold on a second so uh in the the
stick to the the you being the best
programmer ever okay in the early days
when you didn't have when when you
didn't have adult responsibilities of
leading teams and all that kind of stuff
and you can focus on just being a
programmer what did the productive day
in the life of John carac look like how
many hours of the keyboard how much
sleep what was the source of calories
that fueled the brain uh what was it
like what time did you wake up so I was
able to be remarkably consistent about
what was good working conditions for me
for a very long time um I was never one
of the programmers that I that would do
all nighters going through work for 20
hours straight it's like my brain
generally starts turning to Mush after
12 hours or so um but the hard work is
really important and I would work for
for decades I would work 60 hours a week
I would work a 10hour day six days a
week and try to be
productive at that now my schedule
shifted around a fair amount when I was
young without any kids I any other
responsibilities I was on one of those
cycling schedules where I'd kind of get
in an hour later each day and roll
around through the entire time and I'd
wind up kind of pulling in at 2:00 or 3:
in the afternoon sometimes and then
working again past you know midnight or
two in the morning and that was um when
it was just me trying to make things
happen um and I was usually isol off in
my office people generally didn't bother
me much at it and I could get a lot of
programming work done that way I did
settle into a more normal schedule when
I was taking kids to school and things
like that so kids were the forcing
function that got you to wake up and
same time it's not clear to me that
there was a much of a difference in the
productivity with I with that where I
kind of feel if I just get up when I
feel like it it's usually a little later
each day but I just recently made made
the focusing decision to try to push my
schedule back a little bit earlier to
getting up at 8:00 in the morning and
trying to to shift things around like
I'm I'm often doing experiments with
myself about what should I be doing to
to be more productive and one of the
things that I did realize was happening
in recent months where I would I would
go for a walk or a run I I cover like
four miles a day and and I would usually
do that just as the sun's going down at
here in Texas now and it's still really
damn hot but I'd go out at 8:30 or
something and cover the time there and
then the showering and it was putting a
hole in my day where I would have still
a couple hours after that and sometimes
my best hours were at night when nobody
else is around nobody's bothering me but
that hole in the day was a problem so
just a couple weeks ago I made the P the
change to go ahead and say all right I'm
going to get up a little earlier I'm
going to do a walk or get out there
first so I can have more uninterrupted
time so I'm still playing with factors
like this as I kind of optimize my my
work efforts but it's always been you
know it's it was 60 hours a week for a
very long time to some degree I had a
little thing in the back of my head
where I was almost jealous of some of
the programmers that would do these
Marathon sessions and and I had like
Dave Taylor one of the guys that he had
he would be one of those people that
would fall asleep under his desk
sometimes and all the the kind of
classic hacker tropes about things and a
part of me was like always a little
bothered that that wasn't me that I I
wouldn't go program 20 hours straight
straight because I'm just I'm falling
apart and not being very effective after
12 hours I mean yeah 12-hour programming
that's fine when you're doing that but
it never you're not doing smart work
much after at least I'm not but there's
a range of people I mean that's
something that a lot of people don't
really get in their gut where there are
people that work on four hours of sleep
and are smart and can continue to do
good work but then there's a lot of
people that just fall apart so I do tell
people that I always try to get eight
hours of sleep it's not this you know
push yourself harder get up earlier I
just do worse work where uh you know
there's you can work a 100 hours a week
and still get eight hours of sleep if
you just kind of prioritize things
correctly but I do believe in working
hard working a lot I there was a comment
that uh Game Dev made that that I know
there's a backlash against really hard
work in a lot of cases and I get into
online arguments about this all the time
but he was basically saying yeah 40
hours a week that's kind of a part job
and if you are really in it you're doing
what you think is important what you're
passionate about working more gets more
done and I it's just really not possible
to argue with that if you've been around
the people that that work with that
level of intensity and just say it's
like no they should just stop and we had
I kind of came back around to that a
couple years ago where I was using the
fictional example of all right some
people say they'll say with a straight
face they think no you you are less
productive if you work more than 40
hours a week and they're generally
misinterpreting things where your your
marginal productivity for an hour after
eight hours is less than in one of your
peak hours but you're not literally
getting less done there is a point where
you start breaking things and getting
worse worse behavior and everything out
of it where you're literally going
backwards but it's not at 8 or 10 or 12
hours and the fictional example I would
use was imagine there's an asteroid
coming to impact you know to to crash
into Earth destroy all of human life I
do you want Elon Musk or the people
working at SpaceX that are building the
Interceptor that's going to uh to
deflect the asteroid do you want them to
clock out at 5 because damn it they're
just going to go do worse work if they
work another couple hours and you know
it seems absurd and that's a
hypothetical though and everyone can
dismiss that but then when Corona virus
was hitting and you have all of these
medical personnel that are clearly
pushing themselves really really hard
and I'd say it's like okay do you want
all of these scientists working on
treatments and vaccines and caring for
all of these people are they really
screwing everything up by working more
than eight hours a day and of course
people say I'm just an to say
something like that but it's I you know
it's the truth working longer gets more
done well so that's kind of uh the layer
one but I'd like to also say
that at least I believe depending on the
person depending on the T ask working
more and harder will
make you better for the for the next
week in those peak hours so there's
something about a deep dedication to a
thing that kind of gets deep in you so
it's the the hard 
Resume
Read
file updated 2026-02-14 12:55:16 UTC
Categories
Manage