02장. 이 책은 나에게 적합할까?
독자의 배경, 관심사, 경험에 따라 이 책에서 제공하는 정보를 가장 효과적으로 활용하려면 특정 순서로 내용을 따라가는 것이 좋습니다. 대부분의 독자는 다음과 같은 카테고리 중 하나에 해당한다고 생각합니다: 전문 프로그래머, 학생, 취미로, 예전에 Lisp를 접해 본 사람, 또는 단순히 호기심 많은 사람. 어떤 카테고리에 해당하든, 이 책을 읽음으로써 얻을 수 있는 것에 대해 설명했습니다. 책을 읽어나가면서 원래의 카테고리에 더 이상 해당하지 않는다고 판단할 수도 있습니다. 뭐 괜찮습니다. 각 장마다 강한 의존 관계가 없기 때문입니다. 특정 개념에서 막혔을 경우, 상세 목차를 통해 필요한 정보를 쉽게 찾을 수 있을 것입니다.
전문 프로그래머
이 책은 양질의 Lisp 프로그램을 작성하고, 학술지, 잡지, 또는 다른 사람의 Lisp 코드를 읽을 수 있도록 Lisp에 대해 반드시 알아야 할 내용을 알려줍니다. 그 외에도, 다른 언어를 사용할 때 접해 보지 못했을 수 있는 중요한 개념들을 소개하며, 익숙한 개념에 대한 Lisp의 접근 방식이 기존 아이디어에 대해 새로운 시각을 제공해 줄 수도 있습니다. 비록 직장에서 Lisp을 사용할 기회가 없다 하더라도, 이 책에서 배운 개념은 가장 선호하는 언어로 어려운 문제를 해결하는 데 도움이 되는 새로운 통찰력을 줄 수 있습니다.
기본기를 확실히 하려면 6장까지 빠르게 훑어보는 것이 좋습니다. 그 후, 7장부터 9장, 11장부터 15장, 17장부터 21장, 23장, 그리고 24장으로 넘어가 관심 있는 내용을 더 자세히 살펴보시길 권장합니다. 이 장들은 Lisp 언어에 고유하거나 Lisp 언어로 가장 잘 표현되는 개념들을 다룹니다.
그 무엇보다도, 저는 Lisp 프로그램 개발의 동적(dynamic)인 특성을 강조하고 싶습니다. 보통의 편집(edit), 컴파일(compile), 링크(link), 디버깅(debug) 사이클에 익숙하거나(또는 이미 체념한) 사람에게 Lisp은 종종 놀라운 경험으로 다가옵니다. 가장 큰 변화는 파일 단위 컴파일이 아닌 함수 단위 컴파일입니다. 심지어 디버거 내부에서도 한 번에 하나의 함수만 변경하고 다시 컴파일할 수 있습니다. 이것은 프로그램의 작은 변경 하나로 쉽게 해결할 수 있는 문제를 찾기 위해 몇 시간 동안 테스트에 매달렸을 때, 매우 유용한 기능입니다. 이는 Lisp 프로그래밍 환경이 프로그래밍 노력을 어떻게 지원하는지에 대한 하나의 예시에 불과합니다. 이 책 전반에 걸쳐 추가적인 예들을 찾을 수 있습니다. 특히 10장, 16장, 22장, 그리고 26장부터 28장은 Lisp이 동적 프로그램 개발을 어떻게 지원하는지에 대한 이해를 돕습니다.
학생
만약 전형적인 수업 환경에서 Lisp을 배웠다면, Lisp이 단순히 리스트(list)와 재귀(recursion) 그 이상은 없다고 생각했을 수도 있습니다. 이 책은 Lisp이 다채로운 데이터 타입과 제어 구조를 갖추고 있음을 보여줄 것입니다. 리스트와 재귀는 빙산의 일각에 불과합니다. 나머지 Lisp의 세부 사항을 이해하려면 3장부터 24장을 읽으시면 됩니다. 학부 수준을 벗어나 첫 리스프 프로젝트를 시작함에 있어, 상용 Lisp 개발 환경을 사용할 수 있게 되었을 때 어디에서 필요한 정보를 찾아야 할지 참고할 수 있도록 나머지 장들을 빠르게 훑어보시길 권장합니다.
현재 Lisp 수업을 수강 중이거나, 이미 수업을 마치고 강사가 다루지 못한 시간을 채우고자 하는 경우이든, 이 책은 Lisp 언어에 대한 이해와 가장 효과적으로 사용하기 위한 기술을 가르침으로써 여러분의 학습에 도움이 될 것입니다. 부록 A에는 Lisp 개발 환경의 출처 목록이 나와 있습니다. 아직 형편이 안되는 학생일 때는 프리웨어 버전을 사용할 수 있으며, 이후 회사에 상용 Lisp 구현체를 도입하도록 추천하거나, 개인적으로 사용하기 위해 하나를 구매할 때 이 목록을 다시 참고할 수 있습니다.
취미로
내게 있어 취미로 하는 사람이란 도전하는 즐거움이나 배움의 기쁨을 얻기 위해, 또는 여가 시간을 보내기 위해 프로그래밍을 하는 사람이다. 이런 사람들은 대체로 독학으로 프로그래밍을 배운다. 자신이 여기에 해당한다면, Lisp는 상당히 도전적인 언어이지만, 그만큼 프로그래밍에 대해 많은 것을 배울 수 있는 언어이기도 하다고 알려드리고 싶습니다.
Macintosh와 DOS 컴퓨터에서 사용할 수 있는 프리웨어 Lisp 시스템 중 하나만으로도 Lisp를 상당히 깊이 배울 수 있습니다. 하지만 취미를 수익성 있는 사업으로 발전시킬 생각이라면, 자신이 만들려는 제품이나 제공하려는 서비스에 Lisp가 적합한지 고민해 봐야 합니다. 데이터베이스나 스크립트, 멀티미디어 분야를 생각하고 있다면, 해당 분야에 특화된 도구를 사용하는 편이 더 만족스러울 것입니다. 차세대 대작 비디오 게임을 만들고 싶다면, 이미 기계에 가까운 수준에서 프로그래밍할 수 있는 언어가 필요하다는 사실을 깨달을 것입니다. 그런 경우 Lisp는 기대에 미치지 못할 수 있습니다. 하지만 게임 캐릭터들이 복잡한 상호작용을 하도록 만들거나, 심지어 지능적으로 행동하는 것처럼 보이게 하고 싶다면 Lisp는 이러한 행동의 프로토타입을 설계하고 테스트하기에 훌륭한 도구가 될 것입니다.
취미로 프로그래밍을 하는 목적이 무엇이든, 이 책은 괄호에 얽매이지 않고 Lisp를 탐구하는 데 필요한 이해를 제공할 것입니다. 모든 장을 읽되, 특히 관심이 가는 장에 더 많은 시간을 투자하시길 바랍니다. Lisp 개발 환경을 사용할 수 있다면 10장, 16장, 22장, 그리고 28장부터 30장까지는 시간을 들여 공부하기 바랍니다. 이 장들은 프로그래밍을 하다가 길을 잃었을 때 다시 방향을 찾는 데 필요한 기초 지식을 제공합니다. 언어의 모든 내용을 백과사전처럼 빠짐없이 외우려고 애쓰는 것보다 이런 지식을 갖추는 편이 훨씬 도움이 될 것입니다.
예전에 Lisp를 접해 본 사람
대학의 프로그래밍 수업 등에서 Lisp를 배운 경험이 있다면, 이 책을 통해 기존 지식을 한층 발전시킬 수 있을 것입니다. 한 학기 수업으로는 시간 제약 때문에 결코 다룰 수 없는 내용까지 배울 수 있습니다. 또한 학교에서 사용했을 가능성이 높은 무료 Lisp 시스템에는 없는 도구와 기능을 상용 Lisp 개발 환경이 어떻게 제공하는지도 살펴볼 수 도 있습니다.
이전에 Lisp 프로젝트를 진행했거나 시도해 본 적이 있다면, Lisp를 효과적으로 사용하는 방법을 알려 줄 멘토가 없었을 수도 있습니다. 이 책은 성공적인 Lisp 프로그래머가 되는 데 필요한 기술을 소개합니다. Lisp가 무엇을 하는 언어인지 이해하는 것은 중요합니다. 이 책도 이전에 출간된 다른 Lisp 서적들과 마찬가지로 그 내용을 다룹니다. 하지만 여기서 한 걸음 더 나아가, Lisp가 왜 그런 방식으로 작동하는지, Lisp에서 어떤 방식으로 작업하는 것이 가장 좋은지, 그리고 무엇보다 목표를 가장 효과적으로 달성하기 위해 Lisp 개발 환경을 어떻게 활용해야 하는지까지 설명합니다.
이 책을 참고서로 활용하기를 바랍니다. 상세한 목차를 살펴보면 자신의 관심사나 필요에 맞는 주제를 쉽게 찾아볼 수 있을 것입니다.
호기심
당장 Lisp 프로그램을 작성할 계획이 없더라도(예를 들어 프로그래밍 언어를 공부하는 학생이라면), 이 책은 여전히 좋은 선택입니다. 각 장을 순서대로 읽으면서 가끔 코드를 직접 종이에 써 보고, 자신이 제대로 이해했는지 확인하는 것만으로도 Lisp와 그 개발 환경, 그리고 Lisp의 활용법에 대해 많은 것을 배울 수 있습니다. 내부 표현 방식에 관한 세부 사항을 지나치게 파고들지 않으면서도 Lisp의 기본 개념을 이해할 수 있도록 설명하는 데 많은 노력을 기울였습니다.