워드 커닝햄은 프로그래머를 어떻게 보았는가
이 문서는 워드 커닝햄이 c2.com에 공개한 서문과 후문을 바탕으로, 그가 프로그래머를 어떤 존재로 이해했는지 정리한 메모다.
기준 자료:
- Papers, Talks and Position Statements ↗
- Foreword: The Pragmatic Programmer ↗
- Foreword to Analysis Patterns ↗
- Foreword to Smalltalk Best Practice Patterns ↗
- Afterword to Kent Beck: Sorted Collection ↗
한 줄 요약
워드 커닝햄에게 프로그래머는 단순히 코드를 타이핑하는 사람이 아니라, 자기 일의 방식을 성찰하고 개선하며, 경험을 패턴으로 축적하고, 코드로 사고를 검증하고, 작업 환경까지 스스로 통제하려는 사람이다.
1. 프로그래머는 "언어를 말하는 사람"보다 더 큰 존재다
The Pragmatic Programmer 서문에서 커닝햄은 많은 프로그래밍 책이 사실상 "프로그래밍 언어를 말하는 법"만 가르친다고 지적한다. 하지만 그는 그것이 프로그래머가 하는 일의 작은 일부일 뿐이라고 본다.
핵심 생각:
- 프로그래밍은 문장 입력이 아니다.
- 프로그래머의 일은 세부를 관리하는 것 이상이다.
- 중요한 것은 자신이 무엇을 하고 있는지 의식하면서 일하는 태도다.
그가 높이 평가한 프로그래머는 작업 중에도 자기 작업 자체를 관찰한다. 회의가 왜 필요한지, 다른 방식으로 대체할 수는 없는지, 자동화할 수는 없는지까지 생각한다. 즉 "프로그래밍을 방해하는 것"처럼 보이는 일도 개선 가능한 대상으로 본다.
정리하면:
- 프로그래머는 구현자이기만 한 사람이 아니다.
- 프로그래머는 일의 절차를 재설계하는 사람이다.
- 프로그래머는 자기 노동을 더 나은 형태로 바꾸는 사람이다.
2. 프로그래머의 핵심 자산은 도구보다 경험이다
Analysis Patterns 서문에서 커닝햄은 개발 실패의 원인을 도구, 기법, 표기법, 코드 부족에서 찾지 않는다. 오히려 이미 좋은 프로그램을 만들 기계와 수단은 충분히 있으며, 실패의 더 큰 원인은 경험 부족이라고 말한다.
핵심 생각:
- 좋은 개발의 차이는 도구보다 경험에서 나온다.
- 경험은 추상 이론이 아니라 반복해서 맞닥뜨린 문제와 해법의 축적이다.
- 책의 역할은 경험을 전달 가능한 형식으로 바꾸는 데 있다.
그래서 그가 본 좋은 프로그래머는 새로운 문법을 빨리 익히는 사람보다:
- 문제 맥락을 알아보는 사람
- 반복되는 구조를 식별하는 사람
- 경험을 재사용 가능한 형태로 정리하는 사람
에 가깝다.
3. 프로그래머는 코드를 통해 이해를 시험하는 사람이다
Smalltalk Best Practice Patterns 서문에서 커닝햄은 코딩을 "이해의 궁극적 시험"이라고 본다. 무엇을 알고 무엇을 모르는지가 코딩에서 드러난다는 것이다.
핵심 생각:
- 코드는 사고를 드러낸다.
- 이해가 부족하면 코드가 그것을 드러낸다.
- 코드는 단순한 산출물이 아니라 사고를 반사하는 매체다.
그는 코드를 읽고 추론하고 반성하라고 말한다. 코드는 자신에게 무엇이 빠졌는지를 알려준다고 본다. 이 관점에서 프로그래머는:
- 머릿속 아이디어를 코드로 밀어 넣어 보는 사람
- 코드가 주는 피드백으로 자기 이해를 수정하는 사람
- 분석, 설계, 코딩을 분리된 단계보다 연속된 이해의 사다리로 다루는 사람
이다.
4. 프로그래밍은 결국 사람의 일이다
같은 서문에서 커닝햄은 "이 책은 코드에 대한 책이지만 사실은 사람에 대한 책"이라고 말하는 방향으로 논의를 끌고 간다. 기계는 사고를 비춰주는 반사체일 뿐이며, 코드는 지금 함께 일하는 사람들과 예전에 생각을 남긴 사람들의 흔적을 담는다고 본다.
핵심 생각:
- 코드는 사회적 매체다.
- 패턴은 사람들이 보고 쓰기 때문에 의미가 있다.
- 프로그래밍은 혼자만의 기술이 아니라 공유된 사고의 축적이다.
따라서 그가 생각한 프로그래머는 고립된 천재보다:
- 남의 코드를 읽고
- 자신의 생각을 남이 읽을 수 있게 만들고
- 팀과 공동체 안에서 축적 가능한 지식을 만드는 사람
에 더 가깝다.
5. 프로그래머는 패턴을 만들고 따르는 사람이다
커닝햄은 여러 서문에서 일관되게 pattern이라는 형식을 중시한다. The Pragmatic Programmer에 대해서도 단순한 팁 모음이 아니라 서로 강화하는 해법들의 체계, 즉 패턴 언어에 가깝다고 평가한다.
핵심 생각:
- 좋은 조언은 추상적 선언보다 구체적이어야 한다.
- 좋은 실천은 단독 규칙이 아니라 서로 연결된 맥락 속에서 작동한다.
- 프로그래머는 우연한 요령이 아니라 재사용 가능한 해법의 체계를 만들어야 한다.
이 점에서 프로그래머는:
- 문제를 한 번 푸는 사람을 넘어서
- 해법을 이름 붙일 수 있게 만드는 사람
- 그 해법이 다른 문제와 어떻게 연결되는지 설명할 수 있는 사람
이다.
6. 프로그래머는 자기 환경을 소유하고 통제해야 한다
Kent Beck: Sorted Collection 후문에서 커닝햄은 "플러그를 뽑을 수 없는 컴퓨터는 프로그래밍하지 말라"는 패턴을 이야기한다. 이 말의 핵심은 공포나 기계 혐오가 아니라 ownership and control이다.
핵심 생각:
- 프로그래머는 자신이 일하는 환경을 통제할 수 있어야 한다.
- 권한을 빌려 쓰는 상태에서는 충분히 강한 프로그래밍을 하기 어렵다.
- 도구와 실행 환경에 대한 소유권은 창조성과 실험 가능성의 조건이다.
이 관점에서 프로그래머는 단순한 사용자보다:
- 자기 도구를 자기 목적에 맞게 다루는 사람
- 막히면 중단하고 다시 시작할 자유가 있는 사람
- 허가를 기다리기보다 실험할 수 있는 환경을 확보하는 사람
이다.
종합
커닝햄의 글들을 종합하면, 그가 생각한 프로그래머는 대략 다음과 같다.
- 코드를 쓰는 사람
- 하지만 코드 입력 자체보다 더 넓게 일의 구조를 바꾸는 사람
- 경험을 축적하고 패턴으로 정리하는 사람
- 코드를 통해 자신의 이해를 시험하는 사람
- 타인과 함께 읽고 고칠 수 있는 지식을 만드는 사람
- 자기 도구와 환경을 통제하려는 사람
그래서 커닝햄에게 프로그래머란 단순한 "개발 노동자"라기보다, 사고를 코드로 실험하고, 경험을 패턴으로 남기며, 공동체가 재사용할 수 있는 지식을 만드는 실천가에 가깝다.
짧은 해석
워드 커닝햄의 프로그래머관은 세 가지 축으로 압축할 수 있다.
성찰
- 좋은 프로그래머는 자기 작업을 돌아본다.
경험
- 좋은 프로그래밍은 이론보다 검증된 경험의 조직화에 가깝다.
공유
- 좋은 코드는 사람들 사이에서 이해와 협업을 가능하게 한다.
출처 메모
이 정리는 아래 자료를 직접 읽고 요약한 것이다.