옮긴이의 글
굳이 머리말부터 읽으라고 부추기는 이유
- 이 책에 따른 교육 과정의 값어치는 수많은 곳에서 갖가지 방법으로 증명되고 있음.
- 치우친 경험에서 얻은 비뚤어진 잣댏 이 책의 값어치를 섣불리 재지 말라고 하는 것.
프로그램 짜기를 처음 배우는 이보다는, 흔히들 쓰는 언어로 프로그램을 한참 짜본 사람들 가운데서, 이 책의 가르침을 어긋나게 받아들이거나 우습게 넘겨 버리는 이가 많다.
적어도 이 책의 3장까지 차분히 읽어가면서 손수 코드도 쳐서 돌려보고 연습문제도 꾸준히 풀어보지 않으면, 이 책이 주는 값어치를 올바르게 가늠하기 어렵다고 생각한다.
추천사
여러 사회집단 그 누구나 프로그램을 짜고 따른다. 큰 문제들을 공략하다 보면, 잇달아 여러 가지 프로그램이 필요하다
이 프로그램들은 문제를 푸는 과정에서 새롭게 생겨난다.
프로그래밍 자체가 정신노동이라는 사실을 받아들이기 위해서는, 컴퓨터 프로그래밍을 해보는 수밖에 없다. 쉽게 말해서, 수많은 컴퓨터 프로그램을 읽기도 하고 짜보기도 해야 한다. 이때, 어떤 프로그램이 무엇에 대한 것인지 또는 무슨 문제를 풀려고 만든 것인지는 그리 중요하지 않다. 그보다는 그 프로그램이 맡은 일을 틀림없이 해내느냐, 더 큰 프로그램을 짤 때 다른 프로그램과 잘 어우러지느냐가 더 중요하다. 따라서 프로그램을 짜는 이는 흠 없이 돌아간느 프로그램, 엮어 쓰기에도 좋은 프로그램을 짜려고 애써야 한다.
Lisp 쓰는 이유
이 책에서는, Lisp에서 뻗어 나온 언어를 써서, 디지털 컴퓨터에서 수행되는 프로그램을 만들고 돌려보고 공부하는 데 초점을 두고, '프로그램'이라는 말을 쓰고 있다. 또한 Lisp를 쓰는 까닭은, 프로그램을 나타내는 표기법을 정한 것이지 , 결코 프로그래밍할 수 있는 것에 대한 어떤 제약이나 한계를 두려는 것은 아니다.
이 책에서는 주로 사람의 생각, 컴퓨터 프로그램, 컴퓨터라는 세 요소에 얽힌 주제를 다룬다. 모든 컴퓨터 프로그램은 실제 또는 정신적 프로세스를 본떠서 머릿속으로 다듬어낸 모형과도 같다. 그런 프로세스를 모두 빈틈없이 이해하기는 어렵다. 따라서 어떤 프로세스를 완벽히 본뜬 프로그램, 그래서 계속 고치지 않고 쓸 수 있는 프로그램은 있을 수 없다.
프로그램이란 제아무리 조심스럽게 갈고 다듬은 수많은 글자의 묶은들로 이루어져 있고, 서로 빈틈없이 맞물려 돌아가는 숨낳은 함수의 모자이크와 같다고 하더라도, 계속 진화할 수밖에 없는 까닭이 바로 그 때문이다. 다시 말해, 한 계산 방법이 여러 가지 다른 계산 방법을 만드는 과정에 쓰이면서 거의 안정된 제몫을 하게 될 때까지는, 그 계산 방법에 대한 이해가 조금씩 깊어지고 넓어지기 마련이며 쓰임새 또한 자꾸 늘기 때문에, 프로그램도 끝없이 다듬어지고 고쳐지게 된다. 컴퓨터로 프로그램을 짤 때 샘솟는 즐거움이라고 하면, 컴퓨터 프로그램으로 나타내려고 하는 메커니즘에 대하여 끝 없이 머릿속으로 펼쳐지는 생각, 터져 나오는 넓어지는 깨달음에 있다
컴퓨터는 우리가 꿈꾸던 것을 실제로 돌려보게 해준다.
그만큼 힘을 지닌 만큼, 컴퓨터는 일을 할 때 무척 까다롭게 군다. 프로그램에는 틀린 곳이 한 군데도 없어야 한다. 컴퓨터에 시킬 일이 있으면 그 뜻이 한 치도 어긋나지 않도록 하나하나 밝혀 적어야 한다. 글자를 다루는 다른 모든 일과 마찬가지로, 한 프로그램의 옳고 그름 또한 논증을 거쳐 밝혀낼 수 있다.
큰 프로그램의 옳고 그름을, 완벽히 틀을 갖춘 논증을 거쳐서 밝혀내는 경우는 찾아보기 어렵다. 그러므로 그런 방법을 쓰기보다는, 작은 프로그램이 모여 큰 프로그램을 이룬다는 생각에서 믿고 쓸 수 있는 프로그램 구조물들, 이른바 숙어들을 모아 표준을 마련하고, 프로그램의 뼈대를 구성하는 기술 가운데 값어치 있는 것들을 가려서, 작은 구조물을 엮어 더 큰 구조물을 만들 때 그런 기술을 어떻게 잘 쓸지 익히는 편이 낫다.
이 책에서는 그런 기술을 많이 다루는데, 프로그래밍이라고 하는 프로메테우스의 과업에 뛰어들기 위해선느 그런 기술을 잘 이해하는 것이 아주 중요하다. 다른 무엇보다 프로그램의 뼈대를 구성하는 기술을 찾아 익히는 것이야말로, 크고 묵직한 프로그램을 짜는 힘을 기르는 데 가장 큰 보탬이 된다.
커다란 프로그램을 짜는 것은 아주 힘든 일이기에, 큰 프로그램을 이루는 수많은 함수와 자잘한 일거리를 줄일 수 있도록 새로운 기술을 만들어 내는 일도 게을리 해서는 안 된다.
....책을 더 읽어보자...