-
-
미니멀리즘 프로그래머 - AI 시대, 복잡함을 줄이고 가치를 올리는 개발 원칙
데이비드 토머스 지음, 이민석 옮김 / 한빛미디어 / 2026년 2월
평점 :
한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.
1. 이 책을 선택한 동기
에이전틱 코딩이 익숙해질수록 모든 코드를 일일이 검토하지 못하는 빈도가 높아졌어요. 병렬 에이전트를 동시다발적으로 지휘하다보면 한 사람 한 사람의 코드를 모두 세세히 파악하기는 쉽지 않죠. 점차 코드 하나하나에 대한 고민이 줄어들수록, 현 시대에 맞춘 개발 방법론에 대해 한번 짚고 가고 싶었습니다.
그러던 중에 미니멀리즘 프로그래머을 만났어요. 『실용주의 프로그래머』의 공동 저자 중 한명인, 데이비드 토머스가 AI 시대에 단순함을 이야기한다는 게 마침 타이밍이 맞았어요. 지금 이 시점에 읽어야 할 책이다 싶었습니다.
2. 어떤 책인지
192쪽이라는 얇은 분량에 29가지 실천법(Practice)을 담은 책이에요. 코드, 팀, 환경, 소통 — 개발자 삶의 전 영역에서 복잡함을 걷어내는 법을 이야기해요. 코드 기술서라기보다는 개발자의 태도와 습관에 대한 책에 가까워요.
크게 4개 파트로 나뉘는데 구성이 재밌었어요.
PART 1 하는 일 단순화: 의존성, 프레임워크, 기능 관리
PART 2 환경 단순화: 자동화, 터미널, 에디터
PART 3 상호작용 단순화: 팀 회의, 소프트 스킬, 공감
PART 4 코드 단순화: 데이터 주도 개발, 가독성
저자가 서문에서 던지는 질문이 인상적이었어요.
"슬픈 사실은 프로젝트를 복잡하게 만든 장본인이 대부분 우리 자신이라는 점입니다. 잠시 멈춰 서서 생각하지 않고, '이게 정말 맞나?'라고 묻는 내면의 작은 목소리를 외면하는 순간 복잡함이 싹틉니다." (p.16)
3. 특히 인상적이었던 점
"복합적(complex)"과 "복잡한(complicated)"은 다르다 (p.16)
책 서문에 나오는 구분이 머릿속에 오래 남았어요. 눈송이 비유가 인상적이었어요.
"소프트웨어의 복합적인 면은 다루기 어렵지만, 그 안에는 분명한 규칙이 존재합니다. 하지만 그 규칙을 무시하면 '복잡함'이 찾아옵니다." (p.16)
눈송이는 복합적(complex)이지만, 날씨는 복잡(complicated)합니다. 소프트웨어도 마찬가지예요. 읽으면서 제가 만들어온 코드들이 떠올랐어요. "일단 돌아가면 됐지"로 넘어간 순간들이 쌓여서 결국 아무도 건드리기 싫은 파일이 되는 과정... 정확히 그 흐름이에요.
의존성을 추가하는 건 통제권을 넘기는 일 (p.31)
"저는 의존성이라면 단 하나의 예외도 없이 싫어합니다. 의존성을 추가하면 미래의 내가 가져야 할 통제권의 일부를 남에게 넘겨주는 것이나 다름없습니다." (p.31)
저자가 인용한 조 암스트롱의 말도 머릿속에 남아요.
"바나나 하나만 필요했을 뿐인데, 바나나를 든 고릴라와 정글 전체가 딸려온다." (p.35)
프레임워크에 대해서도 강하게 경계해요.
"프레임워크가 API를 쥐고 있을 뿐만 아니라, 애플리케이션 아키텍처를 어떻게 짤지까지 규정해 버리기 때문입니다." (p.39)
Next.js를 쓰면서 "왜 이렇게 해야 하지?"를 고민하기보다 프레임워크가 시키는 대로 따라가고 있던 제 모습이 보였어요.
'기능'은 미래의 부채 (p.43)
"'기능'은 '미래의 부채'를 그럴싸하게 포장한 마케팅 용어입니다." (p.43)
그리고 같은 챕터에 이런 말도 나와요.
"아무도 요청하지 않은 코드는 작성하지 마세요." (p.44)
읽으면서 찔렸어요. 요청도 안 받았는데 "이 기능 있으면 좋겠다"는 생각에 혼자 만들었다가 결국 유지보수만 늘어난 경험이 한두 번이 아니거든요.
"할 수 있다"와 "해야 한다"는 다르다 (p.100)
이 문장은 챕터 도입부에서 자신의 에디터 설정을 너무 과하게 꾸몄던 경험을 반성하며 나오는데, AI 시대에 더욱 날카롭게 읽혔어요.
"할 수 있다고 해서 좋은 생각인 건 아닙니다." (p.100)
AI가 뚝딱 코드를 만들어주는 시대에, 기술적으로 가능하다는 이유로 덥석 붙여넣는 게 얼마나 위험한 일인지 다시 생각하게 됐어요. 코드를 생성하는 능력은 평준화되지만, 그 코드가 지금 정말 필요한지 판단하는 능력은 여전히 사람의 몫이에요.
코드에도 공감이 필요하다 (p.133)
요트 스키퍼 이야기가 정말 좋았어요. 초보와 숙련자의 차이를 이렇게 설명해요.
"그는 배를 굴복시키려 들지 않았습니다. 대신 배의 움직임을 느끼고, 배와 '합의'를 이루려고 했습니다." (p.134)
코드도 마찬가지라고 저자는 말해요. 뭔가 저항감이 느껴지거나 평소보다 힘들다는 느낌이 들면, 그냥 억지로 밀어붙이지 말고 멈춰서 살펴보라고요. 그 감각이 잠재의식이 보내는 신호라고요. 개발하면서 "이건 뭔가 이상한데..."라고 느끼면서도 그냥 넘어간 적이 얼마나 많았는지 돌아봤어요.
회의는 원래 애자일하지 않다 (p.54)
코드 얘기가 아니라 조금 뜬금없을 수 있지만, 이 챕터도 제게 꽤 충격이었어요.
"회의는 비효율적이고 불공평하며 업무를 방해하고 비용도 많이 듭니다." (p.57)
저자는 10명 팀이 2주 스프린트 동안 회의에만 13시간 30분을 쓴다는 걸 계산으로 보여줘요. 더 인상적인 건 이 문제를 해결하기 위해 DWP(포트폴리오 없는 개발자)라는 새로운 역할을 제안한다는 거예요. 코드를 짜지 않고 팀이 원활하게 돌아가도록 돕는 역할이에요. "팀이 엔진이라면 DWP는 윤활유"라는 비유가 딱 맞아요. 이걸 읽으면서 팀에 이런 사람이 한 명 있고 없고가 얼마나 큰 차이인지 실감했어요.
상태 머신으로 로직 단순화하기 (p.163)
"저는 상태 머신을 자주 사용합니다. 상태 머신을 적용할 때마다 제가 작업하던 코드가 더 좋아졌습니다." (p.163)
"상태 머신 구현은 복잡한 라이브러리나 긴 패턴 기반 접근 방식이 없어도 충분합니다. 필요한 것은 룩업 테이블 하나뿐입니다." (p.164)
로그인 상태, 주문 상태, 결제 상태... 대부분의 UI 로직은 상태 변화인데, 이걸 명시적으로 모델링하지 않고 if/else로 땜빵해온 경우가 얼마나 많았는지 돌아보게 됐어요. 루비 코드로만 예시가 나와서 JavaScript에서는 어떻게 쓸지 직접 실험해봐야 했지만, 개념 자체가 강하게 남았어요.
4. 덕분에 무엇을 배웠는가
단순함은 기술이 아니라 태도다. 코드를 짧게 줄이는 테크닉이 아니라, 불필요한 것을 덜어내는 판단력의 문제예요. "단순함은 결코 단순하지 않습니다. 신중하게 의도되고 충분히 다듬어지며 실질적으로 효과적입니다." (p.191)
AI가 짜준 코드도 검토할 줄 알아야 한다. AI가 코드를 생성해줄수록, 그 코드가 정말 필요한 건지 판단하는 능력이 더 중요해져요. "할 수 있다"와 "해야 한다"는 다릅니다.
자동화는 인지 부담을 줄인다. "자동화를 더 많이 할수록 기억해야 할 것이 줄어듭니다." (p.84) 배포 자동화, 환경 설정 자동화가 단순히 편리한 게 아니라 코드 품질과도 직결된다는 걸 배웠어요.
탐색은 미래에서, 일은 과거에서. "매일 의존하는 도구와 라이브러리의 경우, 화려하거나 새로운 것보다 지루하고 안정적인 것이 언제나 더 낫습니다." (p.116) 새로운 기술은 탐색 시간에 실험하고, 실제 프로젝트에는 검증된 것을 쓴다는 원칙이 납득됐어요.
공감이 코드 단순화에도 영향을 미친다. 코드에도 귀를 기울이고, 팀원과의 마찰을 줄이는 것이 결국 시스템 단순화로 이어진다는 연결이 인상적이었어요.
의존성 추가 전에 한 번 더 생각하자. 정말 이게 없으면 안 되는가? 직접 11줄로 짤 수 있는 건 아닌가?
5. 좋았던 점
코드만 이야기하지 않는다
기술 서적인데 회의 방식, 팀 커뮤니케이션, 소프트 스킬까지 다루는 게 오히려 좋았어요. 개발의 복잡함은 코드에서만 오는 게 아니니까요. "다양성은 회복력입니다"(p.73) — 동물 종과 팀 모두에 해당한다는 말이 오래 남았어요.
저자의 솔직함
저자는 자신이 소프트 스킬이 부족하다고 스스로 인정하면서 챕터를 시작해요. "저는 공감 능력 척도에서 4 정도 될 것 같습니다"라고요. 이런 솔직함 덕분에 '완벽한 개발자가 가르치는 이야기'가 아니라 '함께 개선해가는 과정'처럼 읽혔어요.
6. 아쉬운 점
29가지 원칙 중 일부는 너무 짧게 다루고 지나가서 "이건 더 파줬으면..." 싶은 챕터가 몇 개 있었어요. 특히 상태 머신 부분은 루비 코드 예시만 나와서, JavaScript/TypeScript 개발자는 직접 변환해서 써봐야 했어요. 가독성 챕터(CH.08)의 Practice들은 너무 실용적이고 좋았는데 후반부에 급히 달린 느낌이 들었고요.
7. 이 책을 읽은 덕분에 기대되는 변화
복직하면 코드 리뷰할 때 "이 의존성이 정말 필요한가?"를 먼저 물어볼 것 같아요. 그동안은 "동작하면 됐다"는 태도로 넘어갔던 순간들이 있었는데, 이제는 동작하는 가장 단순한 선택을 먼저 찾아보는 습관을 들이고 싶어요.
그리고 Practice 22에서 배운 상태 머신 패턴을 사이드 프로젝트인 북골라스에 바로 적용해볼 계획이에요. 독서 상태 관리(reading → paused → finished)를 명시적 상태 모델로 다시 짜보면 좋겠다 싶거든요. 라이브러리 없이 룩업 테이블 하나로.
자동화도 다시 점검하고 싶어요. "배포 체크리스트를 여기저기 찾아 헤맬 필요가 없다"(p.84)는 말처럼, 기억해야 할 것들을 자동화로 줄이는 작업을 미뤄왔는데 이 책을 읽고 다시 의욕이 생겼어요.
저자의 마지막 문장이 오래 남아요.
"코드와 코딩 방식, 그리고 나아가서는 삶 자체도 가능한 한 단순함을 추구하세요. 이 방법을 적용하면 생산성이 높아지고 스트레스가 줄고 업무에 즐거움과 재미를 다시 느낄 수 있을 겁니다. 여러분에겐 그럴 자격이 있습니다." (p.191)