hji7***
2023-02-25

모든 프로그래밍 언어에서 유용한 사고법과 그 표현법을 소개해 프로그램을 효율적으로 조직화하는 법을 알려준다. 개발자라면 반드시 읽어야 할 고전을 사용자가 많은 자바스크립트로 재해석했다.
2019년부터 한빛미디어의 "나는 리뷰어다" 도서 리뷰 이벤트에 참여하고 있습니다. 매월 한빛미디어의 책을 한 권씩 받아서 읽고 리뷰하는 건데요. 연말, 연초에 신청을 받아서 한 해동안 활동하게 됩니다. 2023년에도 가슴 졸이며, 신청을 했는데 다행히 선정되었다고 메일을 받았습니다.
만 3년 넘게 리뷰어 활동을 고집하고 있는 이유는 두 가지 놓고 싶지 않은 장점이 있기 떄문입니다. 첫째, 리뷰어로 책을 받아들면, "강제"로 책을 읽게 됩니다. 다시 말해 한달에 적어도 책을 한권은 읽게 된다는 거죠. 둘째, 관심이 좀 덜한 분야라도 역시 "강제"로 읽게 됩니다.
"나는 리뷰어다" 책 선정 메일을 받으면, 도서 목록에서 읽고 싶은 책 3권을 선택하라고 하는데요. 꼭 읽고 싶다는 생각이 드는 책이 한달에 세 권이 될리는 없기 때문에 결국 덜 관심있는 책도 선택하게 됩니다. 참 희한한건, 항상 관심있는 책보다 덜 관심있는 책이 선정되어 보내진다는 겁니다. 아마 제가 관심있는 책은 다른 리뷰어들도 관심이 있으니 선정되는 확률이 떨어질꺼라 짐작해봅니다.
올해 첫 리뷰 책 목록에는 <자바스크립트로 배우는 SICP>가 있었습니다. SICP는 Structure and Interpretation of Computer Programs의 약자입니다. 우리말로 "컴퓨터 프로그램의 구조와 해석"이죠. 이 책은 컴퓨터 공학의 기본 교과서에 해당하는 책으로 상당히 오랜 시간 권위를 지켜온 책이기도 합니다. 하지만 저는 이 책을 읽은 적이 없는데요. 왜 그런지 모르지만 제가 배웠던 교수님들은 이 책을 교과서로 선정해서 가르치지 않으셨었습니다.
그래서, <컴퓨터 프로그램의 구조와 해석>이라는 책을 사서 읽는 중이었습니다. 하지만 <컴퓨터 프로그램의 구조와 해석>은 스킴이라는 프로그래밍 언어를 사용해 설명하는 책입니다. 물론 스킴을 잘 모르더라도, 책을 이해할 수 있다고는 하지만, 스킴이 낯선 사람들 입장에서 스킴을 가지고 컴퓨터 프로그램을 설명하는 책도 낯설게 느껴집니다. 그래서 정말 진도 나가기 힘들더군요. 한 페이지 읽다가 딴생각하고, 다시 읽다가 딴생각하고를 반복했습니다. 그러던중 <자바스크립트로 배우는 SICP>라는 책이 나왔다는 것을 알게 되었죠. <자바스크립트로 배우는 SICP>는 <컴퓨터 프로그램의 구조와 해석>의 자바스크립트 편이었던 겁니다.
책 리뷰 목록에서 <자바스크립트로 배우는 SICP>를 보았을 때 정말 반가웠습니다. 혹시나 선정될까? 라는 기대감에 신청을 했는데... 다른 때와는 다르게 가장 관심있는 이 책을 받아보게 되었습니다. 하지만 책을 받아든 순간, '엇'하고 외마디 비명을 질렀습니다. 책의 분량이 어마어마하다는 걸, 간과하고 리뷰하겠다고 신청했다는걸, 그때야 깨달았기 때문입니다. 900페이지 육박하는 책을 20일도 안되서 읽어야 하는 상황이라서... 참 난감했습니다. 어쨌든 리뷰를 써야 하니 열심히 읽었습니다.
컴퓨터 프로그래밍(코딩)은 무얼까요?
이 책에서는 "물리적 또는 정신적 과정에 대한 하나의 모형이 우리의 마음속에서 부화한 것"이라고 말합니다. 책 서문부터 상당히 공감되는 이야기 인데요. 결국 우리가 코딩한다는 건, 어떤 문제를 해결하는 "방법"을 프로그래밍 언어로 "표현"한 것이기 때문입니다. 물론, "표현"법을 익히는 것도 중요하지만, 문제 해결 방법을 생각해 내는 것이 더 중요합니다. 아무리 표현법을 잘 알아도, 문제 해결 방법을 모르면 코딩을 할 수 없기 때문입니다.
그래서, 이 책은 우리의 해결 방법과, "함수"를 연결하는 것부터 이야기를 시작합니다. 보편적인 해결법이 "수학"에서 온게 많기 때문인지, 1장을 읽다가 보면, 자괴감을 느끼곤합니다. '나... 수포자 인데... ' 뭐 이런 생각을 하며 자꾸 책을 덥고 싶게 되죠. 하지만.. 저는 "강제"로 읽어야 하는 상황이기 때문에, 꾸역꾸역 2장으로 넘어갔습니다.
이제 데이터에 대한 이야기 입니다. 그리고 3장 모듈!!! 우리 머릿속에 해결법이 정리된 코드가 되기 위해서 필요한 이야기들을 한단계씩 해 나가고 있습니다. 모듈을 잘 만들 수 있다면, 이제 우리는 코드를 잘 짤 수만 있을 것 같습니다. 그 다음 메타언어, 레지스터 기계에 대한 이야기가 나오면서, 이 책이 왜 "컴퓨터 프로그램의 구조와 해석"이라는 제목을 갖게 되었는지 이해가 되었습니다. 우리 머릿속의 해결법을 프로그래밍 개념과 연결해서 결국은 프로그래밍 언어를 배웠을 때 그 표현법을 가지고 표현해 낼 수 있는 상황에 이르게 하는게 이 책의 목적인 것입니다.
이 책을 읽은 독자들은 이제 어떤 프로그래밍 언어를 배우더라도 제대로 방향을 잡고 코딩을 해갈 수 있을 겁니다. !!!
<프로그래머의 뇌>라는 책에서는 "에츠허르 데이크스트"라는 분의 말을 인용합니다. "정신이 손상되기 때문에 베이직을 가르치는 것은 금지되어야 한다!!!" 정신이 손상된다는 말은 아마도 우리가 문제를 해결하는 데 잘못된 습관을 가지게 만든 다는 것인듯 합니다. 베이직은 지극히 순차적인 명령을 내리는 언어이기 때문에 여기에 익숙하게 되면 다른 사고 방식을 익히기 힘들어진다는 거죠.
비슷하게 C언어 개발자들이 C++을 잘못 다루는 사례도 있습니다. C언어는 하향식으로 코딩을 하기 편리하게 되어 있는데 C++은 사실 상향식으로 코딩을 하려고 만든 언어입니다. 다시 말해 세부적인 기능을 뭉쳐나가다가 전체를 만드는 방식과, 전체 그림을 먼저 조망하고 세부를 조율해 가는 건, 다르거든요. 하지만, C언어에 익숙한 개발자들은 C++를 C언어처럼 사용합니다. 함수 대신 클래스와 상속을 사용할 뿐이죠. 즉 표현법이 바뀌었지만, 문제 해결 방법을 생각해 내는 생각 방식에는 바뀐게 없었던 것이죠.
다시말해, 코딩의 방향성에 대한 고민이 없으면, 잘못된 코드를 만들어낼 가망성이 높아진다는 말이 됩니다. 그리고 SCIP는 제대로된 코딩의 방향성에 대해서 컴퓨터 공학 역사를 통털은 지식을 가지고 설명하는 책이라고 할 수 있고요.
정말, 중요한 책인 <컴퓨터 프로그램의 구조와 해석>을 붙잡고 진도나가지 못하고 있었는데 <자바스크립트로 배우는 SICP>를 리뷰하려고, "강제"로 읽게 되면서, 읽을 수 있게 되었던 것 같습니다. 이제 시간을 좀 여유있게 갖고, 두 권의 책을 비교해가면서 읽어보려고 합니다. SICP는 파면 팔 수록 정말 많은 걸 알게 해주는 책인것 같네요.
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."