워드 커닝햄이 생각하는 프로그래머
c2.com에 공개된 서문들을 바탕으로 정리한다.
1. 코드를 통해 사고를 검증하는 사람
"코딩은 당신이 무엇을 알고 무엇을 모르는지 알려줄 것이다."
코딩은 기계에 지시를 내리는 행위가 아니라 이해도의 궁극적 시험이다. 프로그래머는 생각을 코드로 밀어 넣고, 코드가 주는 피드백으로 자기 이해를 수정한다.
— Smalltalk Best Practice Patterns 서문
2. 일의 방식 자체를 개선하는 사람
프로그래밍 언어를 말하는 법은 프로그래머가 하는 일의 작은 부분일 뿐이다. 커닝햄이 존경한 프로그래머는 업무 중에도 항상 개선 방안을 고민했다. 회의조차 프로그래밍 대상으로 보고 자동화할 수 있는 부분을 찾았다. 수년에 걸쳐 해결책을 수집하고 검증한 후, 실제로 작동하는 것들만 남긴다. 이것이 "실용적(Pragmatic)"의 의미다.
— The Pragmatic Programmer 서문
3. 경험을 패턴으로 체계화하여 나누는 사람
개발의 성공은 도구나 기법보다 경험에 달려 있다. 좋은 프로그래머는 반복해서 맞닥뜨린 문제와 해법을 패턴(pattern)으로 정리하여 다른 사람이 재사용할 수 있게 만든다. 코드는 사회적 매체이며, 프로그래밍은 혼자만의 기술이 아니라 공유된 사고의 축적이다.
— Analysis Patterns 서문
4. 자기 환경을 통제하는 자유로운 사람
"플러그가 달린 컴퓨터를 위해 프로그램을 작성하세요. 컴퓨터의 동작에 불만족하면 플러그를 뽑으세요."
이 패턴의 핵심은 플러그가 아니라 소유권과 통제(ownership and control)다.
커닝햄과 켄트 벡은 텍트로닉스 연구소에서 강력한 워크스테이션을 받았다. 대부분의 동료는 프로그램을 작성하려면 허가가 필요하다고 생각했지만, 그 둘은 그러지 않았다. 기계를 자기 것으로 만들었다. 월요일에 문제를 만들고, 화요일에 프로토타입을 짜고, 금요일에 결과를 보여줬다. 막히면 플러그를 뽑았다. 미완성 프로그램에서 벗어날 수 있었던 건, 그 프로그램이 자기 자신을 위한 것이었기 때문이다. 창작 행위 자체가 보상이었다.
단, 이것은 "회사를 떠나라"는 뜻이 아니다. 회사가 소유하는 것(결과물, 비즈니스 방향)과 프로그래머가 소유해야 하는 것(도구, 환경, 실험할 자유, 막히면 방향을 바꿀 재량)은 다른 층위다. 그 재량이 없으면 프로그래머는 타이피스트가 된다.
커닝햄은 1997년에 이미 경고했다. 과거에는 워크스테이션이 권력의 중심이었지만 이제는 서버가 권력을 쥐고 있다. 거대 기업들은 우리를 소비자로만 본다. 우리가 주장하지 않으면 우리를 강력하게 만들어주지 않을 것이다.
— Kent Beck: Sorted Collection 후기 (1997)
요약
워드 커닝햄에게 프로그래머란, 코드를 통해 사고를 검증하고, 일의 방식을 끊임없이 개선하며, 경험을 패턴으로 남겨 공동체와 나누고, 자기 환경에 대한 통제권을 지키는 사람이다.