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
Categories