17 제1원리 사고
제1원리 사고(First Principles Thinking, FPT)는 명백한 기본 사실에서 출발하여 현실에 대한 어떤 비전이나 설명을 향해 쌓아 올라가는 것입니다. 이는 유추나 권위에 대한 호소가 아니라 연역에 의한 추론을 수반합니다. 이것은 똑똑한 사람들이 하는 가장 멍청한 일이라고 불려 왔습니다.
빅 O 표기법은 많은 개발자가 FPT를 처음 접하는 계기입니다. 개발자로서 제1원리로부터 추론하는 법을 익히면, 프로젝트 견적부터 기술 평가에 이르기까지 여러분이 하는 모든 엔지니어링 작업 뒤에 있는 더 큰 그림을 보게 됩니다. 도구에 익숙해지면 도구 너머에 있는 근본적인 패턴과 한계를 살펴보기 시작해야 합니다. 이는 주니어에서 시니어로 넘어가는 과정에서 거치게 될 핵심적인 전환 중 하나입니다(장 5).
라벨에 얽매이지 말고 그 너머를 생각하도록 스스로를 단련하십시오. “프로덕션에 쓸 준비가 되었는가?”, “확장 가능한가?”, “엄청나게 빠른가?” 같은 질문은 여러분 자신의 맥락이 없으면 거의 아무런 의미가 없습니다. 이에 대한 아주 웃긴 시각을 보고 싶다면 두 개발자가 Node.js의 기술적 장점을 두고 토론하는 패러디 영상을 확인해 보십시오. 사실이기 때문에 웃긴 것입니다. 정말 많은 초보 개발자들이, 그리고 너무나 많은 시니어 개발자들이 라벨로 생각하고 이야기하며 결코 그 이상으로 나아가지 않습니다. 사물이 어떻게 작동하는지 분해하고 제1원리에 기반해 스스로 답을 도출하는 법을 배우십시오.
무언가가 불가능하다는 말을 들었을 때, 제1원리는 “왜 안 되는가?”라고 묻도록 도와줍니다. 반대로 불가능한 일을 맡게 되었을 때, 제1원리는 문제를 기본적인 사실들로 분해하여 실현 불가능함을 빠르게 입증하도록 도와줍니다.
- 제프 딘(Jeff Dean)은 구글에서 모든 프로그래머가 알아야 할 지연 시간 수치라는 짧은 목록을 돌린 것으로 알려져 있으며, 이를 통해 대서양 횡단 왕복을 150ms보다 빠르게 하려는 시도는 빛의 속도라는 한계 때문에 완전히 헛된 일이라는 점을 개발자들에게 일깨웠습니다.
- 제스처 인터페이스를 연구하는 존 카맥(John Carmack)은 생각의 속도가 고작 110m/s에 불과하다는 점을 지적하며, 이로 인해 팔에서만 9ms의 지연 시간이 발생한다고 말합니다. 이는 그가 몸담은 인간-컴퓨터 인터페이스 분야에 매우 정신이 번쩍 들게 하는 사실입니다.
- 자신의 분야에서 냅킨 수학을 하기 위한 기본 사실 목록을 직접 만들어 둘 수 있습니다.
침범할 수 없는 진리에 대한 탄탄한 기초를 갖추면 통념을 깨뜨리는 데 도움이 됩니다. 시스템이든 제품이든 라이브러리든 신념이든 하나의 묶음을 분해했을 때, 그 제약이 구성 요소들의 합과 암달의 법칙에서 요구되는 것이 아니라면, 아마도 기회가 있을 것입니다.
아이러니하게도, FPT에 대한 많은 해설(1, 2, 3)은 곧바로 Naval Ravikant나 찰리 멍거나 일론 머스크 같은 권위에 호소합니다. 최근 들어 이를 가장 널리 알린 사람은 아마 Elon일 것입니다. 하지만 권위를 근거로 설득되어야만 한다면 FPT의 핵심을 제대로 이해하지 못한 것입니다.
FPT를 받아들이려면 논리학과 인식론의 철학을 이해해야 합니다.
17.1 논리학
논리학은 논증을 분석하고 평가하는 학문입니다.
저는 이것을 주니어 칼리지 시절의 철학 강사였던 라이오넬 바너드(Lionel Barnard) 선생님을 통해 처음 접했습니다(원래는 경제학을 가르치기로 되어 있었지만, 우리의 지적 만족을 위해 수업을 작은 PPE 프로그램으로 바꾸는 것을 더 좋아하셨습니다). 특히 저는 늘 삼단논법의 형식을 선호해 왔는데, 그 형식은 다음과 같습니다:
- 1: 모든 사람은 죽습니다.
- 2: 모든 그리스인은 사람입니다.
- 그러므로: 모든 그리스인은 죽습니다.
“그러므로”는 앞의 두 명제로부터 논리적으로, 그리고 자명한 이치라 할 만큼 필연적으로 도출되는 결론을 나타냅니다. 이는 수학을 비롯한 여러 기초 과학에서 증명이 이루어지는 방식의 상당 부분을 뒷받침합니다. N개의 사실을 가져와 한데 모으고, 그로부터 더 유용한 새로운 사실을 도출하는 것입니다. 이 새로운 사실은 기존 사실들 위에 세워졌기 때문에 그 사실들만큼이나 실재적입니다.
하지만 사실에만 의존해서는 그리 멀리 나아갈 수 없습니다. 사실보다 미지의 것과 불확정적이거나 확률적인 과정이 훨씬 더 많기 때문입니다. 그래서 삼단논법을 공리(Axioms), 즉 참이라고 받아들이는 가정으로 보완할 수 있습니다. 공리가 참임을 *반드시* 증명할 필요는 없지만, 인정된 가정들의 집합이 주어지면 논리적으로 타당한 결론에 도달할 수 있음을 연역을 통해 보일 수 있습니다. 이것은 정말 환상적입니다. 자신의 믿음을 하나하나 열거할 수 있게 해 주기 때문입니다. 또한 가정이 틀린 것으로 증명되면 즉시 생각을 바꿀 수 있게 해 줍니다(부정 명제는 증명할 수 없기 때문에 특히 유용합니다).
그러니 훌륭합니다. 누가 논리에 반대하겠습니까?
알고 보면 논리적 연역에는 한계가 있으며, 실제로는 훨씬 더 많은 노력이 필요합니다(사실을 모으는 데에도—때로는 사회과학의 재현성 위기에서처럼 여러분이 참이라고 믿는 것이 참이 아닐 때도 있습니다—그리고 논증으로 이루어진 논리적 사슬의 무결성을 검증하는 데에도 그렇습니다). 그리고 우리가 실제로 따르는 방법으로 단연 더 널리 쓰이는 것은 귀납입니다. 이는 인식론에서 다룹니다.
17.2 인식론
지식의 본성, 정당화, 그리고 믿음의 합리성을 연구하는 학문입니다.
인식론은 우리가 안다고 생각하는 것을 어떻게 아는가라는 질문을 다룹니다.
확실성을 연구하는 방법에는 여러 가지가 있으므로, 저는 그중 대부분을 태연히 무시하고 두 가지, 즉 귀납 대 연역을 대조해 보겠습니다.
저는 위에서 이미 연역적 추론을 소개했습니다. 일반적인 사실들의 기본 집합이 주어지면, 그것을 바탕으로 가능한 한 높이 쌓아 올려 유용한 일반적 결론에 도달하는 것입니다.
귀납적 추론은 그 반대입니다. 구체적인 현실 세계의 관찰을 일반적인 진리로 일반화하는 것입니다. 이는 정말 여러 면에서 문제가 있으며, 우리는 수백 년 전부터 귀납의 문제를 알고 있었습니다. 그런데도 우리 대부분은 바로 이런 방식으로 사업과 삶, 그리고 핵심 신념 체계를 꾸려 갑니다.
귀납은 은밀하게 설득력을 발휘합니다. 누군가가 단 하나의 일화를 가져와 모든 사람에게 일반화하는 것을 보면 비웃을지도 모릅니다. 그러나 이는 철학적으로 볼 때 인구 조사를 가져와 일반화하는 것보다 아주 조금 더 나쁠 뿐이며, 그것 역시 바깥을 내다보고 그 밖에 무엇이 존재하는지 살핀 뒤 그것이 존재할 수 있는 전부라고 추론하는 것(속담에 나오는 우물 안 개구리)보다 아주 조금 더 나쁠 뿐입니다.
우리는 매일 이렇게 합니다. 우리는 이를 통계와 숫자로 포장하여 더 진실처럼 느껴지게 만듭니다. 우리는 스스로를 경험적이라거나 데이터 기반이라고 부릅니다. 우리는 어떤 사람이 일을 해낼 역량을 평가하기 위해 그 사람의 이력서를 봅니다. 언뜻 보면 문제없어 보이지만, “A는 하버드를 나왔다”거나 “B는 X의 ARR을 1천만 달러에서 1억 달러로 끌어올린 사람이다”라는 말을 들었을 때 사람들의 평가가 얼마나 달라지는지를 보면 생각이 바뀝니다. 그 경험이 그대로 옮겨 갈 것이라고 은연중에 투영하고 있기 때문입니다. 어떤 일(예를 들어 React 관련 직무)을 맡길 사람을 채용할 때, 우리는 그 일을 해낼 수 있는 사람(JavaScript/웹 개발 경험이 풍부한 누구든)보다 그 일을 해 본 적이 있는 사람(이전에 React 관련 직무를 맡았던 사람)에게 과도한 가중치를 둡니다. 우리는 뉴스와 트렌드, 경쟁자와 이웃, 동료와 유명인, 친구와 가족의 소식을 따라가며, 그것이 곧 우리의 현실을 이룹니다. 그리고 그 한계와 본질에 의문을 제기하는 일은 거의 없습니다.
귀납과 연역은 동등한 위치에 있지 않습니다. 일반적으로 귀납의 데이터 포인트는 훨씬 더 쉽게 얻을 수 있는 반면, 연역적 사실은 훨씬 더 시대를 초월하지만 확정하는 데 비용이 많이 듭니다. 논리학자, 수학자, 이론물리학자만이 온전히 제1원리를 토대로 출발하는 호사를 누릴 수 있습니다. 그 밖의 모든 사람은 쓸모 있는 어딘가에 도달할 희망이라도 가지려면, 믿음으로 받아들인 몇 가지 공리로 만족해야 합니다. 문제는 우리가 도를 넘어 공리와 전해 받은, 검증되지 않은 통념만으로 세계관 전체를 구축할 때 생깁니다. 인간은 현재의 데이터 포인트로부터 끼워 맞추기/합리화하는 데는 대단히 뛰어나지만, 자기 믿음의 토대를 검토하는 데는 형편없습니다.
“1500년 전에는 모두가 지구가 우주의 중심이라는 것을 ‘알고’ 있었습니다. 500년 전에는 모두가 지구가 평평하다는 것을 ‘알고’ 있었습니다. 그리고 15분 전까지만 해도 여러분은 이 행성에 인간만 있다는 것을 ‘알고’ 있었습니다. 내일 여러분이 무엇을 ‘알게’ 될지 상상해 보십시오.” - 맨 인 블랙
자신의 인식론(Epistemology)을 정면으로 다루는 것은 의사 결정에 매우 중요합니다. 자신이 아는 것을 어떻게 알게 되었는지 모른다면, 그 지식을 바탕으로 내리는 결정을 어떻게 신뢰할 수 있겠습니까?
인식론을 인정하는 것은 멘탈 모델을 구축하는 데에도 중요합니다. 설명을 실재한다는 장점만 있을 뿐 부수적이고 쓸모없는 복잡성으로 가득 채울 수도 있고, 반박할 수 없는 기본 사실들에서 출발해 이론적으로 가능한 무언가를 쌓아 올릴 수도 있기 때문입니다.
17.3 적용 사례
제가 한 Getting Closure on Hooks 발표는 “제1원리” 발표로 인용되었으며, Concurrent React에 대한 후속 발표도 마찬가지입니다. React Router에 관한 이 글이나 Redux에 관한 이 글, 하드웨어-소프트웨어 인터페이스에 관한 이 글처럼 From Scratch 장르에 속하는 모든 발표와 블로그 글은 제1원리를 익히기에 훌륭한 재료라고 생각합니다. 심지어 GitHub에는 Build Your Own X 프로젝트를 모아 둔 저장소도 통째로 있습니다!
하지만 물론 제1원리는 코드를 훨씬 넘어서는 영역에도 적용할 수 있습니다. 드레이크 방정식은 우리 은하에 존재하는 외계 문명의 수를 제1원리로 분해한 잘 알려진 사례입니다. 음악에서 컴퓨팅에 이르기까지(코딩 커리어까지도!) 모든 것을 제1원리로 설명할 수 있습니다.
17.4 시스템 사고
더 일반적으로 말하면, 모든 시스템에 적용할 수 있는 정량화 가능한 제1원리의 집합은 오늘날 시스템 사고라는 이름으로 유행하고 있으며, 도넬라 메도즈의 말을 인용하면 다음과 같습니다:
시스템에 개입할 수 있는 지점(효과가 커지는 순서대로):
12. Constants, parameters, numbers.
11. The sizes of buffers and other stabilizing stocks, relative to their flows.
10. The structure of material stocks and flows.
9. The lengths of delays, relative to the rate of system change.
8. The strength of negative feedback loops.
7. The gain around driving positive feedback loops.
6. The structure of information flows.
5. The rules of the system.
4. The power to add, change, evolve, or self-organize system structure.
3. The goals of the system.
2. The mindset or paradigm out of which the system arises.
1. The power to transcend paradigms.
시스템을 바꾸려는데 너무 어렵게 느껴진다면, 도넬라의 목록에서 지금 자신이 어디에 있는지 찾아낸 다음 아래쪽으로 차근차근 내려가 보는 것이 믿을 만한 요령입니다.
제 머릿속에는 즐겨 던지는 또 다른 질문들이 있습니다:
- 사람들이 진정으로 원하는 것은 무엇입니까? 대개 그것은 단순하지만 쉽지는 않은 것입니다. 기업의 경우, 이는 해결해야 할 과업(Jobs to Be Done)을 파악하는 일입니다. 개인의 경우, 매슬로의 욕구 단계가 좋은 참고 자료이며, 돈으로 살 수 없는 것들의 목록도 마찬가지입니다: 행복, 자유, 시간, 건강, 부, 가족, 목적 등입니다.
- 물리적 한계는 무엇입니까? 예를 들어 빛의 속도가 있지만, 무어의 법칙과 워스의 법칙의 한계에 대한 사고 실험을 해 볼 수도 있고, 빅 오 표기법을 사용하여 개인 성장의 확장 요인을 모델링할 수도 있습니다
- 산출물의 단위는 무엇입니까? 시스템 사고와 관련이 있지만, 이것은 환원적인 방법으로, 기술 스타트업에서 과대 선전을 걷어 내고 Uber와 AirBnb를 운행 거리(driver miles)와 숙박 일수(room nights)로 환원하는 데 매우 유용했습니다.
- 성공 지표는 무엇입니까? 성공했는지 어떻게 알 수 있습니까? 끝을 생각하며 시작하는 것은 생산성을 위한 좋은 습관이지만, Christine Yen은 Honeycomb.io가 하는 일의 방향을 잡는 데 도움이 되도록 이 질문을 즐겨 던집니다.
- 누가 신경을 씁니까? 최종 고객이 실제로 누구이며 그들이 얼마나 신경을 쓰는지를 가려내는 돈 밸런타인의 수수께끼 같은 두 단어 테스트입니다.
- 게임의 규칙은 무엇이며, 그 규칙은 어떻게 바뀌고 있습니까? 어떤 게임을 하든 먼저 이기기 위한 현재의 규칙을 파악해야 하지만, 앞으로도 이기려면 규칙이 어떻게 바뀌고 있는지도 파악해야 합니다. 이를 게임 대 메타게임이라고도 합니다.
소프트웨어 분야에서는 Will Larson이 시스템 사고를 엔지니어링 관리에 적용하는 방법에 관한 대표적인 목소리입니다.
17.5 더 읽을거리
- 냅킨 수학(Napkin Math)
- 지루한 기술
- Wait But Why의 일론 머스크 이야기
- Neil Kakkar의 제1원리 사고
- 도넬라 메도스의 레버리지 포인트
- 리 하오이(Li Haoyi)의 제1원리
- 선인장과 족제비에 관한 Venkatesh Rao의 글 - 강한 견해를 갖는 것과 견해를 강하게 고수하는 것의 차이를 다룹니다. 이상적으로는 우리 믿음의 강도를 데시벨로 표현해야 합니다.