[도서 리뷰] 미니멀리즘 프로그래머

13 min read
개발 책 리뷰
TL;DR
  • AI 시대에는 구현보다 복잡성 관리가 더 어려워졌고, 이 책은 그 복잡성을 단순하게 다루는 기준을 제시합니다.
  • 워드 커닝엄의 '동작하기만 한다면 가장 단순하게 만들어라'라는 태도를 중심으로, 불필요한 의존성 제거·기능 덜어내기·탐색 지속의 중요성을 짚습니다.
Cover
"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다."

읽게 된 계기

저자 데이비드 토머스(David Thomas)는 흔히 'Pragmatic Dave'로 불리며, 애자일 소프트웨어 개발 선언(Agile Manifesto)의 17인 저자 중 한 명이기도 합니다. 『실용주의 프로그래머』를 한 10년쯤 전에 읽었던 것 같은데, 이 책의 저자가 같은 분이라는 걸 모르고 있었습니다. 책 내용에서 언급되어 알게 됐는데, 읽다 보니 뭔가 전에 본 듯한 기시감이 들어서 찾아보니 같은 저자였더군요.

AI 시대에 더 필요한 책

이 책이 지금 특히 와닿는 이유가 있습니다. AI 덕분에 아이디어 대비 구현 비용이 극적으로 낮아졌습니다. 그만큼 complexity와 complicatedness를 너무 쉽게 마주하게 됐죠. 예전이라면 구현 비용과 시간 자체가 필터 역할을 했는데, 지금은 그 필터가 사라진 셈입니다.

서론에 나오는 워드 커닝엄의 말이 이 책을 가장 짧게 설명합니다. "동작하기만 한다면, 가장 단순하게 만들어라.(What's the simplest thing that could possibly work?)" 물론 여기에 정답은 없습니다. 상황에 따라 다르기 때문에, 가설 설정 → 설계 → 분석을 반복하는 과정을 몸에 체득해야 합니다.

AI 시대에 구현은 쉬워졌지만 복잡성은 더 빨리 커진다는 점을 보여주는 이미지

불필요한 의존성

단순함을 추구하려면 먼저 불필요한 것을 걷어내야 합니다. 이 책에서는 조 암스트롱의 유명한 비유를 인용합니다. 바나나 하나만 필요했을 뿐인데, 바나나를 든 고릴라와 정글 전체를 가져왔다는 이야기이죠. (You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.)

프레임워크 선택에 대해서도 성분표를 꼼꼼히 확인하라고 합니다. 10년 전에 Keto 식단을 했을 때 생긴 습관이 있는데, 음식이나 재료를 살 때 성분표에 설탕 같은 불필요한 성분이 있는지 꼼꼼히 확인하는 것이었습니다. 프레임워크나 라이브러리도 마찬가지입니다. fork 수나 star 수만 볼 게 아니라, 성분표를 보듯 문제 해결을 위해 불필요한 복잡성까지 끌어오는 건 아닌지 꼼꼼히 살펴보라는 것이죠.

불필요한 라이브러리와 죽은 코드를 잘라내며 복잡성을 덜어내는 이미지를 보여준다

필요 주도 개발

고객 요청이나 신기술 기능을 추가하고 싶은 욕망을 제어하고, 기능을 오히려 덜어내는 방식을 고민할 수 있습니다. 기능은 쉽게 추가할 수 있으니, 단순함에 초점을 맞추고 "내 프로젝트에서 덜어낼 게 뭘까?"를 먼저 생각해보자는 것이죠. 추가보다 제거가 어렵다는 건 누구나 알지만, 실천하기는 훨씬 어렵습니다. 개인적으로 좋은 리마인드가 됐네요.

복잡한 요소를 손으로 걸러내며 핵심만 남기는 Keep it Simple 메시지 이미지

비동기적인 삶

불필요한 것을 덜어내는 건 코드만의 이야기가 아닙니다. 이 책에서 특히 흥미로웠던 파트는 일하는 방식에 대한 내용이었습니다. 이벤트 주도 시스템, 즉 뭔가 생기면 하던 일을 중단하고 대응해야 하는 구조에서는 이메일, 작업 목록, 칸반처럼 비동기적으로 디커플링된 체계가 필요합니다.

이 내용을 읽으면서 바로 떠오른 게 AI 작업이었습니다. 개인적으로 비동기 기반의 이슈 트래커를 쓰고 있는데, AI가 작업을 끝낼 때까지 기다리기 싫어서 도입한 방식이었습니다. 효과는 기대 이상이었습니다. 2월에만 개인 프로젝트에 20억+ 토큰 정도 썼는데, 태스크를 쪼개서 AI에게 위임할 건 싹 위임하고 비동기로 관리하니 삶, 육아, 일, 취미 등 전체적인 밸런스가 잡혔습니다.

복잡한 입력을 하나의 흐름으로 정리해 비동기적으로 처리하는 이미지를 보여준다

기술 공유의 힘

기술을 공유하면 역량이 배가됩니다. 부끄럽더라도 뭘 하고 있는지 공유하는 게 중요합니다.

예를 들어 지인에게 작업 중인 프로젝트나 아이디어를 공유했을 때, "왜?" 혹은 "기존 X와 뭐가 달라?"라는 질문이 돌아오면 그때서야 새로운 고민이 시작됩니다. 블로그에 아티클을 올릴 때도 마찬가지인데, 글을 작성하다 보면 더 많은 통찰을 얻고, 뒤로 미뤄뒀던 궁금증을 해결하게 됩니다.

이런 대화가 가능한 지인과 환경을 만들어두는 게 진짜 중요합니다. 그 안에서 상대의 정보를 소비만 하지 않기 위해 좀 더 미리 뛰어들고, 써보고, 공부해서 공유하게 되는 좋은 사이클이 만들어지기도 하니까요.

자동화와 세컨드 브레인

공유든 개발이든, 결국 기억과 맥락을 잘 관리해야 가능한 일입니다. 사람의 기억에는 한계가 있습니다. 특히 저는 빠르게 잊는 편이라 Obsidian에 PARA 메소드로 세컨드 브레인을 만들어 쓰고 있는데, 저자도 수술 이후로 기억이 온전치 않아 데스크톱 환경, 터미널, 그 외 모든 것을 자동화해놨다고 합니다. 저자의 상황은 다르지만, 자동화로 인지 부담을 줄인다는 접근은 같았네요.

복잡함 속에서도 단순함이라는 방향을 잃지 않는다는 메시지의 이미지

탐색을 멈추지 않기

이 책에서 가장 마음에 남는 파트입니다. 조지 버나드 쇼의 말이 인용되는데, "우리가 나이를 들어서 놀이를 멈추는 게 아니라, 놀이를 멈추기 때문에 나이가 드는 것이다.(We don't stop playing because we grow old; we grow old because we stop playing.)" 진짜 공감합니다. 늘 철없이 살고 싶은데, 나이 들수록 철없어지기가 쉽지 않더군요.

저자는 프로그래밍을 처음 했을 때 베이직을 썼고, 만약 아직도 그걸 쓰고 있다면 지금도 천공카드를 만지작대고 있을 거라 합니다. 제 예를 들면 ASP나 JSP, AMP 같은 걸로 아직도 하고 있을 겁니다. 하지만 우리는 계속 새로운 걸 받아들이고 발전해서 지금까지 왔습니다.

AI 시대에도 굉장히 부합되는 말이죠. 언제나 탐색하고 수행해야 합니다. 근본만 고집하면서 새로운 기술에 도전하는 걸 시간 낭비라고 느끼는 순간 도태됩니다. 오래된 기술과 최신 기술의 차이는 N극과 S극처럼 완전 반대에 있는 듯하지만, 붙여놓으면 딱 달라붙듯이 종이 한 장 차이죠. 두 가지를 탐구하다 보면 속도의 차이는 있겠지만, 결국 같은 종착점에 도달해 있습니다. 그 과정을 즐기면서 가면 됩니다.

켄트 벡의 "변화를 포용하라(Embrace Change)"라는 말도 언급합니다. 이런 변화를 포용하고 빠르게 탐색하는 사람들과 대화하면 내 지식도 올라가는 걸 느낄 수 있습니다. 반대의 경우엔 공감이 안 되기 때문에 설명을 해야 하는데, 사실 그것도 나름 재밌습니다. 이 책에서는 탐색에 들인 경험들이 어떻게 미래에 도움이 되는지 슬기롭게 표현하고 있습니다.

여러 선택지 중에서 단순하고 적절한 경로를 찾아가는 과정을 보여주는 이미지

이 외에도 데이터 기반으로 함수형 코드를 관리하고 테스트하는 방법 등 실전적인 내용이 이어지는데, 이 부분은 책을 직접 보시는 걸 추천합니다.

마치며

실용주의 프로그래머 저자였을 줄이야. 복습한 기분입니다. 미니멀리스트라는 삶의 방식이 유행한 적이 있는데, 주변에 제대로 하는 사람은 단 한 명도 없었죠. 미니멀리즘이란 무소유에 가까워지는 일종의 열반, 정신 수양에 가깝다고 생각합니다. 그것처럼 미니멀리즘 프로그래머가 되고 싶은 사람은 많아도, 되기는 엄청 힘들다고 생각합니다. 저도 갈 길이 멀고 말이죠. 책 분량도 많지 않아서 리프레시하기 좋은 도서라고 생각되어 추천합니다.

Refs

  • 데이비드 토머스, 『미니멀리즘 프로그래머』(원제: Simplicity), 한빛미디어
  • 데이비드 토머스 & 앤드류 헌트, 『실용주의 프로그래머』