이름이 어려운 아저씨 Bjarne Stroustrup (얀 스트루스트럽 이라고 발음하는 것 같다) 는 프로그래밍에 좀 관심이 있는 사람이라면 잘 알겠지만 C++ 의 창안자이다. 현재 프로그래밍 세계에 가장 보편적이고도 중요하게 사용되는 언어인 C++. 하지만 Bjarne 이 이 세상에 남긴 훌륭한 발명품은 C++ 뿐만이 아니라 지금 설명하고자 하는 이 책까지 포함되어야 할 것이다.

언어라는 것은 단지 의사를 전달하고자 하는 수단으로 생각할 수도 있지만, 기실은 언어가 인간의 사고의 한계를 좌우한다는 것은 여러 철학자들에 의해 주장되어왔다. 프로그래밍 언어도 단순히 기계에 명령을 전달하기 위한 도구라기보다는, 프로그램을 만들고자 하는 사람의 생각을 좌우하는 틀의 역할을 한다. C++ 프로그래머는 프로그램을 작성하고자 할때 어디까지 생각하고 어떤 생각의 자세를 갖고 있어야 할까? c++ 이라는 도구를 만든 저자는 아마 누구보다도 이런 주제에 대해 많은 생각을 했을 것이라고 생각한다.

이 책은 C++ 라는 언어를 설명하는 책이지만, 그 이상의 저자의 프로그래밍 철학을 독자에게 옮겨주는 책이기도 하다. 언어는 기본적으로 도구이기 때문에, 적절히 활용될 수도, 부족할수도, 남용될 수도 있다. 중요한 것은 C++ 언어를 활용하는 것보다도, 프로그래밍 언어를 이용해서 내가 원하는 목표를 달성하는 방법과 기술이다. 많은 학생들이 프로그램을 만들기 위해서 일단 프로그래밍 언어에 대해 배운다. 기본적인 언어의 구조와 어떤 요소들이 있는가를 공부한 후에, 기존에 만들어진 프로그램의 예를 모방하거나 응용하면서 자신의 프로젝트를 위해 한걸음씩 전진하는 것이 보통이다. 물론 언어는 도구이기 때문에, 언어를 연구하는 것에 모든 시간을 소모하면 자신의 목표 프로젝트로 다가갈 수는 없을 것이다. 하지만 지금까지 내가 만난 많은 프로그래머들은 언어 그 자체와 프로그래밍 기법의 연마에 대해 너무 적은 투자를 한 경우가 많았다.

누구나 모국어를 갖고 태어나고 서너살이 몇살이 되면 자기나라 말을 할 수 있게 된다. 그것으로 일단은 주위 사람들과 의사소통을 할 수 있고, 학교에서 교육을 받으면서 상위적인 개념들을 배우고 완전한 자기의 것으로 만들게 된다. 하지만 우리는 그 후에도 끊임없이 알게 모르게, 말과 언어를 사용하는 법을 배우게 되고, 고수준의 활용을 필요로 하게 된다. 아주 새로운 것은 아니더라도 우리는 끊임 없이 언어를 배우면서 사는 것이다. 컴퓨터 프로그래밍도 마찬가지로, 프로그래밍 언어는 한번 배우고 그 후에는 잊어버려도 되는 성격의 것이 아니다. 프로그램을 작성하는 데에는 항상 복수개의 방법이 존재할 수 있으며, 더 좋은 방법을 사용하기 위해서는 언어라는 도구의 도움이 필요하다. 그리고 그 필요에 의해서 언어는 늘 변화한다. 우리의 일상용어가 늘 변화하는 것처럼 말이다.

나는 처음 이 책을 접했을때, 그냥 내가 C++ 에 대해서 잘 모르던 부분들 (예를 들면 template, standard library) 같은 것에 대한 도움이 필요했을 뿐이었지만, 보고 난 후에 이 책은 나에게 훨씬 더 많은 것을 말해주고 싶어한다는 것을 깨달았다. 각 chapter 들의 말미에 Advice 로 정리된 것들은 그러한 조언들의 결정체라고 할 수 있다. 그의 문장은 담담하면서도 간결하게 프로그래머가 추구해야 할 방향들을 제시한다. 책의 후반부, 즉 c++ 언어 자체에 대한 이후 부분은 다른데에서 찾기 어려운 귀중한 지식들이다. 프로그램을 만드는 것은 간단하면서도 어려운 일이다. 얼마나 더 잘 만들 수 있느냐, 얼마나 더 좋은 디자인으로 만들 수 있느냐에는 궁극의 해답이란 존재하지 않는다. (왜? 환경과 조건은 언제나 변하므로)

아쉽게도 프로그래밍에 대해서 배울때 '프로그램 디자인' 에 대해 배울 기회는 의외로 너무나도 드물다. 우선 좋은 참고 서적이나 가이드가 없고, 대부분의 산 지식은 엔지니어들의 머릿속에 맴돌기 때문이다. 그리고 성공적인 고급 프로젝트의 결과물에 대해 학습자가 접근할 수 있는 기회는 매우 드물고, 소스를 볼 기회가 생기더라도, 그것이 체계적인 지식을 축적시켜주는데에는 큰 도움이 되지 않는다. 그런 시점에서 프로그램의 디자인에 대한 이 책의 가르침은 사막 한 가운데의 오아시스와도 같은 것이다. 다행히 요즘들어서 프로그램 디자인, 특히 패턴을 중심으로 프로그램 디자인 기법에 대한 지식이 체계화되어 일반에 전해지기 시작한 것은 매우 바람직한 일이긴 하지만, 초보적인 학습자에게 패턴을 보고 디자인 기법을 배우라는 것은 크게 부담스러운 일이 되며, 그것보다는 좀 더 근본적이고 기초적인 조언이 중요하다. 내가 이 책에 대해서 이렇게 말하는 이유는 바로 이 책이 전해주는 가르침이 그 빈 부분을 채워주기 때문이다.

이렇게 글을 쓰면서도 가장 안타까운 사실은, 이 책의 한국어판이 없다는 사실이다. 다른 책들의 번역판들은 많이 나오면서도 이렇게 기본적이면서도 중요한 책의 번역이 나오지 않는다는 것은 매우 의아한 일이 아닐 수 없다. 이런 기본적인 레퍼런스가 충분히 갖춰지지 않은 상태에서는 아무리 고급 지식이 전파되어도 그것을 소화할 수 있는 여건이 마련되지 않을 것이다. 더구나, MSDN 같은 딱딱하지만 비교적 독해하기 쉬운 레퍼런스에 비해서 이 책의 문장들은 좀 더 독해가 어려울 수도 있을 것이다.

정리하자면, C++ 를 이용해서, 혹은 C++ 을 이용하지 않더라도 진지하게 프로그래밍을 하고 싶은 학습자라면 이 책은 입수(원서이기 때문에 가격까지 비싸고 대형서점의 외국어전문서적 코너에서만 찾아볼 수 있다)와 독해의 어려움의 이중고를 감수하고라도 반드시 통과해야만 하는 관문으로 생각하길 바란다. 이 책을 탐독한 프로그래머와 그렇지 못한 프로그래머의 기본기 차이는 자명해질 것이므로...

imcgames 의 김학규입니다