게임 프로그래머들은 대체로 실용적인 사람들이기에 공부도 실용적으로 하는 것 같다. 그래서 가끔은 ‘저런 대단한 엔진을 만든 사람이 이런 기초적인 것도 몰랐나’ 하고 놀라기도 한다. 아마 이 책에서 말하는 자료구조들과 알고리즘들이 ‘이런 기초적인 것’에 해당할 것이다. 물론 기초적인 것이 필수적인 것이라고 해도 당장 필요하지 않다면 알 필요가 없다고 생각할 수도 있겠지만, 몰라서 필요가 없었던 것일 수도 있다. 어쨌든 그런 생각으로 자료구조와 알고리즘을 소홀히 했던 독자라면, 이 책을 잘 고른 것이다.
자료구조와 알고리즘은 상당히 고리타분한 주제일 수 있지만, 다행히 이 책은 그런 주제를 흥미진진하게 풀어나간다. 필자의 프로그래밍 경력이 그리 대단하지는 않은 점을 생각해 보면, 필자는 애초부터 글 쓰는 재주를 타고 난데다가 성실하고 사려 깊은 성품까지 가지고 있는 것 같다. 어쨌든 책 곳곳에서 독자에게 조금이라도 쉽고 편안하게 설명하려는 노력이 보이는데, 그런 노력이 졸역 때문에 한국의 독자에게 제대로 전달되지 않는 누를 끼치지는 않을까 두려운 마음이다.
이 책에서 특히 흥미로웠던 것은 설명하기가 비교적 어렵다고 알려져 있는 A* 길찾기였다. Extreme Programming의 네 가지 변수처럼, 어떠한 책의 주제, 분량, 난이도 세 가지는 서로 연결이 되어 있어서 세 가지 다 마음대로 선택하는 게 불가능한 것 같다. 천재가 아닌 한 어려운 주제를 짧게 쓰면 어려운 책이 될 수밖에 없고, 따라서 어려운 주제로 쉬운 책을 만들려면 길게 써야 한다. 어려운 주제를 길게 썼는데도 어려운 책이 되었다면 필자의 능력이 모자란 것이다. 어려운 주제를 제한된 분량 안에서 최대한 쉽게 쓰려고 노력하다 보니 저자 자신의 원래 의도와는 다르게 “쉬운 것만 쓴 책” 또는 “어려운 건 그냥 넘어간 책”이 된 경우도 종종 보았다. 반면 어려운 주제를 피하지 않고 대신 길게 써서 쉬워진 예가 바로 이 책이다. A*를 상당히 쉽게 설명하는데, 사실 A* 설명 자체가 대단히 뛰어나다기보다는 책 앞부분에서부터 A*에 필요한 자료구조와 알고리즘을 차근차근 밟아나갔기 때문이다. 어찌 보면 A*를 설명하기 위해 수많은 페이지들을 준비했던 게 아닌가 할 정도로...
칭찬이 길었는데, 한 가지 지적해 둘 것이 있다. 명령행 예제들을 보면 main 함수의 반환형이 void로 되어 있는데 이는 오류이다. main 함수의 반환형은 int이며 이는 C++ 표준에 정해져 있는 것이다. 뭐 사소한 사항이긴 하지만, C를 배운 후에 C++를 단편적으로만 익혔거나 또는 Microsoft 컴파일러만 사용해서 C++ 표준에 둔감한 사람들이 흔히 저지르는 실수이며 비슷한 상황의 독자들도 많을 것 같아서 언급해둔다. 그런 독자들에게는 반드시 C++ 자체를 본격적으로 공부해 보고, 또 C++ 표준을 좀 더 잘 지키는 컴파일러들도 한 번 접해보라고 권하고 싶다. 물론 이는 독자가 게임 개발에 사용하는 언어가 이 책이 사용한 언어와 마찬가지로 C++임을 전제로 하는 이야기인데, 아마 그 전제가 틀리지는 않을 것이다.
저자 서문