Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman 서문, 그런데 워드가 쓴
David H. Hoover와 Adewale Oshineye쓴 이 책에 Ward Cunningham이 서문을 썼다.
서문 (Foreword)
25년 전, 켄트 벡(Kent Beck)과 저는 텍트로닉스(Tektronix) 기술 센터의 구내식당에 앉아, 우리가 가진 스몰토크-80(Smalltalk-80)에 대한 특권적인 접근 권한이 세상에 어떤 영향을 미칠지 궁금해했습니다.
"현실은 신경 쓰지 마(Never mind reality)," 저는 켄트에게 조언했습니다. "우리가 무엇이든 할 수 있다면, 이 지식으로 무엇을 하겠어?"
"나는 사람들이 프로그래밍에 대해 생각하는 방식을 바꾸고 싶어," 켄트가 말했습니다. 저도 동의했습니다. 우리 둘 다 우리 업계의 발전 과정에서 잘못된 방향으로 접어들었다고 생각했던 부분을 되돌리고 싶었습니다.
그리고 놀랍게도, 우리는 해냈습니다.
제가 그 구내식당에서 사용했던 장치, 즉 "현실은 신경 쓰지 마"라는 부분은 제 대학 지도교수님이 사용하시는 것을 처음 본 패턴(pattern)이었습니다. 교수님은 제가 켄트에게 했던 것과 똑같이 제게 그 방법을 쓰셨습니다. 지금은 패턴으로 인식하게 된 그 활동은 켄트와 제가 감히 대담하게 보일 수도 있었던 먼 목표를 상상할 수 있게 도와주었습니다. 그리고 일단 상상하고 나니, 그 목표들은 훨씬 더 성취 가능한 것처럼 보였습니다.
저는 그 사고 장치를 패턴이라고 부릅니다. 왜냐하면 그것은 우리가 자주 겪는 문제, 즉 스스로 야망을 검열해 버리는 문제를 해결해주기 때문입니다. 이 책은 다양한 문제들을 위한 유사한 장치들로 가득 차 있습니다. 우리는 패턴이 문제를 해결한다고 말합니다. "현실은 신경 쓰지 마"는 켄트와 저의 문제를 해결해 주었습니다. 그 덕분에 우리는 습관적인 자기 검열을 뚫고 나아갈 수 있는 큰 생각들을 할 수 있게 되었고, 그 생각들은 우리 곁에 머물렀습니다.
여러분도 아마 "현실은 신경 쓰지 마" 패턴을 직접 시도해 본 적이 있을 것입니다. 아직 해보지 않았다면, 한번 시도해 보세요.
가장 강력한 패턴은 생산적으로 반복해서 적용되는 패턴들입니다. 패턴이 유용하기 위해서 꼭 새로워야 할 필요는 없습니다. 사실, 새롭지 않다면 더 좋습니다. 이미 확립된 패턴의 이름을 아는 것만으로도 큰 도움이 됩니다. 패턴을 식별할 수 있으면 매번 전체 이야기를 다시 할 필요 없이 그것에 대해 논의할 수 있기 때문입니다.
이 책을 훑어보세요. 많은 패턴들을 보게 될 것입니다. 상당수는 익숙할 것입니다. 어떤 패턴에 대해서는 "나도 이미 저 패턴을 가지고 있어"라고 말할 수도 있고, 실제로 아마 그럴 것입니다. 하지만 여기 글로 쓰인 패턴들이 설령 이미 널리 알려진 해결책이라 할지라도 여러분에게 도움이 될 수 있는 두 가지 방법이 있습니다.
첫째, 글로 쓰인 패턴은 더 완전합니다. 그것은 연구되고, 특징지어지고, 분류되고, 설명되었습니다. 여러분은 각 패턴에서 예상치 못한 귀중한 정보(nuggets)를 발견하게 될 것입니다. 이 정보들을 음미하세요. 그것들은 여러분이 이미 가지고 있는 패턴을 더 강력하게 만들어 줄 것입니다.
둘째, 패턴들은 서로 연결되어 있습니다. 각각의 패턴은 더 많은 패턴으로 이어집니다. 이미 알고 있는 패턴을 발견하면, 그 연결고리를 따라가며 몰랐던 패턴이나, 함께 작동한다고 생각해보지 못했던 다른 패턴들을 만날 수 있습니다.
켄트와 저는 스몰토크-80(Smalltalk-80)에서 패턴을 채굴했고, 많은 것을 발견했습니다. 우리는 동료들에게 패턴 개념을 제안했고, 작은 혁명을 일으켰습니다. 우리는 사람들이 프로그래밍에 대해 생각하는 방식을 바꿨습니다. 그 이후로 패턴과 그 사용법에 대한 수십 권의 책이 쓰였습니다.
우리의 혁명은 아직 끝나지 않았습니다. 패턴 용어의 점진적인 성장은 애자일(Agile) 소프트웨어 개발 방법론의 기초가 되었습니다. 그 후로도 수십 권의 책이 더 등장했습니다.
그렇다면, 왜 지금 이 책일까요? 음, 우리는 우리 직업 세계를 리소스(자료)들로 과부하시켰습니다. 한 사람이 흡수할 수 있는 것보다 더 많은 정보가 우리 혁명에 대해 나와 있습니다. 그럼에도 불구하고, 어떤 사람들은 그것을 해냅니다. 그들은 이용 가능한 모든 조언을 내면화하고 항상 바로 곁에 두고 있는 것처럼 보입니다. 그들은 어떻게 그런 수준의 숙달(mastery)에 도달하는 것일까요?
이 책은 복잡한 우리 분야를 숙달하기 위한 패턴들로 가득 차 있습니다. 숙달한다는 것은 단순히 아는 것 이상입니다. 그것은 여러분의 짐을 덜어주는 방식으로 아는 것입니다.
예를 들어보겠습니다. 만약 SUBSTR 함수의 인자 순서가 기억나지 않는다면, 인터넷에서 찾아볼 수 있습니다. 인터넷이 있어서 정말 다행입니다. 그것은 우리의 짐을 조금 덜어주었습니다. 하지만 여러분이 이 책의 패턴들을 사용하여, 항상 개선을 열망하는 자세로 업무에 접근한다면, 여러분은 다른 종류의 코드를 작성하고 있는 자신을 발견하게 될 것입니다. SUBSTR의 인자 순서를 아는 것에 의존하지 않는 코드를 말입니다. 여러분은 SUBSTR을 훨씬 뛰어넘어 비상하는 프로그램을 작성하게 될 것입니다. 이것은 여러분의 짐을 아주 많이 덜어줄 것입니다.
우리 혁명에서 나온 모든 조언은 그것이 제2의 천성(second nature)이 되기 전까지는 큰 도움이 되지 않습니다. 소프트웨어 장인정신(craftsmanship) 운동은 이런 것들을 제2의 천성으로 만드는 것이, 음, 저절로 되는 일(second nature)은 아니라는 것을 인식하고 있습니다. 이 책의 패턴들은 이러한 진전에 대한 환영할 만한 기여입니다.
— 워드 커닝햄 (Ward Cunningham)