[리뷰★] 우리, 프로그래머들 We, Programmers
in Review on Review, Book, Ai, 프로그래머, 마틴, 세대, 컴퓨터, 역사, 거장, 튜링, 다익스트라, 프로그래밍, 하드웨어, 웹, 전환점, 반추

길벗출판사의"우리, 프로그래머들 We, Programmers(로버트 C. 마틴 저/최희철 역)"를 읽고 작성한 리뷰입니다.

프로그래밍 공학 관점에서 세상의 진리를 재편한, 거장의 70년 통찰을 담은 역작
70년 인생을 녹인 책은 많다. 그리고 천재들의 책도 많다. 프로그래밍 주제의 도서는 더 말할 나위 없다. 하지만 이 조건을 동시에 만족시키는 책은 결코 흔치 않다.
독서, 프로그래밍 그리고 세상의 이치가 담겨있는 철학을 중심으로 한 진리탐구는 내가 늘 좋아하는 주제다. 그러다보니 어느새 서재에 수천권의 책이 쌓여갔는데 문제는 독서할 시간이다. 무어의 법칙처럼 물리적인 시간의 한계에 부딪혔다.
읽을 시간도 생각할 시간도 적용할 시간도 너무도 부족하다. 누군가 2년간만 먹여살려주는 조건으로 시간만 준다면 다 해보겠다는 아쉬움을 뒤로하고 무어의 법칙을 뛰어넘을 수 있는 시공을 압축시킨 뛰어난 역작을 1권으로 읽을 수 있는 기회가 왔기에 얼마나 기뻤는지 모른다.
요즘처럼 AI를 중심으로 변화가 빠른 시기에는 시그널과 노이즈를 구별하는 능력이 중요한 것 같다. 문제는 이 능력을 어떻게 키울 수 있느냐는 것인데 그렇기에 저자와 같은 천재들의 통찰이 더욱 소중하다.
클로드 모네의 건초더미 시리즈를 감상하다보면 동일한 객체인데도 보는 주체의 다양한 조건이 변화함에 따라 해석이 다양한 각도로 뒤바뀜을 알 수 있다. 태양의 이동이나 계절에 따라 달리 보이듯 세상의 이치는 한 각도로 봐서는 제대로 알 수 없다.
이 책이 다루는 내용과 미래에 대한 예측 그리고 저자의 통찰이 모두 정확하다고 할 수는 없겠지만, 세상의 흐름을 읽는 소중한 시각 하나를 얻을 수 있다는 것은 흔치 않은 기회다.
마틴의 인사이트와 통찰은 일반인들과 차원이 다른 것 같다.
이 책의 표현을 빌리자면 50년 후의 프로그래밍이 어떤 모습일지 짐작하기 위해서는 50년 전을 돌이켜 보면 된다고 생각하는 관점, 비행기의 발전에 비유하여 프로그래밍의 현재 위치를 점치는 관점이 그러한 예시이다.
라이트 형제 비행기 ~ (원칙은 있으나 표준화되지 않는 발전 단계) ~
메서슈미트 전투기~ (표준 통일로 근본이 흔들리지는 않지만 디테일이 발전하는 단계) ~보잉 777
TDD를 혹자는 방법론으로 분류한다. 그런데 저자는 방법론으로 분류하지 않고 기술로 분류한다. 엄밀히 보면,
테스트 작성 → 최소한의 코드로 통과 → 리팩토링 (반복) 으로 이어지니 기술로 보는 것이 합당하다.
작은 용어의 개념 정립 및 분류가 뭐 그리 중요하냐 할 수 있지만 AI가 할루시네이션을 뱉게 만드는 주요 원인이다. 앞으로 이런 디테일에 승부가 갈릴텐데 그 디테일을 정확하게 판단해 줄 수 있는 인재는 계속 살아남을 수 있을것이다.
세상에 정보는 차고 넘치지만 그럼에도 유독 취약한 부분이 있는 것 같다. 인생 대부분이 100년 내 마감되기에 죽음으로 인해 세대간 정보가 단절된다. 책마다 저마다의 내용을 뽐내지만 수명을 초월한 진리를 담을 수 있는 저자는 없다.
그렇기에 70년이 넘는 저자의 통찰이 담긴 책이 귀중하다. 역사를 제대로 알지 못한채 예측하는 미래는 오류가 많을 수 밖에 없다. 이제 이 책의 내용을 간단히 살펴보자.
1부는 마틴이 정의 내린 프로그래머의 의미를 담고 있다. 사업과의 거시적인 안목과 프로그래머의 디테일한 고집은 마치 거시 세계의 상대성이론과 미시 세계의 양자역학과 비슷하다.
그 두 세계의 명확한 경계선은 어디일까? 요즘 나는 경계문제가 초미의 관심사이다. 양자로 인한 무어의 법칙의 한계, AI가 주도하는 거시 세계와 프로그래머의 디테일의 경계는 어디일지 내 고민과 화두로 서문을 여는 저자의 행보가 처음부터 심상치 않았다.
2부는 1960년 이전의 시대를 다루는 데 진리와 컴퓨터 공학의 만남의 장이다. 
40대 이상이라면 알만한 로그, 루트 등 계산표는 누가 만든 것일까? 그 제작 과정과 차분, 유한 차분법 그리고 증기기관으로 연산하고 싶었던 베버지의 욕망. 사람의 생각과 손으로 쓴 글씨가 어떻게 기계로 이어지는지 창발적이고 공학적인 아이디어를 엿볼 수 있는 장으로 2부를 시작한다. 

이어지는 폰노이만 편은 본격적인 빅뱅의 시작이다. 칸토어의 집합론, 페르마의 정리, 괴델의 불완전성 정리 등 수학과 과학에서 출발한 진리가 에드박으로 구현되기까지의 과정을 지켜보면 공학의 본질을 생생히 느낄 수 있다. 공학도는 물론 아이디어는 넘쳐나나 실제 구현하지 못하는 사람 혹은 사업가 성향의 독자들이 반드시 이 책을 읽어야 하는 이유가 담겨있다.
그 외에도 컴파일러, 포트란, 객체지향, 유닉스의 탄생 등 컴퓨터 공학 세계의 굵직한 획을 그은 아이디어의 탄생 과정과 거장들의 숨결이 생생히 담겨있다. 
교과서처럼 축약된 이론으로 정보를 전달받는 것은 그저 지식의 증대에 지나지 않는다. 그러한 이론을 완성시키기까지 천재들의 접근법과 고뇌를 생생히 엿볼 수 있는 계기가 소중하다. 세상에 큰 획을 그을 수 있는 감각과 지혜를 얻을 수 있기 때문이다.
2부는 이처럼 컴퓨터를 중심으로 세상의 진리를 탐구하는 장이다. 천상에나 존재할 법한 어려운 진리를 저자 특유의 전달력으로 일상의 언어로 바꿔주고 있으니 저자를 믿고 컴퓨터에 숨은 세상의 진리를 엿보길 바란다.
3부는 1960년 이후의 시대를 다룬다. 3부는 저자의 자서전이다. 2부는 저자가 태어나기 이전에 대한 저자의 연구가 담겨있다면 3부는 저자의 인생이 전부 담겨 있다고 보면 된다. 그렇게 70년의 인생이 200년의 통찰로 이어진다.
물론 2부의 내용이 저자의 경험과 삶을 기반으로 한 것이 아니라 정확하지 않을지는 모르겠지만 적어도 저자보다 한참 뒤에 태어난 독자들이 재구성하는 것보다는 훨씬 정확할 것이다. 3부의 저자 인생이 과거에 어떤 진리와 이어져 있는지에 초점을 맞춰 연구했고 또 세상을 떠난 천재들과도 직접 만나고 들은 내용을 기록했기 때문이다.
앞서 비행기 발전 모델에 비유했듯 컴퓨터 공학의 뼈대를 이루는 주요 원리들은 이미 70년대에 거의 다 등장했다. 마틴의 인생이 곧 프로그래밍의 인생인 듯 태생과 성장을 같이 해왔다.
마치 메서슈미트 전투기의 등장으로 비행기에 필요한 모든 원리는 담겼듯 그렇게 70년대의 원리를 시작으로 50년간 프로그래밍이 변화해 온 역사를 실감나게 돌이켜보며 인사이트를 얻을 수 있는 장이다.
허접한 자녀 교육서를 한 권 읽는 것보다 Digi-Comp I 라는 장난감 기계로 부울대수와 프로그래밍의 세계에 입문한 천재의 생애 몇 페이지를 읽는 것이 훨씬 도움이 된다. 천재를 탄생시키는 트리거를 엿보는 것이 무엇보다 훌륭한 자녀를 만드는 지름길이 아닐까 싶다. 
요즈음 AI와 IT의 최신 트렌드가 등장하며 40대가 각광받는 것 같다. 30대 이전 세대의 경우 최신 기술은 더 빠르게 잘 활용하는진 모르겠지만 기술의 발전으로 한층 아래의 레이어를 제대로 이해하진 못하는 것 같다. 뚀, 50대 이후는 최신 기술에 어두워 해결 방법을 찾지 못한다고도 한다. 다양한 시대를 통찰하고 연결할 수 있는 경험의 힘이 아닐까 싶다.
그런데 그런 40대 또한 아무리 프로그래밍을 잘해도 레이저 절삭 시스템을 제작하라면 불가능에 가까울 것이다. 기술의 발전으로 감춰진 더이상 보지 않아도 되는 레이어를 볼 수 있다면 더욱 많은 문제를 해결할 수 있을 것이다. 즉, 저자와 같은 경험과 기술을 갖춘이에게만 보이는 길이 있다.
이 책에는 그런 인사이트가 담겨있다. 전자회로를 중심으로 컴퓨터 보다 한단계 아래의 레이어 지식과 현재 알고 있는 지식이 융합되면서 과거로 부터 단절된 미씽 링크를 연결할 수 있었다.
또한, 3부는 가장 재미있는 파트이기도 하다. 조직 문화와 같은 소프트 스킬 그리고 개인적인 진로에 대한 고민 등이 담겨 있기에 내용 자체로도 재미있고 소프트웨어장인, 클린코드를 존재하게 한 결정적인 트리거인 GOTO 기고를 읽은 사건 등 교육, 집필, 컨설턴트로 이어지는 저자의 커리어 배경에 어떤 사건이 있었는지 엿볼 수 있다.
딱 한가지 아쉬운 점은 그가 가장 왕성하게 활동한 최근 10년 시기에 대한 언급이 매우 짧다는 점이다. Input 보다는 Output이 많았던 시기이기에 특별한 경험과 인사이트를 녹일 것이 없었다고 하는데, 다행히 그 고찰은 클린 코드와 같은 그의 저서에 담겨 있으니 아쉬운 독자는 다른 저서를 참조하면 될 것 같다.
4부는 미래에 대한 저자의 전망이 담겨있다. 2부를 읽으며 똑똑해지는 느낌을 받았고, 3부를 읽으며 재미있었다면, 4부는 머릿속에 느낌표가 끝도 없이 샘솟는 가장 많이 깨달음을 얻았던 장이다.
프로그래밍 언어, AI, 하드웨어, 월드 와이드 웹, 프로그래밍 각각의 소주제에 대한 저자의 전망이 담겨있는 데 흥미진진하다. 개인적으로는 AI 등장으로 이격된 현실과의 괴리를 진하게 채색할 수 있는 경험을 얻었다.
먼저 프로그래밍 언어는 리스프 계열의 대통일을 점친다. 프로그래밍은 물론 데이터를 표현할 수 있는 언어라는 점이 그 이유이다. 
AI의 성능은 저자 특유의 방법으로 점친다. 트랜지스터의 연산량 기준으로 애플 M3칩을 두뇌와 비교시 100만배 차이가 나는 과정을 엿볼 수 있다. 아직 AI는 객관적으로 인간을 뛰어넘기 힘든 물리적 조건을 근거로 제시한 셈이다.
저자의 견해에 따르면 AGI는 아직 먼 미래의 이야기이고, LLM의 고급 지능 한계와 TMI 등으로 LCM은 결국 도구에 지나지 않는다고 한다. LCM의 발전은 오히려 더 많은 프로그래머를 요할 것이며 우리의 역할이 바뀔것으로 바라본다. AI가 처리하지 못하는 디테일은 언제나 존재하며 그 부분이 우리의 역할이라는 것이다.
과거 A0 컴파일러 등장시에도 바이너리 프로그래머들은 자신이 대체될 것이라는 두려움을 느꼈다고 한다. 세기의 경험이 축적된 거장만이 가질 수 있는 경험을 기반으로 한 통찰이 AI 시대의 나를 위로한다.
하드웨어 파트에서는 무어의 법칙을 재조명한다. 트랜지스터 크기는 2나노미터로 줄었고, 이는 양자 터널링 효과 등의 물리적인 한계에 다가왔다. 더 이상 작아질 수 없다. CPU 클럭 속도 또한 20년째 정체중이며 3GHz 즉, 초당 약 30억회 연산 한계점에 봉착해 있다.
폰 노이만 아키텍처 기반의 한계는 양자 컴퓨터가 극복할지도 모른다는 견해도 흥미롭다. 우주를 컴퓨터로 활용한다는 발상은 매우 신선했다. 예를 들어 수은의 부피 변화를 통해 온도를 측정하는 도구는 우주를 컴퓨터로 활용하는 셈이다. 천재들의 시야는 신비하기만 하다. 우주를 객체가 아닌 주체로 여기는 또 다른 통찰을 배웠다.
양자컴퓨터는 중첩 상태를 활용 시 가능한 모든 결과를 중첩 형태로 얻을 수 있게 된다. 다만, 관측하는 순간 하나의 결과로 결정되므로 관측하지 않고도 결과를 얻는 기술이 필요하다.
웹의 미래 또한 흥미롭다. 60년대 인프라가 애플리케이션을 지배하던 시절이 붕괴되어 더이상 인프라를 바라보지 않아도 된 것 처럼 웹 또한 브라우저나 클라이언트의 종속성에서 해방되어 소통하는 프로그램 자체만 남을것이라는 견해다.
개인적으로 마틴의 편향은 독자보다는 과거 지향적일것이니 어느 정도 비판적으로 읽으면 더 좋겠다는 생각이 든다. 내 미래 지향의 편향은 마틴을 통해 보완하고 서로 정반합을 도출하는 과정이 필요할 것 같다.
예를 들면 양자 컴퓨터나 AI의 발전에 대해 생각보다 보수적이다. 나와는 견해가 다르지만 저자가 핵심 개념을 완벽하게 숙지하고 있음에도 다른 결론을 내리기에 내가 그간 무엇을 잘못 알고 있었는지 긴 정반합의 시간이 필요했다.
책 말미에 톰길브가 저술한 집필 후기도 흥미진진하다. 아인슈타인의 발언으로 알려진,
“가능한 한 단순하게 만들되, 그보다 더 단순하게 만들지는 말라” 의 인용 출처를 찾는 여정이 재미있다. 저자와 동시대를 살아가는 또 다른 거장의 해학이 느껴진다. 부록의 등장인물 소개와 용어집을 참조하면 책의 내용을 더욱 생생하게 감상할 수 있다.
끝으로 역자와 편집자 분들의 노력에 감사를 표하고 싶다. 번역의 품질은 말할 것도 없고 마틴이 전하고자 한 인사이트를 토씨하나 놓치지 않고 독자들에게 전달하고자 기울인 노력이 생생히 느껴졌다. 특히, 역자 주에 실린 역자만의 판단과 추측은 마치 페어 프로그래밍 하듯 전문가와 함께 토론하며 명저를 읽는 느낌을 준다.
세상의 변화를 그래프 나타낸다면 미분값이 바뀌는 지점처럼 현 시점은 선형에서 지수 폭발형태로 변하는 구간일지도 모른다. 하필 마틴의 세계가 선형으로 일관되어 오다가 지수로 바뀌는 시점이라면 그의 예측은 꽤 많이 틀릴지도 모른다. 또 마틴의 세계가 일관적으로 펼쳐질지도 모른다. 그렇다면 현시점 누구의 예측보다 정확할 것이다.
아마도 이 책을 읽으며 해야할 일은 그동안 쌓아온 경험과 지식을 거장의 견해와 비교해가며 정반합의 과정을 통해 잘못된 오류를 바로잡고 미래 방향을 예측해보며 저자의 바운더리 바깥에 있는 내 바운더리의 지평을 확장해 나가는 일이 아닐까 싶다.
특히, 여러번 읽으셨으면 한다. 나무에서 벗어나 빠르게 숲을 볼 수 있는 순간, 나무에서는 느끼지 못했던 속도감 그리고 기억의 지속 위에 새로운 인사이트와 방향을 얻을 수 있을 것이다.


