GN⁺: SICP: 두 번 읽을 가치가 있는 유일한 컴퓨터 과학 서적? (2010)
(simondobson.org)-
책 소개
- 학생에게 여름 동안 읽을 책으로 빌려준 책이 있음
- 이 책은 컴퓨터 과학에서 가장 중요한 작품 중 하나로, 개인의 경력과 연구에 큰 영향을 미쳤음
- 책 제목은 Hal Abelson과 Jerry Sussman의 Structure and Interpretation of Computer Programs (SICP)임
-
책의 중요성
- 이 책은 컴퓨터 과학을 처음 접할 때 큰 영향을 줌
- 프로그래밍의 기본 요소를 소개하고 다양한 주제를 탐구함
- 주제에는 람다 추상화, 고차원 계산, 복잡한 데이터 구조, 모듈성, 스트림, 게으른 평가, 인터프리터 및 컴파일러 구성, 저장 관리 등이 포함됨
-
언어 설계 접근
- Hal과 Jerry는 모든 것을 언어 설계의 연습으로 봄
- 복잡한 시스템을 계층화된 설계로 구조화하는 개념을 소개함
- 각 계층은 해당 계층에서 원시적으로 간주되는 부분을 결합하여 구성됨
-
컴퓨터 과학의 본질
- 컴퓨터 혁명은 사고 방식과 표현 방식의 혁명임
- 절차적 인식론이라는 개념을 소개하며, 이는 명령적 관점에서 지식 구조를 연구하는 것임
- 컴퓨터 과학은 "어떻게"에 대한 프레임워크를 제공함
-
책의 지속적인 관련성
- 1988년에 구입한 이 책은 여전히 관련성이 있음
- 컴퓨터 과학에서 시간이 지나도 가치 있는 몇 안 되는 책 중 하나임
- Feynman의 _Lectures on Physics_와 유사하게, 컴퓨터 과학의 본질을 잘 담고 있음
-
업데이트
- 2024년 1월 27일에 업데이트됨
- 이 책은 주석이 달린 Lisp 참고 문헌에도 포함됨
Hacker News 의견
-
Abelson과 Sussman의 1986년 강의 영상에서 책의 내용을 배울 수 있음. 이들의 추상화 계층화 설명은 개인적으로나 멘토로서 유용함
-
SICP와 같은 고전적인 텍스트는 프로그램 설계에 대해 이야기하지만, 요즘에는 시스템 설계가 더 중요하다고 생각함. 분산 시스템은 컴퓨터 과학의 일부인지 모르겠지만, 해결해야 할 더 일반적인 문제임. 시스템을 가능한 한 간단하게 작성하고 관찰 도구를 사용하여 설계의 결함을 파악한 후, 데이터 구조나 다른 컴퓨터 과학적인 방법을 사용하여 문제를 해결함. 대부분의 경우, 빅 오 표기법과 런타임 복잡성은 중요하지 않으며 배열과 빠른 CPU로 대부분의 문제를 해결할 수 있음. 런타임 문제가 있을 때는 프로그램을 프로파일링하여 핫스팟을 찾아야 함. 컴퓨터 과학은 CPU의 메모리 캐싱 작동 방식을 가르치지 않음. 멋진 그래프 알고리즘이 좋은 런타임 복잡성을 가질 수 있지만, CPU 캐시를 완전히 망칠 수 있으며 배열을 사용하여 더 빠르게 처리할 수 있었을 것임. 더 일반적인 문제는 내결함성, 분산 잠금 및 큐의 정확성, 시스템 확장성임. 컴퓨터/전기 공학 배경이 있어서 편향된 것일 수도 있음
-
무료 사본에 대한 링크가 깨져 있음. 2001년경에는 HTML 버전만 무료로 제공되었고, 누군가가 이를 TeXinfo로 변환함. 오늘날 SICP를 공부하고 싶다면 MIT Scheme이나 DrRacket에서 코드를 실행할 수 있음
-
"The Elements of Programming Style"은 세 번 읽을 가치가 있으며, 그 이상 읽고 많은 이점을 얻었음. 2010년 리뷰를 참고할 수 있음
-
SICP를 좋아하고 싶었지만 Lisp가 어렵게 느껴짐. Haskell과 Standard ML은 좋아함. 다른 사람들도 비슷한 경험을 했는지 궁금함. SICP와 비슷한 정신을 가진 책을 다른 언어로 읽는 것이 흥미로울 수 있음. JavaScript로 SICP를 하고 싶지는 않음
-
"Software Design for Flexibility: How to Avoid Programming Yourself into a Corner"에 대한 의견이 궁금함
-
SICP는 다양한 프로그래밍 모델이 있음을 이해하는 데 도움을 주었음. 이 책은 언어, 라이브러리, 프레임워크의 문서를 읽고 방향을 잡는 데 도움을 줌
-
25년간 프로그래밍을 해왔고, 10년 정도 책을 소유했음. 최근에 Dr. Racket으로 시작했음. Dr. Racket의 장점은 변수 위에 마우스를 올리면 코드의 다른 위치와의 연결을 시각적으로 볼 수 있는 점임. 하지만 VS Code가 아니라는 점이 약간 불만이었음. 그래서 VS Code(실제로는 Cursor)를 사용하여 연습 문제를 해결할 수 있는 환경을 구성했음. LLM 통합이 멋지며, 코드와 작성한 내러티브를 제공하고 피드백을 요청할 수 있음. 연습 문제를 조금 진행했지만, 코드를 변환하고 작성한 응답과 LLM에서 받은 피드백을 정적 사이트로 만들었음. 시간을 보내는 재미있는 방법이었음. LLM의 도움 없이 SICP를 완전히 이해하지는 못하지만, LLM을 연습에 통합하는 방법을 보는 것이 흥미로움
-
두 번째 읽기에서 각주와 참고 문헌을 탐구하게 되었고, 아름다운 세계가 있다는 것을 알게 되었음. Sussman과 팀이 천체의 속성을 계산하기 위해 맞춤형 프로그래머블 프로세서를 설계한 논문이 있음. 항상 놀라움
-
원본 버전과 JavaScript 버전의 링크를 제공함