How to be a great programmer | John Carmack and Lex Fridman - https://www.youtube.com/watch?v=xzPuGf89vpI
Given that you are once again one of the greatest programmers ever, what do you think makes a good programmer maybe a good modern programmer? So I just gave a long rant lecture at Meta to the TPM organization and my biggest point was everything that we're doing really should flow from user value. All the good things that we're doing. It's like we, 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, but instead they're choosing to use our products. And that's where, I mean, it sounds trite 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, 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 a really good thing. 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 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 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 value 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. We've improved things. So being a servant to the user is your job. When you're a developer you want to be producing something that 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 kind of divide. There's a ratio there where you. It's a problem at the big tech companies, whether it's Meta, Google, Apple, Microsoft, Amazon, companies that have almost infinite money, I mean I know their CFO will complain that it's not infinite money but from most developers 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 make a better product, make more value. But if you're not making your core design decisions in this fiercely competitive way where you're saying feature A or feature B, you can't just say let's do both 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 what which one is better or how much better and tell Team B that sorry, we're not going to do this because A is more important. But 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 super important. Well, let me ask you about the big debates that you're mentioning of how to measure value. Is it possible to measure it kind of numerically or can you do the sort of. Jony I've the designer route of imagining sort of 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 lower level thing for like Linux, you imagine a device developer that might come across this and use it and become 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 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 writes to kind of archive this stuff because we needed to collect information to determine if we were doing, if our plans were good. So, 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. So 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 or 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 like on your desktop replacement, or communicating with people in different ways or playing the games. There are going to be probably millions of people. Or at least 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 that fits whatever matrix 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 on the other hand, there is value to having a kind of wholeness of vision for a product. And companies like Meta have, you know, they understand the trade offs where you can have a company like SpaceX or Apple in the Steve Jobs era, where you have a very powerful leading personality that, 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 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 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 and they can have an informed opinion about everything that's going on. And you take somebody, you've got to believe that somebody that has 30, 40 years of experience, you would hope that they've got wisdom that the just out of boot camp person 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, 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 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 would not have been approved by the dark cabal making the decisions about what gets into the store turn out to in some cases be extremely successful. 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 and get shit done. And that's just, it's not in the culture at Meta and they understand the trade offs and that's just not the way, that's not the company that they want, the team that they want to do.
How to be a great programmer | John Carmack and Lex Fridman - https://www.youtube.com/watch?v=xzPuGf89vpI
당신이 역대 최고의 프로그래머 중 한 명이라는 점을 감안할 때, 좋은 프로그래머, 어쩌면 훌륭한 현대적인 프로그래머를 만드는 것은 무엇이라고 생각하시나요? 제가 방금 Meta의 TPM 조직에서 긴 강연을 했는데요, 제가 가장 강조한 점은 우리가 하는 모든 일이 진정으로 사용자 가치에서 비롯되어야 한다는 것이었습니다. 우리가 하는 모든 좋은 일들이요. 우리는 단순한 기술자가 아닙니다. 특정 기술 자체에만 자부심을 가져서는 안 됩니다. 코드 골프 같은 건 재미있는 퍼즐 게임이지만, 그것이 주된 동기가 되어서는 안 됩니다. 우리는 사람들의 문제를 해결하거나 즐거움을 제공하거나, 그들의 삶에서 다른 무언가를 대체할 가치 있는 것을 만들고 있습니다. 그러므로 우리는 사용자들이 다른 것을 할 수 있는데도 우리 제품을 선택하는 것보다 더 큰 순 가치를 제공해야 합니다. 그것이, 진부하거나 식상하게 들릴 수 있지만, 제가 근본적으로 세상을 더 나은 곳으로 만드는 방법이라고 생각합니다. 당신과 팀이 만드는 데 든 것보다 더 많은 가치를 사람들에게 제공했다면, 세상은 더 나아진 것입니다. 사람들은 덜 가치 있는 것에서 당신의 제품을 선택했고, 그로 인해 삶이 나아졌다고 느끼는 것입니다. 그리고 그것을 경제적으로 이뤄냈다면, 그것은 정말 좋은 일입니다. 반면에 터무니없이 많은 돈을 쏟아부었다면, 그냥 많은 돈을 나무 파쇄기에 넣어버린 것이고, 자신이 하는 일에 대해 그리 좋게 느끼지 말아야 할 것입니다. 그러므로 특정 아키텍처나 기술, 또는 자신이 작성한 특정 코드 시퀀스에 자부심을 갖는 것, 작은 미소나 약간의 도파민 분비 정도는 괜찮습니다. 하지만 최상위 지표는 가치 있는 것을 만들고 있다는 것이어야 합니다. 사용자 가치가 무엇인지, 실제로 어떻게 정량화하는지에 대해 큰 논쟁이 있을 수 있습니다. 하지만 이건 쉽게 말할 수 있습니다. 저 화난 사용자는 당신이 하는 것에서 가치를 얻지 못하고 있습니다. 저기 환한 미소를 짓고 있는 사용자는, 무언가가 일어나는 순간 기쁨을 느끼고 있습니다. 거기서 가치가 발생한 것입니다. 정확하게 정량화하기 어렵더라도 사용자 가치라는 개념 자체는 받아들여야 합니다. 보통 상대적인 판단은 할 수 있으니까요. 이것이 저것보다 낫다, 우리가 개선했다고요. 그러므로 사용자를 위해 봉사하는 것이 당신의 일입니다. 개발자로서 다른 사람들이 가치 있다고 느낄 것을 만들어야 하고, 기술적인 성향이 있다면 최소한의 노력으로 최대의 가치를 만들어낼 수 있는 올바른 레버를 찾아 당길 수 있는 디자인을 만들어야 합니다. 항상 나눗셈이 필요합니다. 비율의 문제입니다. 이것은 Meta, Google, Apple, Microsoft, Amazon 같은 대형 기술 기업들의 문제입니다. 거의 무한한 돈을 가진 기업들이요. CFO는 돈이 무한하지 않다고 불평하겠지만, 대부분의 개발자 입장에서는 정말 그렇게 느껴집니다. 그리고 개발자로서 열심히 일하다 보면 항상 이런 생각이 드는 게 거의 역설적입니다. 자원이 더 있다면, 사람이 더 많거나, RAM이 더 많거나, 클럭 속도가 더 빠르다면 제품이 더 나아질 거라는 생각이요. 물론 장애물에 심하게 막혀있을 때는 그 장애물을 제거하면 더 나은 제품과 더 많은 가치를 만들 수 있다는 것이 맞습니다. 하지만 핵심 설계 결정을 극도로 경쟁적인 방식으로 내리지 않는다면, 기능 A와 B 중에서 선택할 때, 둘 다 하자고 말해버리면 가치 판단을 하지 않는 것입니다. 둘 다 좋아 보인다고 말하는 것이고, 어느 것이 더 낫고 얼마나 더 나은지 굳이 결정하거나 팀 B에게 미안하지만 A가 더 중요하기 때문에 이건 안 한다고 말하고 싶지 않은 것입니다. 하지만 자신이 하는 일의 가치를, 시간을, 소비하는 자원을, 심지어 다른 것을 할 기회비용까지 항상 비판적으로 평가해야 한다는 개념은 정말 중요합니다. 말씀하신 가치 측정 방법에 대한 큰 논쟁에 대해 여쭤보고 싶은데요. 수치적으로 측정하는 것이 가능할까요? 아니면 조니 아이브처럼 디자이너 방식으로, 누군가가 무언가를 사용하는 것을 상상하고, 얼굴에 미소를 상상하고, 그 물건을 사용할 때 느끼는 사랑과 기쁨의 경험을 상상하는 방식을 취할 수 있을까요? 또는 Linux 같은 더 낮은 수준의 것을 만든다면, 이것을 접하고 사용하게 될 기기 개발자를 상상하고 그들이 행복해지고 더 나아지는 것을 상상하는 방식이요. 어디에 무게를 두시나요? 측정 가능한가요? Meta나 Google 같은 곳은 아마 측정하려 할 것입니다. 참여도 같은 것을 최적화하려 하겠죠. 참여도를 측정하자고요. 그리고 저는 측정할 수 없는 미래를 상상하고 오늘과 다른 그 미래의 누군가를 행복하게 만들려 한다는 디자이너의 윤리를 존경합니다. 보통 어떤 지표든 얻을 수 있다면 좋은 것이고, 당연히 데이터를 따라야 합니다. 하지만 지나칠 수 있습니다. 예를 들어 우리 계획이 좋은지 판단하기 위한 정보를 수집하려고 멋진 새 텔레메트리 시스템이 엄청난 수의 파일 쓰기를 하다가 성능 저하가 발생한 적이 있었습니다. 그러므로 정보를 얻을 수 있을 때는 절대 무시하지 마세요. 실제 사용자들, 실제 인간들이 그것을 사용하고, 많은 수의 인간들이 사용하는 것을요. 제로에서 원으로의 문제가 있습니다. 정말 새로운 것을 할 때는 어느 정도 추측을 해야 합니다. 하지만 Meta에서 제가 강조해온 것 중 하나는 이제 우리에게는 VR에서 누군가가 시도하고 싶은 것이 무엇이든 관심을 가질 충분한 사용자가 있다는 것입니다. 완전히 새로운 청사진으로 흥미로울 것 같기 때문에 하겠다는 식의 제안을 할 수 없습니다. 저는 모두에게 도전합니다. VR에서 데스크톱 환경 대체나, 다양한 방식의 소통이나, 게임 플레이 등 무엇을 작업하든 수백만 명의 사람들이 있을 것입니다. 아니면 우리가 아직 없는 아주 작은 틈새를 선택하더라도 그 시장의 대상이 될 헤드셋을 가진 수천 명의 사람들은 여전히 있을 것입니다. 그 사람들에게 주목하라고 말합니다. 가상의 사용자를 만들지 마세요. 당신이 시장을 분석하려는 성향 매트릭스에 맞는 앨리스, 밥, 찰리를 만들지 마세요. 실제로 함께 일할 수 있는 실제 사용자가 있는데 가상의 사용자를 생각하는 것은 실수입니다. 하지만 한편으로는 제품에 대한 일종의 완전한 비전을 갖는 것에 가치가 있습니다. Meta 같은 회사들은 이런 트레이드오프를 이해하고 있습니다. SpaceX나 스티브 잡스 시대의 Apple처럼 매우 낮은 수준까지 마이크로 관리하고 저 핸들은 달라야 한다거나 저 아이콘의 색조를 바꿔야 한다고 말할 수 있는 강력한 선도 리더십이 있는 회사처럼요. 그리고 그것에서 분명히 많은 가치를 얻습니다. 하지만 나중에 그곳에서 일한 공포 이야기를 할 많은 직원들을 소진시키기도 합니다. 제 입장은, 리더가 자신 아래의 모든 것을 이해하고 벌어지는 모든 일에 대해 정보에 근거한 의견을 가질 수 있는 한계점에 있을 때 최고의 상태라는 것입니다. 30~40년의 경험을 가진 누군가라면 막 훈련을 마친 기여자가 갖지 못한 지혜를 갖고 있다고 믿어야 합니다. 그래서 그들이 저건 잘못됐어, 그렇게 하지 마 혹은 그냥 그렇게 하지 말고 다른 방식으로 해라고 하면 따르는 것이 맞습니다. 그곳에 가치가 있습니다. 하지만 특정 수준을 넘어설 수는 없습니다. 스티브 잡스가 제 바로 앞에서 기술적인 것에 대해 완전히 틀린 말을 하는 것을 본 적이 있습니다. 그 수준에서 운영하지 않았으니까요. 하지만 제품 전체를 생각하고 어떤 것도 빠뜨리지 않으려고 진심으로 노력하는 열정적인 리더를 만날 때, 그것이 많은 가치를 갖는다고 생각합니다. 하지만 다른 한편에는 아이디어를 끌어올리는 독립적인 팀을 원한다는 사람들이 있습니다. 위대한 리더가 모든 것을 결정하게 하고 싶다는 것은 반 자본주의적이거나 반 자유시장적인 것에 가깝습니다. 자유 시장은 예상치 못한 것들을 가져오니까요. VR에서도 초기에 핵심 애플리케이션이 될 것이라고 생각했던 것들이 전혀 그렇지 않았고, 결정권을 가진 소수의 집단이라면 승인하지 않았을 것들이 스토어에 들어가서 어떤 경우에는 매우 성공적이 된 것들도 있었습니다. 저는 한때 VR 독재자로 만들어달라는 제안을 했습니다. 들어가서 일을 해내겠다고요. 하지만 그것은 Meta의 문화에 맞지 않고, 그들은 트레이드오프를 이해하며 그것은 그들이 원하는 방식이, 원하는 팀의 모습이 아닌 것입니다.