2008. 1. 11.

SICP에서 알짜배기가 되는 가르침

책을 읽어서 얻고자 하는 것, 얻을 수 있는 것, 얻게 된 것은 사람마다 다 다르다. 하지만 나는 감히 말한다. SICP란 책의 알짜배기는 다름 아닌 아랫 구절에 있다는 것.

The technology for coping with large-scale computer systems merges with the technology for building new computer languages, and computer science itself becomes no more (and no less) than the discipline of constructing appropriate descriptive languages.

커다란 컴퓨터 시스템을 다루는 기술이 새로운 컴퓨터 언어(셈말)를 만드는 기술과 하나로 묶이면, 컴퓨터 과학에서 하는 일이란 넘침도 모자람도 없이 그저 그에 알맞은 말을 만들어 내는 기법을 다루는 일에 지나지 않는다.


그리고 이 책은 첫머리서부터 이렇게 말하며 시작한다.

Every powerful language has three mechanisms for accomplishing this:

- primitive expressions, which represent the simplest entities the language is concerned with,
- means of combination, by which compound elements are built from simpler ones, and
- means of abstraction, by which compound elements can be named and manipulated as units.


간추리자면, 프로그램을 짠다는 것은 한 분야에 지식을 담을 컴퓨터 언어를 만드는 일과 같고, 좋은 컴퓨터 언어를 만드는 일은 그 언어가 갖추어야 할 세 가지 것을 잘 그려내는 데 있다. 해서, 이 책은 처음부터 끝가지 오로지 하나, 새로운 컴퓨터 언어, 셈말 만드는 일을 한다.

첫 절에서는, 언어 만들기에서 가장 큰 일을 하는 움직씨(동사)만드는 일을 한다. 프로시저가 바로 움직씨다.
그 다음 절부터는 곧바로 언어를 만든다. 유리수 셈말, 복소수 셈말, 구간치 셈말, 다항식 셈말, 글자 미분식 셈말, 스택 셈말, 큐 셈말, 표 셈말, 같기식(equation) 셈말, 전자 회로 셈말...

또한 여러 셈말을 모아서 하나의 셈말로 엮어내는 연습도 한다. 보통 Generic Programming이라고들 하지. 낱말, 쓰임새, 생김새가 서로 다른 셈말을 한 셈말로 어우러지게 하려면 어찌 해야 좋을지를 가르친다. 더욱이, 말이란게 어디 가만히 있나, 자꾸 자꾸 바뀌고 늘어나게 마련이지. 그러려면 솜씨 좋은 옛 말쟁이들이 어떻게 좋을 말을 만들어 냈는지 마땅히 익히고 배워야 할 일이지.

이어서는 같은 말이라도 어떻게 하면 더 맛갈지고 쌈박하고 쉽고 또렷하게 뜻을 나타낼 수 있는지를 가르친다. 해서, 빨리 셈하는 법, 미루었다 셈하는 법, 제 때 셈하는 법, 논리에 따라 셈하는 법 따위를 가르친다. 이는 사람이 제 뜻을 펴기에 더 좋은 셈말을 어떻게 만드느냐를 다루는 대목이다.

다음에는, 컴퓨터가 새로 만든 말을 어떻게 떠 빠르고 쉽게 알아듣게 만들런지 가르친다. 그래서 만드는 것이, 셈말(Computer Language)을 틀말(Machine Language)로 알아서 바꿔주는 가짜 틀(Virtual Machine)이다.

따라서, 난 이 책을 읽고도 이를 깨닫지 못한다면 헛 공부했다고 본다. 한 술 더떠, 좋은 프로그램 짜는 일이 좋은 셈말 짜는 일이랑 같은 것임을 모르는 이는, 소프트웨어 설계를 가르칠 자격이 없다고 본다.

다시 말하건데, 프로그램 짠다는 것은 한 분야의 지식을 제대로 틀림없이 멋드러지게 나타낼 수 잇는 셈말을 만드는 일이다. 그게 다다. 그래서 이 책은 오로지 그 일을 잘하는 방법을 익히도록 꾸며져 있다. 나머지 모든 겉멋든 이름, 무엇보다 이 분야가 지나친 감이 있는데, 어쨌거나 번쩍거리는 이름이 잔뜩 붙어 있는 기술들은 다 여기서 갈라져 나온 것일 따름이다. 이 책의 가르침을 또렷이 깨우친 다음에, 그 사이 배웠던 모든 것을 그에 비추어 돌이켜 보라. 어디가 뿌리이고 어디가 가지인지가 시원하게 보일터다.

하면, 그리 쉬운 것을 왜 이 책에서는 이렇게 길고 어렵게 풀이하고 있을까? 프로그램 짜는 일이, 새로운 셈말을 만드는 일과 같다고 말했다. 말과 글이란 아는 것을 나타내는 틀이다. 거꾸로 말해, 먼저 뭘 제대로 알고 있어야, 비로소 그 아는 것을 나타내는 틀 또한 만들 수 있다. 알지 못하는 것은 못 나타낸다. 영어로는 이를 Domain Knowledge라고 하지. 아니, 적어도 나타낼 것이 참말 무엇인지를 잘 아는 사람이 옆에 붙어는 있어야 한다. 영어로는 이를 Domain Expert라고 하지. 따라서 좋은 셈말 아니, 좋은 프로그램 짜는 일을 가르치려면 마땅히 말로 나타내야할 곧 아는 것이 있어야 하고, 그 아는 것, 나타내야 할 것, 더 잘 나타내는 방법이란 얼마든지 많기에 이 또한 배워야 한다. 이를 배우는 방법이란 딱 하나, 남의 것이든 내 것이든, 아는 것을 가져다 이를 나타내기에 알맞은 셈말을 끝없이 만들어 보는 길 말고는 없다.

내 말이 잘 와닿지 않으면, 우리가 배운 엉터리 영어 교육을 떠올려 보라. 왜 우리는 그토록 죽어라 영어 공부를 하고서도 제 바람 만큼, 품들인 만큼, 돈들인 만큼 말도 썩 잘하지 못하고 글도 잘 못쓰는가? 영어 또한 속에 품은 뜻을 나타내려고 사람들이 만들어낸 말이다. 또 말하건데, 아는 것을 나타내려고 만들어낸 틀이 바로 말이다. 따라서 아는 걸 나타내는 연습을 해야함에도, 우리는 미친듯이 멍청하게 영어 그 스스로를 파헤쳤다. 우리가 배우고 익혀야 할 것은, 영어를 더 좋은 말로 다듬고 고치는 기술이 아니라, 영어를 써서 내가 아는 것, 밝혀 낸 것을, 되는 한 또렷이 제대로 재미있게 살아있게 나타내는 좋은 버릇을 들이는데 있다. 한데, 우리는 영어로 말하는 공부를 한 적이 없다! 그래서 영어를 못하는 것이다.

한 편, 영어를 잘 한다고 치자. 그런데 뭐 아는 게 있어야 말을 하지! 영어를 잘 알면, 갑가기 조지 부시 대통령과 이라크 문제에 대해 막힘없이 말싸움을 할 만치 똑똑해 지는가? 우리네 먹을 거리에 대해서 아무 것도 모르던 사람이, 갑가지 오프라 윈프리 쇼에 나가서 술술 그런 얘기 보따리를 풀어 낼 수 있단 말? 그러니까, 영어만 알면?

좀 달리 말해 보랴? 피아노 건반에서 도레미파솔라시도를 알고, 딱 듣기만 해도 어떤 소리인지를 잡아내는 귀가 있다고 해서, 갑자기 교향곡을 지어낼 수 있는가? 그 것도 사람들을 기뻐하게, 눈물짓게, 방방뛰게 만들 만치, 뛰어난 가락으로?

이제부터 우리 좀 말이 되는 얘기를 하고 살자.

프로그램 짜기도 이와 같다. 프로그램 잘 짜려면, 프로그램 짜는데 쓰는 말을 배우는데 들이는 품을 되는한 줄이고, 그 말로 다른 새끼 말(Embedded Language, 길게 쓰자면 Domain-Specific Embedded Language) 만드는 연습을 죽으라고 해야한다. 그래서 이 책에서는 그토록 많이 알아야 할 것이 나오는 것이다. 새끼 말 만드는 연습을 하려면, 그 말로 나타낼 거리(Domain Knowledge)가 마땅히 있어야 하니, 어쩔 수 없는 일 아닌가! 어떻게 나타낼 거리가 무엇인지를 알지 못한 채로, 말 만드는 힘을 기를 수 있는가? 말 만드는 힘을 기르는데, 그 밖에 도데체 무슨 더 나은 길이 있는가?

요사이 Software Engineering에서는 Domain-Specific Modeling이니 Domain-Specific Language니 하는 말이 숱하게 나온다. 감이 오는가? 이 책은 아주 오래 전에, 곰팡내 날만큼 아주 아주 오래 전에 지겨워 쓰러질 정도로, 한 치도 틀림없이 똑 같은 얘기를 줄기차게 하고 있었다.

2007. 3. 21.

SICP 번역서에 처음 썼던 "옮긴이 머릿글"

옮긴이의 글 (SICP)

딸린 이름: 이 책을 읽는 분들에게 드리는 편지

여러분은 운이 좋습니다. 정답으로 가는 길을 바로 찾았기 때문입니다. 세상에는 이런 책이 있는지도 모르고 사는 사람도 많은데 어쩌다가 여러분은 정말 좋은 스승을 만난 턱입니다. 그나저나 어떻게 이 책을 알게 되신 거지요? 여태 제가 겪은 바로는 어쩌다가 이 책으로 공부할 기회를 얻기가 그리 흔치는 않기에 드리는 말씀입니다. 이 책에 담긴 교육 과정은 한 때 세계 300여 대학에서, 지금도 100여개 넘는 이름난 대학에서 가르치고 있을 만치, 세계 최고 수준의 프로그래밍 교육이라 일컫기에 조금도 모자람이 없습니다만, 아직도 우리 나라 안에서는 이 책의 값어치가 생각만큼 그리 널리 알려지지는 않은 듯 싶습니다. 어쩌면 이제서야 우리말로 옮겨쓴 책이 나왔다는 것이, 그런 사실을 뒷받침하는게 아닐까 합니다. 안타까운 일입니다.

다시 여쭙건대, 혹시 여러분의 스승이 이 책으로 가르치거나 이 책을 권했습니까? 그렇다면 여러분은 정말 좋은 스승을 만났습니다. 마땅히 고마워 해야 일입니다. 그게 아니라, 스스로 더 좋은 가르침을 찾다가 이 책을 알게 되었다면 여러분은 보기 드물게 슬기로운 사람입니다. 놀랍습니다.

제 경우엔 오로지 운이 좋았을 뿐입니다. 그저 좋은 스승을 만난 덕분에 얻게된 복이었습니다. 그런 까닭에서, 지금부터 이 책에 얽인 저의 옛 이야기를 미주알 고주알 들려드리고 싶습니다. 소중한 추억을 누군가에게 도란 도란 얘기한다는 것은 그 추억을 곱씹는 만큼이나 즐거운 일이기 때문이기도 하거니와, 제가 이 책으로 얻게된 깨우침과 즐거움 속으로 천천히 여러분을 꼬드기기에 그 보다 더 좋은 방법이 없을 거라 생각하기 때문입니다. 어쩌면 첫 발을 내디디는 분에게는 제 어리숙했던 시절의 얘기가 자그만 도움이 될런지도 모를 일이니까요.

그러니까 아마도 그 때가 1990년, 군대를 갔다와서 3학년 1학기였다고 기억하는데, 저는 그 때 제 스승님 덕분에 이 책을 처음으로 보게 되었습니다. 그 즈음, 제가 다니던 대학에서는 1학년들에게 처음으로 이 책으로 프로그램 짜기를 가르치기 시작했습니다. 그 전까지는 그 당시 여느 대학 교과 과정들이 다 그렇듯이 FORTRAN, PASCAL, COBOL 같은 언어를 한 학기 씩 교양이나 전공 기초로 가르쳤습니다. 요새 C++, Java, Python 같은 언어를 가르치는 것이나 마찬가지죠. 컴퓨터 기술을 전공하지 않는 과들은, 더 이상 프로그램 언어를 배우지 않고, 응용 프로그램 쓰는 법을 배우게 되었습니다만, 가르침의 목적이 별 다를 바 없는 것 같습니다. 그 때도 언어는 다 달랐지만 모두 하나 같이 재미가 없을 뿐더러 아무 짝에 쓸모도 없었습니다. 말하자면, 프로그램 짜는 힘을 기르거나, 더 나아가서 문제 푸는 힘을 기르는데 아무런 보탬이 되지 않았습니다. 언어의 문법을 가르친답시고 시간을 질질 끌다가, 끝내는 구구단 프로그램이나 짜면서 한 학기 과정을 헛되이 보냈습니다. 너무 실망한 나머지 대학이란 곳을 왜 들어왔을까 후회를 하기도 했습니다. 다른 교양 과목, 이를 테면 현대 물리학이나 역학과 견주어 보아도, 왜 프로그램 짜기를 가르치는 교과만 이렇게 깊이가 없는 것인지 도저히 받아들이기 어려웠습니다. 그래서 더욱 불만스러웠던 것 같습니다. 끝내, 저는 동료들 사이에 끼어서 C 프로그램 언어를 배우기 시작하였습니다. 한 1년 정도를 열심히 공부하고 1학년을 마칠 즈음에는 성적 처리 프로그램이나 간단한 주소록 관리 프로그램을 짤 수 있을 정도가 되었습니다. 몇 몇은 만족스러운 듯 했지만, 저를 비롯한 몇 사람은 그렇지 못했습니다. 그 때 스스로에게 되물었습니다. '프로그램을 잘 짜려고 프로그램 짜는 말을 배우는 것인데, 한 해 동안 배우고 익힌 말솜씨가 겨우 이 정도라니.'

사실, 저는 중학교를 졸업하여 고등학교에 들어가기 전, 겨울 방학 기간부터, 어머니가 권해서 프로그램 짜기를 배우기 시작했습니다. 살림 살이가 어려웠는데도, 예능 고등학교를 가지 못하게 하여 그림 쟁이가 되겠다는 꿈을 접게 만든 대신에, 마음을 딴데 두라고 컴퓨터 학원비를 대 주셨기 때문입니다. 다행히 프로그램 짜기는 재미있었고, 실력도 쑥쑥 늘었습니다. 고등학교 때부터는 남몰래 프로그램을 짜서 몇 푼 안되는 용돈 벌이를 하기도 하였습니다. 따라서 제가 컴퓨터 관련 학과를 선택한 것은 자연스러운 일이었습니다. 한데, 기대했던 대학에서는 배우고 싶은 것을 가르쳐 주지 않았습니다. 프로그램 잘 짜는 법을 배우고 싶었는데, 프로그램 언어만 죽어라 가르쳐 주었습니다. 그렇게 공들여 배운 언어로 짤 수 있는 프로그램이란 것이 고등학교 시절 혼자서 만들어 보았던 프로그램들보다 쓸모도 없고 짜임새도 없었습니다. 마치 영어를 십 몇년 간 공부하고서 말 한 마디 제대로 못하는 것이나 다를 바 없었습니다. 끝내 쌓이고 쌓였던 실망을 잠시 뒤로 젖히고, 어려운 살림 살이에 대학이란 곳을 계속 다녀야 할런지 스스로에게 되묻는 시간을 가져야만 했습니다. 그리고 군대를 갔습니다. 그 앞 뒤로 또 한 해 정도를 헤매었던 것 같습니다. 몇 년이 지나 복학을 한 다음에 아주 우연한 기회에, 저는 소프트웨어 기술자로서 제 삶에 처음으로 커다란 충격을 준 일을 겪게 되었습니다.

아마도 그 곳은 좀 낡은 공과대학 전산실이었던 것 같습니다. 할 일 없이 그 언저리를 어슬렁 거리다가 어떤 사람이 퍼스널 컴퓨터에서 Pascal로 프로그램 짜는 모습을 지켜보게 되었습니다. 그 사람의 차림새를 보아하니 같은 과 선배이거나 교육 조교 같아 보였습니다. 잘닥만한 사람이 독수리 마냥 양 손의 세 손가락만 써서 남다른 빠르기로 Pascal 코드를 순식간에 쳐내려 가는 모습도 인상 깊었지만, 그 보다 더 놀라운 것은 화면에 가득찬 코드의 짜임새였습니다. 그 코드는 그 전까지 제 스스로 짜보거나, 이런 저런 책에 보기로 실려있던 그런 코드가 아니었습니다. 변수 이름을 짓는 방법에서부터 프로시저를 만들어 쓰는 방법, 여러 데이터 구조를 엮어서 한 줄 한 줄 써내려 가는 코드가 말할 수 없는 어떤 틀을 갖추고 있었습니다. '어, Pascal이 이런 언어였나?' 그 사람이 쓰는 언어는 제가 알던 Pascal 언어가 아니었습니다. 저는 군대를 핑계로 한 두해를 쉬면서 그 때 한참 인기가 있던 Pascal, C 언어로 적고 큰 프로그램을 수도 없이 짜보았기 때문에 '문제만 내라, 모두 풀어주마'라고 할만치 자신감이 붙어있었습니다. 하지만, 그런 자신감은 한 화면에 가득찬 코드 한 쪽, 아니 그 사람이 갈겨 쓴 코드 한 줄만으로 우루루 무너져 내렸습니다. 제가 잘 모르는 언어였다면 그렇게 큰 인상을 받지 못했을 것입니다. 아마 제 삶에서 그냥 짠 프로그램이 아니라, '참 잘 짠' 프로그램이란 것을 그 때 처음 보았던 것 같습니다. 잔재주를 부리지 않고, 써야할 것을 마땅히 써야할 자리에 딱 들어맞게 썼으며, 그러면서도 되풀이 되거나 군더더기 한 점 없이 날씬하고 가지런한 프로그램. 제가 배우고 싶었던 것이 바로 그런 짜임새였는데 그제서야 눈앞에서 그게 무엇인지를 볼 수 있게 된 것입니다. 가슴이 벅찼습니다. 그리고 갑자기 그 작고 수수해 보이던 사람이 엄청나게 크고 거룩해 보이기까지 했습니다. 곧바로 무언가를 가르쳐 달라고 매달려 보고 싶은 마음이 굴뚝같았지만, 말을 붙여보기가 두려워서 어쩌지를 못했습니다. 풍선에서 바람이 쏴아 하고 갑자기 빠져나간 듯이, 제가 아주 작고 초라하게 느껴졌기 때문입니다. 여전히 만족스럽지 못한, 그러나 열심히 전공 과목에 매달렸던 2학년을 그러 저럭 보낸 다음에, 3학년 전공 과목에서 그 사람을 다시 만나게 되었습니다. 그 사람은 선배가 아니라 제가 군대를 간 사이에 오신 새 교수님이었습니다. 운이 좋다고 생각했습니다. 굳은 마음을 먹고 찾아가서 배우지 않아도, 많은 사람 속에 섞여서 베푸시는 가르침을 얼마든지 주워 담을 수 있게 되었기 때문입니다. 그 분은 거의 일주일에 하나 씩 새로운 언어를 보여주면서 그 언어에 잘 들어맞는 문제와 풀이법을 가르쳐 주었습니다. 그 때 교재가, Samuel Kamin의 쓴 Programming Languages: An Interpreter-based Approach란 책이었습니다. 이 책도 정말 잘 쓴 책입니다. 혹시 기회가 닿거든 꼭 한 번 보세요. 정신 없이 즐거운 한 학기를 보내는 가운데, 그 분이 신입생에게 남다른 방식으로 프로그램 짜기를 가르친다는 얘기를 들었습니다. 솔직히 털어놓자면, 1학년 몇 명과 같은 과 선후배들이 새로운 교과에 대한 불만을 서로 털어놓고 있을 때, 옆 자리에서 아주 우연히 듣게되어 알게 된 것입니다. 너무 어려운 것은 둘째치고, 듣도 보도 못한 이상한 언어를 쓴다고 투덜대고 있었죠. 저는 뒤돌아 볼 것없이 그 교과를 자유 선택으로 들었습니다. 저는 참말 운 좋은 사람이었습니다. 그 교과에서 쓰던 교재가 바로 이 책, SICP(씩~피) 였으니까요.

사실, 이 책의 가르침을 처음부터 다 받아들이지는 못했습니다. 그 전에 보던 수많은 가르침과는 여러 가지로 너무 달랐으니까요. 책 속에서 쓰는 언어도 못보던 것이었고, 이야기를 풀어가는 방법, 가르침을 전하는 방법까지 어떤 것도 제가 알고 있던 것 같지 않았습니다. 지금까지 다르지만 엇비슷한 언어로 프로그램 짜는 연습을 오랫동안 해온 탓인지, 몸과 머리에 배여있던 버릇을 걷어내기가 쉽지 않았습니다. 그래서 배우는 가운데에도 계속 이 책을 보아야 하나 말아야 하나 머뭇거리느라 헛되이 시간을 보낸 것 같습니다. 돌이켜보면 그런 어줍쟎은 의심 없이 곧바로 이 책의 가르침을 따랐더라면 몇 해에 이르는 시간을 아낄 수 있었으리라 생각합니다. 부탁드리건대, 여러분은 저처럼 머뭇거리지 마세요. 늦으면 늦을 수록 그만큼 손해봅니다. 이 책의 값어치는 이 책의 가르침을 깡그리 받아들여 제 것으로 만든 다음에나 할 일입니다.

이 책에는, 왜 프로그램 짜기를 배우려는지, 지금 하는 일이 어떤 것인지에 관계없이, 프로그램 짜는 법을 배우고자 하는 이라면 모두가 반드시 밟아야 할 가르침이 넘치도록 담겨있습니다. 그 뒤로 가르침의 목적이 같은 수많은 책을 보았음에도, 프로그램 짜기에 관하여 이 책의 가르침을 맞바꿀 만한 것을 아직도 찾아내지 못했습니다.

여러분이 얼마나 운좋고 슬기로운 사람인지 아시고 싶다면, 맨 먼저 이 책의 머릿말을 한 편도 빼놓지 말고 모두 읽어 주십시오. 이 책에 대하여, 제가 하고픈 말들은 머릿말 속에 다 들어있기때문에 따로 보탤 말이 없습니다. 덧붙여 이 책이 얼마나 좋은 책인지를 따로 주절거릴 까닭조차 없지 싶습니다. 그런 이야기를 꺼낸다는게 되려 어색할 만치, 이 책에 따른 교육 과정의 값어치는 수많은 곳에서 갖가지 방법으로 증명되고 있기때문입니다. 또 한 가지, 이 책의 내용을 들추어 보시기 전에, 굳이 꼭 이 책의 머릿말부터 읽으시라고 하는 부추기는 까닭은, 저나 다른 사람들이 그랬던 것처럼, 치우친 경험에서 얻은 비뚤어진 잣대로 이 책의 값어치를 섣불리 재지 마시라는 뜻에서 드리는 말씀입니다. 제 경험으론, 이 책에 담긴 가르침이 보기 드물게 깊고도 넒은 만큼, 읽는 사람들의 오해도 컸습니다. 프로그램 짜기를 처음 배우는 이보다는, 흔히들 쓰는 언어로 프로그램 한 참 짜본 사람들 가운데서, 이 책의 가르침을 어긋나게 받아들이거나 우습게 넘겨버리는 이가 훨씬 많았습니다. 제 생각엔, 적어도 이 책의 3장까지를 차분히 읽어가면서 손수 코드도 쳐서 돌려보고 연습문제도 꾸준히 풀어보지 않으면, 이 책이 주는 값어치를 올바르게 가늠하기 어렵다고 생각합니다. 그러니, 그 전까지는 판단을 미루세요. 그러는 편이 슬기롭습니다.

그 값어치가 남다른 책이니 만큼, 우리말로 이 책을 옮겨쓰기까지는 여러 가지 일들이 많았습니다. 이 분야의 많은 기술 서적이 그러하듯이, 그냥 흘러가는 프로그래밍 기술이나 지식을 다루는 책이었다면, 옮겨적은데 이렇게 오랜 시간이 걸리지 않았을 것이라 봅니다. 더욱이, 내용은 견줄데 없이 깊고도 넓습니다만, 이 분야에 첫 발을 들이는 사람들이 보라고 쓴 책이라 그런지, 글 만큼은 되는한 누구나 쉽게 읽고 받아들일 수 있도록 적으려 애쓴 흔적이 또렷하였습니다. 그런 까닭에, 이런 글을 어려운 우리말로 옮겨쓰면 안되겠구나, 내용이 아니라 말이 어려워서 값진 지식을 멀리하지 않도록 해야겠다 싶어, 제가 맨처음 공부하던 시절을 떠올리면서 조금이라도 더 받아들이기 쉬운 말과 말투를 찾아헤매느라 많은 시간을 보냈습니다. 그게 이 책이 겨냥하고 있는 사람과 가르침에 맞는 일이라고 생각했기 때문입니다.

하지만, 잘 아시다시피, 이런 전문 서적을 옮겨쓰는 일에서는, 편하고 쉬운 말을 쓰기가 훨씬 더 어렵습니다. 옛날 우리 학자들은 수천년 동안 오로지 한자말로 지식을 정리하였고, 한글을 많이 쓰게 된 지금에 이르러서도 말소리만 한글로 적을 뿐이지 거의 모든 학문과 기술을 딴 나라말로 쌓아올리고 있기때문에 쉬운 우리말로된 학술 낱말을 찾아보기가 훨씬 더 힘듭니다. 더구나, 애써 쉬운 말을 가려쓴다고 하여 모두가 이를 반기는 것도 아닙니다. 도리어 학술어를 우리말로 써놓으면 웃음거리가 되기까지 합니다. 저부터도 그렇지만, 오래전부터 우리 머릿속에는 틀을 갖추고 써야할 글을 우리말로 쓰면 깊이가 떨어진다는 생각이 깊이 박혀 있는 듯 합니다. 이를 안타까워하면서, 벌써부터 여러 분야에서는 뜻있는 분들이 모여 전문 학술어를 쉬운 말로 옮겨쓰려 애쓴 적이 여러 차례 있었습니다. 하지만, 딴 나라 말이 아니면 옮겨쓰기가 마땅치 않은 경우도 더러 있고, 운좋게 쉽고 알맞은 말을 찾아냈다고 하더라도 입과 귀에 젖어든 외국말버릇을 고쳐서 바로잡기에는 벌써 늦어버린 경우가 적지 않습니다. 한술 더떠 어떤 이들은 중국말로 쓴 글이 우리말로 쓴 글보다 훨씬 뜻을 알아듣기 쉽다고까지 합니다. 놀랍게도 공부를 많이 한 사람할 수록 그런 경우가 훨씬 더 많습니다. 이런 마당에 이 책을 쉬운 말로 옮겨 쓰겠다는 것은 또 다시 어리석은 일을 벌이는 것일지도 모를 일입니다만, 이 책 만큼은 수많은 뜻있는 분들의 앞선 노력을 담아내고 싶어서 큰 용기를 내어 보았습니다. 그런 까닭에 이 책에서 쓰는 낱말 가운데는 여러분의 입과 귀에 거슬리는 것들이 있을 것이 더러 있을 것이라 생각합니다. 그럴 때는 맨 처음 이 분야에 들어왔을 때를 돌이켜 보시면서 넓고 열린 마음으로 이 책에 쏟아 부은 많은 사람들의 노력을 아리땁게 받아주셨으면 합니다. 마땅히, 너무 지나치지 않도록 여러 사람의 도움을 받아 다듬고 또 다듬기는 했습니다만, 모자란 재주로 좋은 낱말과 글월을 지어내려니 수년 세월도 짧게만 느껴졌습니다. 무엇보다도 낱말을 다듬는데 지나치게 마음을 쓰느라, 정작 중요한 읽기 쉬운 글월을 짜는데 손이 덜 간 것이 아쉽습니다.

오랜 시간이 흐른 만큼, 이 책을 옮겨쓰는 데는 그 동안 정말 많은 분들의 도움이 있었습니다. 그 가운데, 저의 충실한 제자, 김수정 선생이 가장 애썼습니다. 지난 수년간 갈겨 쓰다시피한 제 글을, 처음 배우는 사람의 눈높이에서 토씨 하나 하나 다듬고 고쳐 주었으며, 마지막 낱말 찾기표를 만드는 번거로운 일까지 기꺼이 도맡아 주었습니다. 한편, 이 책의 교과과정을 바탕삼아 동명대학교 신입생들을 위한 새로운 교육 체계를 설계하는 동안, 임성신 교수를 비롯한 동료들이 같가지 번거롭고 힘든 일들을 대신해 주고, 또한 가르치면서 얻은 경험을 들려준 덕택에, 글을 고쳐쓰는데 시간과 지혜, 모두 면에서 큰 도움이 되었습니다. 아울러, 같은 연구실 후배, 곽종섭 군과 장학상 군은 이 책으로 프로그램 짜기를 다시 공부하면서 글을 옮겨쓰는데 보탬이 될만한 많은 의견을 주었습니다. 특히, 장학상 군은, 제가 짜야할 그 많은 프로그램을 대신 짜주어서, 이 일을 좀더 여유롭게 할 수 있도록 도와주었습니다. 아차, 제 아내에게도 고맙다고 해야겠습니다. (안 그러면 큰 일 납니다.) 이 일을 맡은 뒤, 제 첫 아들 녀석이 태어나 하루 종일 애보기에 시달리면서도, 제가 여러 가지 일을 한꺼번에 처리할 수 있도록 힘도 북돋워주고 신경을 덜 쓸 수 있도록 세심한 배려를 해주었습니다.

이 책의 감수를 맡아주신 서울대학교 이광근 교수님께 큰 고마움을 드려야 합니다. 이 분야에서 비슷한 일을 하는 사람을 찾기는 쉽지만, 뜻이 같은 사람, 무엇보다 왜 쉽고 또렷한 우리말로 전문 용어를 만들어 써야 하는지에 대해, 숨결이 같은 사람을 만나기는 어렵습니다. 이런 분이 계셔서, 이 책의 처음부터 끝가지를 꼼꼼하게 따져 살펴주신 것은, 저 뿐 아니라 모두에게 큰 복입니다. 이와 더불어, 출판사 처지로 보면 무려 5년 넘는 세월이 흐른 일인데도, 큰 손해를 보면서까지, 참을성 있게 일이 끝나기를 기다려주시고, 제 고집을 슬기롭게 받아주셨던, 인사이트 출판사의 한기성 사장님, 끝까지 어색한 말투를 토씨 하나까지 살펴서 저와 얘기를 나누어가며 글을 고쳐주셨던, 같은 출판사의 문형숙 씨에게도 깊이 고마움을 드리고 싶습니다. 솔직히, 저 같으면 벌써 딴 사람에게 이 일을 넘겼을 겁니다.

그리고 그 누구보다도, 제 스승님에게 고마움을 드리고 싶습니다. 제가 이런 책을 만나게 된 것, 뛰어난 가르침을 받을 수 있었던 것, 그리고 지금 먹고 사는데 바탕이 된 그 모든 지식, 기술, 경험은 오로지 스승님 덕분입니다. 언제고 프로그램 짜는 즐거움과 아리따운 코드에 대하여 다시 도란 도란 얘기 나눌 때가 오기를 진심으로 바랍니다.

끝으로, 아직 덜 다듬은 책인데도, 이 책을 사서 읽어주시는 여러분께도 고마움을 드립니다. 몇 년 더 잡고 있었다면 훨씬 좋은 책이 나왔을런지 모릅니다만, 제 모자란 글 재주를 믿고 묵혀두기에는, 이 책의 값어치가 너무 큽니다. 그런 까닭에 지금 모습으로라도 이 책을 펴내기로 하였습니다 어찌되었든, 이 책은 널리 퍼져야 합니다. 제가 옮겨쓴 글이 미우시다면, 웹에 공개되어 있는 원서라도 찾아서 꼭 읽어 주십시오. 여러분 스스로 좋은 스승이 되어 한 사람이라도 더, 이 책으로 프로그램 짜기를 공부할 수 있도록 널리 알려주시고 이끌어 주세요. 그래야 우리 소프트웨어 기술 수준이 껑충 뛰어오를 수 있습니다.

여기까지 제 앞뒤없는 글을 읽어주셔서 고맙습니다. 그럼 또 다음에 뵙겠습니다.

2007년 1월이 끝나갈 무렵, 부산 대연동 연구실에서.

김재우