Crafting Interpreters의 서문이 왜 뛰어난지 분석합니다. 독자에게 무엇을, 왜 배울지와 책의 톤을 빠르게 제시하고, 드래곤 북과의 대비로 그 강점을 보여 줍니다.
내가 가장 좋아하는 프로그래밍 책 중 하나는 Bob Nystrom의 Crafting Interpreters입니다. 이 책은 프로그래밍 언어를 처음부터 직접 만드는 법을 가르칩니다. 그 과정에서 텍스트 파싱, 자료구조, 가상 머신 등 더 강한 개발자가 되게 하는 여러 기술을 함께 배우게 됩니다.
얼마 전 이 책을 다시 읽다가, 그 서문이 놀랄 만큼 효과적이라는 걸 깨달았습니다. 개발자들은 도입부를 정말 못 씁니다. 그래서 _Crafting Interpreters_의 도입부가 왜 그렇게 매력적인지 살펴볼 가치가 있습니다.
책의 첫 문단은 다음과 같습니다.
우리가 함께 이 여정을 떠나게 되어 정말 기쁩니다. 이 책은 프로그래밍 언어를 위한 인터프리터를 구현하는 방법에 관한 책입니다. 동시에 구현할 가치가 있는 언어를 어떻게 설계하는지에 관한 책이기도 합니다. 제가 처음 언어에 관심을 갖기 시작했을 때 있었으면 했던 책이고, 거의 10년 동안 머릿속으로 써 온 책입니다.
기술 서적을 읽을지 말지 결정할 때 보통 두 가지 질문을 합니다.
좋은 도입부는 이 질문들에 빠르고 명확하게 답합니다.
_Crafting Interpreters_는 이 기준에서 어떻게 평가될까요? 첫 문단을 한 줄씩 나눠 보겠습니다.
우리가 함께 이 여정을 떠나게 되어 정말 기쁩니다.
처음에는 이 한 줄이 낭비처럼 보입니다. 독자가 무엇을 배우고 왜 그게 가치 있는지에 대해 아무것도 말해 주지 않으니까요. 이 문장은 세상의 어떤 책이든 첫 문장으로 쓸 수 있습니다. 그런데 굳이 이렇게 말해야 할까요?
이 한 줄은 은근히 효과적입니다. 곧 그 이유를 설명하겠습니다.
이 책은 프로그래밍 언어를 위한 인터프리터를 구현하는 방법에 관한 책입니다. 동시에 구현할 가치가 있는 언어를 어떻게 설계하는지에 관한 책이기도 합니다.
이 문장들은 “이게 나와 관련이 있나?”라는 질문에 대한 직접적인 답입니다. 이 책에서 정확히 무엇을 배우게 되는지 알려 주죠. 프로그래밍 언어에 관심이 있다면, 당신은 지금 딱 알맞은 자리에 있습니다.
프로그래밍 언어, 컴파일러, 인터프리터에 관한 책은 많습니다. 그런데 왜 하필 이 책을 읽어야 할까요?
제가 처음 언어에 관심을 갖기 시작했을 때 있었으면 했던 책이고, 거의 10년 동안 머릿속으로 써 온 책입니다.
이건 결정타입니다.
저는 이 문장이 몹시 설득력 있다고 느낍니다. 언어를 배우고 싶다면, 당연히 이런 것들을 10년 동안 생각해 온 사람에게 배우고 싶겠죠!
또한 저는 개발자가 자신의 과거의 자신을 위해 글을 쓸 때 아주 깊이 감탄합니다. 소프트웨어에는 조직적 지식이 엄청나게 많지만, 아무도 뒤돌아가 차근차근 설명해 주지 않기 때문에 접근할 수 없는 경우가 많습니다. 앞서갈 이들을 위해 길을 매끈하게 다듬어 주는 사람을 보면 늘 좋습니다.
이 문장은 이 책이 누구를 위한 것인지 명확히 하는 데도 효과적입니다. “처음 시작할 때”라는 언급은 이 책이 언어 설계를 막 배우기 시작했거나 초·중급 단계의 프로그래머를 위한 것임을 의미합니다.
대부분의 개발자에게, 완전히 새로운 프로그래밍 언어를 처음부터 만드는 일은 불가능하게 느껴집니다. 1970년대 Bell Labs의 천재가나 할 법한 일이지, 매일 팀 스탠드업 하고 웹앱에서 버그를 쫓는 평범한 개발자가 할 수 있는 일처럼 느껴지진 않습니다.
프로그래밍 언어 만들기에 관한 가장 유명한 책 중 하나는 흔히 “드래곤 북”이라고 부르는 Compilers: Principles, Techniques, and Tools입니다.
드래곤 북의 첫 문장은 이렇습니다.
프로그래밍 언어는 사람과 기계에게 연산을 서술하기 위한 표기법이다.
“연산을 서술하기 위한 표기법?” 이보다 더 딱딱하고 학구적일 수 있을까요?
제가 아는 누구도 프로그래밍을 “연산을 서술하기 위한 표기법을 만드는 행위”라고 설명하진 않을 겁니다. 어떤 개발자에게는 그런 언어가 와닿을 수 있겠지만, 저는 그 문장을 읽는 순간 “이 책은 컴퓨터 과학 이론가들을 위한 것이지, 나 같은 평범한 개발자를 위한 책은 아니구나”라고 생각합니다.
이제 처음에는 한 줄 낭비처럼 느껴졌던 _Crafting Interpreters_의 첫 문장으로 돌아가 보겠습니다.
우리가 함께 이 여정을 떠나게 되어 정말 기쁩니다.
이 문장은 이제 어떻게 느껴지나요? 거추장스럽지 않고, 접근하기 쉽고, 환영하는 톤입니다. 마치 동물원에 가는 길에 아이가 건네는 말 같죠.
Bob Nystrom은 당신이 컴퓨터 과학 박사가 아닌 평범한 사람이어도 괜찮다고 말해 주고 있습니다. 컴파일러와 인터프리터는 꼭 두려울 필요가 없습니다 — 좋은 길잡이만 있으면 당신 같은 평범한 개발자도 만들 수 있습니다.
Crafting Interpreters 도입부가 왜 그렇게 좋은지로 돌아가 보면, 요점은 다음 네 가지로 요약됩니다.
아직 _Crafting Interpreters_를 읽지 않았다면 강력히 추천합니다. 전체 책은 온라인에서 무료로 볼 수 있으며, 인쇄본과 전자책도 있습니다. 저는 언어 설계 자체에는 큰 흥미가 없는데도 이 책은 매우 유익하고 흥미진진했습니다.
Bob Nystrom이 책에 쏟아부은 정성을 느껴 보세요. 그는 181개의 모든 삽화를 직접 손으로 그렸습니다. 삽화의 글씨는 폰트처럼 보이지만, 그건 이 책을 위해 _펜글씨를 악착같이 연습_하는 데 수없이 많은 시간을 들였기 때문입니다! 그렇게 말할 수 있는 소프트웨어 저자가 얼마나 될까요?