. 프로그래밍으로의 여행

나는 이 책을 걸어서 떠나는 여행에 비유하고 싶다. 여행이란 그 자체가 목적이지 도착지까지 가는 것이 최선의 목표가 아니다. 산길 들길을 돌아다니며 세상구경도 하고, 가다가 좋은 곳이 있으면 쉬었다 가기도 하고, 아주 마음에 들면 하룻밤을 지내고 갈 수도 있다. 서둘거나 조급해할 필요도 없다. 설사 최종 목적지까지 가지 못하고 되돌아 와도 그만인 그런 것이 바로 여행이다.

이 책의 목적은 편집기를 만드는 것이 아니며 독자들도 편집기가 필요해서 이 책을 읽고 있지는 않을 것이다. 인터넷을 조금만 검색해도 당장 쓸만한 편집기는 쉽게 구할 수 있는데 왜 굳이 시간들여 가며 편집기를 만들겠는가? 소프트웨어 공학의 직접적인 결과물은 소프트웨어가 아니라 프로그래머의 프로그래밍 능력이다. 이 책도 마찬가지로 편집기가 최종 결과물이 아니라 독자들에게 편집기를 제작하는 방법과 그 관련 이론을 조금이나마 소개하는 것이 궁극의 목적이다.

독자들이 지금 이 책을 읽고 있는 이유도 이런 목적과 부합할 것이다. 그 목적을 달성하기 위해서는 후다닥 책을 다 읽어 치우는 것보다는 쉬엄쉬엄이라도 실습해보는 것이 더 좋다. 시간이 없어서 다 읽지 못하는 한이 있더라도 항상 결과코드보다는 작성과정을 눈여겨 보고, 단 하나의 기능이라도 새겨보고 완전한 자기 것으로 만드는 것이 현명하다. 열심히 하고자 하는 의욕도 중요하지만 잘 안될 때는 조금 쉬어 갈 줄 아는 여유도 있었으면 좋겠다. 모든 것을 다 보면서 여행할 수 없듯이 반드시 다 알겠다고 욕심을 부리지 말자. 오늘 다 못 보면 내일 와서 볼 수도 있고 다음에 또 한번 더 와 볼 수도 있지 않겠는가?

나는 지금까지 많은 사람들로부터 프로그래밍에 관련된 메일을 받아 왔는데 그 중에 유독 기억에 남고 나에게 많은 고민을 안겨준 메일이 있었다. 중학교 2학년에 재학중인 한 학생으로부터 온 메일이었는데, 내용은 훌륭한 프로그래머가 되고 싶다는 것이었다. 세계 최고의 대작 게임을 만들어 보고 싶다는 것인데 그 각오가 참으로 대단했다.

전문화 시대에 학교 공부는 해서 뭐하겠느냐, 한 가지만 잘 하면 되지 않겠느냐, 나는 나의 길을 찾았다, 지금부터 스타크래프트 같은 대작을 만들기 위해 이 한 몸 바치겠다, 그러니 어떻게 하면 되는지 방법을 가르쳐 달라. 이것이 중학교 2학년의 어린 학생이 보낸 메일이다. 나는 이 메일을 받고 한 동안 고민한 결과 영어, 수학을 중심으로 열심히 공부하라는 답장을 보냈는데 아마 그 학생은 나를 무척 한심하다고 생각했을 것이다.

나는 그 학생의 마음을 이해하며 그 의지가 결코 장난이 아님을 잘 안다. 왜냐하면 나도 정확하게 같은 나이에 같은 동기로 입문했기 때문이다. 분명한 자기 주장과 굳은 의지를 가지는 것은 좋지만 패기와 무모함은 분명히 구별된다. 적어도 공부라는 것은 순서에 맞게 해 나가야 하며 절대적인 시간이 반드시 필요하다고 믿는다. 단기간에 너무 많은 것을 이루려고 하다가는 오히려 스스로에게 실망만 하게 될 것이다. 자신이 아인슈타인이나 율곡 이이 같은 천재가 아니라면 학문에 임하는 태도를 겸손히 하도록 하자.

이 책에서 다루는 내용은 읽어서 바로바로 이해가 될 정도로 쉽지 않다. 그러니 진도가 잘 안 나가더라도 조급하게 마음먹지 말고 천천히 읽기 바란다. 그러다 보면 하나 둘 알아 가는 기쁨에 신바람이 날 때도 분명히 있을 것이다. 여행을 하다 보면 힘든 오르막길을 만나기도 하는데 이럴 때는 나무그늘에서 한잠 자고 가자. 다시 배낭 메고 길을 가다 보면 반드시 내리막길을 만나게 될 것이다.