서평

자바스크립트로 배우는 SICP 리뷰

띵킹 2023. 2. 26. 18:08

『자바스크립트로 배우는 SICP : 컴퓨터 프로그램의 구조와 해석』 한빛미디어, 2022

SICP(The Structure and Interpretation of Computer Programs, 컴퓨터 프로그램의 구조와 해석)은 MIT의 컴퓨터 과학 입문 강의를 기반으로 만들어진 서적이다. 컴퓨터 과학의 기본 원리와 설계의 핵심 개념을 밑바닥부터 다져가면서 학습할 수 있는 SICP는 Scheme이라는 LISP의 방언을 통해 학습을 진행하기 때문에 다소 접근하기 어려운 편이었다. 이를 널리 사용되고 있는 언어인 Javascript로 각색한 SICP in JS가 이번에 한빛미디어를 통해 번역본으로 출시되었다. 

 

많은 모던 프로그래밍 언어 중 Javascript로 이 책이 각색된 이유는 Javascript의 멀티 패러다임 중, 함수형 프로그래밍이 가능한 부분을 꼽을 수 있겠다. 책의 주된 내용은 아래에서부터 차근차근 추상을 쌓아올리면서, 컴퓨터 프로그래밍의 다양한 문제들을 해결하는 과정을 담고 있다. 높은 단계의 추상을 추구하는 것은, 즉 코드의 의존성을 낮추는 것이고 이는 순수 함수 위주의 함수형 프로그래밍으로 진행된다. Scheme은 그런 추상이 가능한 언어이고 Javascript 또한 ECMAScript 2015를 통해 도입된 람다 표현식, 블록 레벨 스코프, 상수 등을 통해 함수형 프로그래밍이 가능해졌다. 때문에 원판의 내용을 거의 그대로 가져올 수 있었다고 한다. 

 

컴퓨터 과학의 입문 강의를 기반으로 만들어진 책이지만, 다루고 있는 내용은 '입문'이라기에는 다소 난해하게 느껴질만한 내용을 다루고 있다.  1장에서는 기본적인 함수의 조합과 추상화를 통해 복잡한 계산을 수행하는 과정을 연습한다. 이 과정에서 다루는 복잡한 계산들은 프로그래밍과 연관된 수학적인 주제들로 구성되어 있는데, 단순히 읽고 넘어갈 수 있는 수준이 아니라 오래 생각하면서 답을 도출해야만 하는 내용이다. 2장에서는 데이터를 추상화하고, 추상화한 데이터를 통해 더 높은 차원의 데이터를 만들어가는 과정을 다룬다. 자료구조를 만들고 다루는 방법을 직접 구현하는 과정이기 때문에, 1장과 마찬가지로 연습문제를 간단하게 해결할 수 없다. 연습문제 중, 람다 계산식을 통해 자연수를 정의하는 문제(처치 수)도 있을 정도다. 

 

리뷰를 작성하고 있는 지금, 겨우 2장을 읽어나가고 있는 정도라 이 책에 대한 평가를 내린다는 것이 좀 어렵게 느껴진다. 3주 전에 책을 받았고, 꾸준하게 읽어나가고 있는데도 아직 1/4을 채 진행하지 못했다. 그럼에도 이 책에 대한 평가를 좋게 내릴 수 밖에 없는 근거는, 아직까지도 내가 이 책을 붙잡고 있는 이유로 설명할 수 있다. 연습문제를 풀고 책이 전달하고자 하는 내용을 이해하는 것이 고된 만큼, 이해했을 때 얻는 성취감이 정말 값지게 느껴졌다. 재귀, 람다식, 커링 등의 난해한 프로그래밍 기법들을 터득한 것, 간추리기를 통해 더 높은 표현 수준을 만들고 이를 통해 추상화의 장벽을 쌓아나가는 것, 평소에 개발하면서 사용하던 여러 고차 함수를 직접 구현해보면서 이해도를 높이는 것 등, 프로그래밍에 있어서 흥미롭고 중요한 내용들을 배워볼 수 있었다. 남은 과정에서도 얼마나 흥미로운 내용이 기다리고 있을지 기대가 된다. 

 

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

728x90