필자가 SICP(Structure and Interpretation of Computer Programs)를 처음 본 것은 대학생 시절이다. 당시 이 책이 신입생에게 프로그래밍을 가르치는 교재로 사용되고 있었기 때문에 강의를 들으며 공부할 기회가 있었다. 지금이야 그 기회가 큰 복이었다고 생각하지만 SICP의 가치를 깨닫기까지는 그저 황당한 경험일 뿐이었다. 처음 접했을 때 이 책의 내용은 독특하다 못해 고집스러워 이해하기가 쉽지 않았기 때문이다. 그 당시 한 가지 더더욱 이해가 가지 않는 것은 SICP가 채택한 이상한 프로그래밍 언어였다. 스킴(Scheme)이라 불리는 이 언어는 LISP의 방언이라는 데, 그동안 써왔던 다른 언어와는 너무 달라서 이 언어로 뭐 쓸만한 프로그램을 만들 수 있을까 의문이 들 정도였다. 스킴이란 언어를 배우는 데는 정말 하루가 걸리지 않았다. 그 때까지만 해도 작고 가벼운 언어는 아무래도 초보가 쓰는 게 아니겠냐는 생각을 옳다고 믿었기 때문에 스킴은 충분히 무시해도 될만한 장난감 같았다. 또 산업 현장에서 잘 쓰지도 않는 언어를 가르쳐서 뭣하나 싶어 한 동안 후배들을 모아놓고 섣부른 비판을 하기도 했다. 이듬해 다시 SICP 수업을 듣게 됐을 때 비로소 이 책의 목적이 지금까지 봐왔던 것과는 바탕부터 다르다는 점을 알게 됐다. 좁은 생각을 가두고 있던 어설픈 벽은 SICP에 의해 여지없이 무너진 것이다.
‘근본이 다른’ 프로그래밍 입문서SICP는 프로그래밍 입문서다. 난이도의 적정성에 대해서는 예전부터 논란이 많았지만 처음으로 프로그래밍을 배우는 이들을 깊이 배려해서 쓴 책이라는 점에는 재론의 여지가 없다. 다만 그 ‘프로그래밍’에 대한 생각이 흔히 다른 책과 아주 많이 다를 뿐이다. 예를 들어 ‘얼마 안에 어떤 언어 배우기’식의 책과는 아예 근본이 다르다. 또 특정 언어나 이론을 초급부터 고급까지 단계별로 집중 연습시키는 책은 더더욱 아니다(사실 대부분의 대학 프로그래밍 입문은 이런 방식을 따른다).SICP는 종합적인 책이다. 패러다임도 하나만 쓰지 않는다. 상태를 가진 객체, 함수, 논리, 관계, 병행성, 비결성, 소극 계산법 등 여러 계산 모델을 총동원한다. 취급하고 있는 응용분야도 다양하다. 수치해석, 심벌 연산, 디지털 회로 시뮬레이션, 인터프리터, 그래픽스, 컴파일러 등을 총 망라한다. 그러나 내용이 많아 수박 겉핥기로 지나쳤을 거라고 생각하면 오산이다. 하나하나를 전문으로 다루는 교재에 비하면 덜하겠지만 각각의 아이디어와 이치에서 핵심은 심도 깊게 다뤄지고 있고 모자라는 부분은 교재와 유기적으로 결합된 예제를 통해 배우는 이 스스로가 도전하고 보충할 수 있도록 안배해뒀다. 무엇보다 이 모든 주제가 한 가지 목적을 달성하기 위해 묵직하게 흘러가기 때문에 산만하지 않은 점은 다른 책에서는 찾아보기 어려운 이 책만의 장점이다. "우리의 목표는 학생들이 이 과목을 끝마치고 나서 프로그래밍의 미와 스타일을 구성하는 좋은 감각을 가질 수 있도록 만드는 데 있다. 학생들은 하나의 큰 시스템 속의 복잡도를 제어하는 데 필요한 주요 기술을 다룰 수 있어야만 한다. 만약 틀에 박힌 대로 쓴 것이라면 50페이지 정도되는 프로그램을 읽을 능력이 있어야 한다. 또 읽지 말아야 할 게 무엇이고, 어떤 시점에서는 이해할 필요가 없는 게 무엇인지 알아야만 한다. (Preface to the First Edition, SICP)"이것이 바로 SICP를 공부하는 이유다. 첨예한 의견 대립을 낳은 SICP자기가 좋아하는 책을 남들이 어찌 생각하나 살펴보는 일도 때로는 재미있다. 그래서 필자는 새로 책을 살 때는 물론 갖고 있는 책에 대한 웹에 올라와 있는 독자 서평도 거의 다 읽어보는 편이다. 일정한 독자 수를 넘어가면 그 보다 더 객관성 있게 책의 질을 평가내릴 수 있는 근거 자료는 없을 것이라 믿는다. 특히 SICP에 대한 독자들의 서평은 정말 독특해서 어떤 글은 책 자체만큼이나 시사하는 바가 크다. 필자는 그 중에 마음에 드는 서평을 엄선해서 스크랩했다. 이어지는 서평을 읽노라면 마치 뉴스그룹에서 첨예한 의견 대립을 보이는 격렬한 쓰레드를 읽어 가는 듯 하다. 크게 엇갈린 의견은 그칠 줄을 모르고 1996년부터 2002년까지 이어지고 있다. 어떤 이는 ‘여태 본 책 중 최고’이며 ‘기념비적 책’이라고 찬사를 아끼지 않는가 하면, 다른 이는 ‘확실한 시간 낭비’고 ‘흔하고 쓸데없는 말을 주절대는 책’이라며 더할 수 없는 혹평을 해댄다. 도대체 SICP의 어떤 특성이 그리도 엇갈린 평가가 나오게 만들었을까. 아마 이 글을 읽고 SICP에 도전하는 독자가 있다면 상반된 양극의 견해로 대립하게 될지 모른다. 그러나 제대로 공부한다면 다음의 독자와 같은 경험을 하게 될 가능성이 크다(말하자면 필자의 경우 SICP 스타일의 책을 아주 사랑하는 사람이다. 그러니 이 글을 쓰고 있겠지만). "학생시절에는 이 책을 정말 싫어했습니다. 스킴을 배워야 한다는 것도 끔찍했습니다. 그러나 지금은 이 책을 아주 좋아합니다. 프로그래밍에 관해 아주 깊이 있는 얘기를 담고 있기 때문입니다. (중략) 난 이 책을 공부하면서 프로그램이 어떻게 움직이는 지에 관해 정말 많은 것을 배웠습니다. 연습문제를 풀어가는 과정에서 계속 생각하는 노력을 기울인다면 여러분도 같은 성과를 얻게 될 것입니다. 예제를 풀어보지 않으면 뭔가 얻을 게 없습니다. (중략) 학생시절 이 책을 본 다음에, 절대 팔아버리지 마십시오. 꼭 보관하세요. 그리고 4, 5년 정도 프로그래머로 활동한 후에 다시 한 번 읽어보세요. 이번에는 틀림없이 좋아하게 될 것입니다.“ (A reader from Cambridge, Massachusetts, 1999 8월 19일)"이 교재가 쉽지는 않습니다만 MIT나 버클리에서 입문서로 쓴다고 해도 놀랄 필요는 없습니다. 물론 정말 열심히 노력해야 이 교재의 수준과 진도를 겨우 따라 잡을 수 있겠지만 고생에는 그만한 보상이 따라 옵니다. 결국 이 책은 독자로 하여금 이론과 실제, 양면에서 다른 어떤 컴퓨터 과학 서적과도 견줄 수 없을 만큼 광범위한 주제를 철저하게 다뤄보도록 만듭니다. (A reader from Berkeley, CA, 1999년 5월 11일)"이 책은 초보자만 그런 보상을 얻는 것은 아니다. 분명히 입문서인데 세월이 지날수록 경험 많은 엔지니어에게 더 많은 감명을 주는 책임을 부정할 수 없다. 점차 저자의 의도가 더 잘 이해되고 경험으로 공감하게 되는 진리가 많아지기 때문에 이 책을 다시 볼 때마다 미처 찾지 못했던 내용을 새로 발견하게 되는 기쁨이 있다. SICP를 읽기 전에이 책에 대해 부정적인 견해를 갖고 있는 사람도 적지 않다. 대부분 소문을 듣거나 추천받아 이 책을 보게 된 경우로 스스로 찾고자 하는 것이 무엇인지 몰라 애궂은 책을 나무라는 경우라 할 수 있다. 그러나 학습 목적에 맞는 질 좋은 책을 골라 보는 것은 독자의 책임이다. 그리고 만일 이 책을 교재로 선택하고자 한다면 배우는 학생들의 수준과 성향에 따라 학습 동기를 놓치지 않도록 준비를 철저히 해 둘 필요가 있다. 아니라면 온라인 서점마다 이 책에 대한 억지 서평이 꼬리에 꼬리를 물고 이어질 지도 모른다. 이제 몇 사람의 서평 속에 숨어있는 충고를 들으면서, 이 책의 성격이 자신의 학습목적에 맞는 지 미루어 짐작해 보자. "코딩과 프로그래밍의 차이점. 그냥 코드를 쓰고 싶을 뿐이라면 이 책을 읽지 말라. 그런 독자는 이 책을 이해하지 못할 것이고, 오로지 불평만 늘어놓을 것이다. 대신에 ‘21일안에 C++ 자습하기’식의 제목이 붙은 많은 책 중에 하나를 골라 읽는 게 낫다. (Paul G. Brown from Berkeley, CA)"SICP는 오로지 ‘프로그래밍이 무엇인가?’를 제대로 소개하고 연습시키는 데 충실한 책이다. 프로그래머로 하여금 쓸만한 프로그램을 만들도록 구체적인 문제의 공략법을 알려주는 것은 이 책의 목적이 아니다. 좋은 프로그래머가 되고 싶은 이에게 가장 중요한 소양과 주어진 문제의 해결책을 프로그래밍 언어로 잘 표현해내는 능력을 스스로 키울 수 있게끔 프로그래밍의 사고를 제대로 갖춘 프로그래머를 길러 내는 책이다.사실 SICP가 어떤 프로그래밍 책인 지 설명하기는 정말 어렵다. 그만큼 논란의 여지가 많은 책이다. 그래서 직접 읽어보는 것으로도 이 책을 논할 자격은 불충분하다 하다. 필자 역서 이 책의 가치를 이러쿵저러쿵 산만한 말로 어설프게 묘사하고 싶지는 않았다. 그래서 여러 사람의 서평을 빌어 SICP의 가치를 설명하고자 애썼다. 이제 ‘호그와트’로 가는 기차를 탈지 말지는 독자 여러분의 결정에 달려있다. @