SICP 비디오 강의(1986)
(ocw.mit.edu)- MIT 6.001
Structure and Interpretation of Computer Programs의 전체 흐름을 20개 비디오 강의로 따라갈 수 있어, SICP를 체계적으로 복습하기 좋은 자료임 - 강의는 1986년 7월 Hewlett-Packard 직원 대상으로 진행됐고, Hewlett-Packard Television이 전문 제작함
- 영상은 MIT OCW와 별도 제공 사이트에서 볼 수 있으며, 상업적 이용과 호환되는 Creative Commons 라이선스로 제공됨
- 강의 내용은 1985년 SICP 1판을 기준으로 하며, 1996년 2판에서는 일부 프로그램 재작성과 새 자료 추가가 있었음
- 전체 주제와 발표 순서는 유지되어, 2판으로 공부하는 학습자에게도 여전히 참고 가치가 있음
강의 구성과 제공 방식
- Hal Abelson과 Gerald Jay Sussman의 20개 강의가 MIT 6.001
Structure and Interpretation of Computer Programs과정을 완전한 형태로 다룸 - 강의는 1986년 7월 Hewlett-Packard 직원 대상으로 진행됐으며, Hewlett-Packard Television이 전문 제작함
- 영상은 Hal Abelson과 Gerald Jay Sussman이 제공한 자료이며, 허가를 받아 사용됨
- 같은 영상은 MIT OCW 외에 별도 제공 사이트에서도 제공되며, 상업적 이용과 호환되는 Creative Commons 라이선스를 따름
교재 판본 관련 주의점
- 이 강의는 1985년 출간된 Structure and Interpretation of Computer Programs 1판을 기준으로 진행됨
- 1996년 2판에서는 강의에서 다룬 여러 프로그램이 다시 작성됐고 새 자료가 추가됨
- 전체 주제와 발표 순서는 바뀌지 않아, 2판을 사용하는 학생에게도 이 비디오 강의가 유용함
강의 목록
-
Lisp와 프로시저 추상화
- 1A: Overview and Introduction to Lisp: Lisp 개요와 소개
- 1B: Procedures and Processes; Substitution Model: 프로시저, 프로세스, 치환 모델
- 2A: Higher-order Procedures: 고차 프로시저
-
데이터와 기호 처리
- 2B: Compound Data: 복합 데이터
- 3A: Henderson Escher Example: Henderson Escher 예제
- 3B: Symbolic Differentiation; Quotation: 기호 미분과 인용
- 4A: Pattern Matching and Rule-based Substitution: 패턴 매칭과 규칙 기반 치환
- 4B: Generic Operators: 제네릭 연산자
-
상태, 객체, 스트림
- 5A: Assignment, State, and Side-effects: 대입, 상태, 부작용
- 5B: Computational Objects: 계산 객체
- 6A: Streams, Part 1: 스트림 1부
- 6B: Streams, Part 2: 스트림 2부
-
평가기와 논리 프로그래밍
- 7A: Metacircular Evaluator, Part 1: 메타순환 평가기 1부
- 7B: Metacircular Evaluator, Part 2: 메타순환 평가기 2부
- 8A: Logic Programming, Part 1: 논리 프로그래밍 1부
- 8B: Logic Programming, Part 2: 논리 프로그래밍 2부
-
기계 모델과 컴파일
- 9A: Register Machines: 레지스터 머신
- 9B: Explicit-control Evaluator: 명시적 제어 평가기
- 10A: Compilation: 컴파일
- 10B: Storage Allocation and Garbage Collection: 저장소 할당과 가비지 컬렉션
댓글과 토론
Hacker News 의견들
-
SICP를 공부하려면 MIT Scheme을 써도 되고, 다른 선택지로 Racket이나 DrRacket에 이 애드온 패키지를 붙여 쓸 수도 있음: https://docs.racket-lang.org/sicp-manual/
- 교육 목적이라면 MIT Scheme만 추천하는 편이 맞다고 봄
다른 것들은 주변 기능이 너무 많아서 산만해질 수 있음 - 이 두 시스템 추천에 동의하지만 단서가 있음
MIT Scheme은 Apple Silicon에서 돌도록 만들어지지 않았고, 약간의 요령으로 amd64 버전을 최신 Mac에서 쓸 수는 있지만 Apple이 Rosetta2를 없애면 사라질 가능성이 큼
그래서 Racket이 더 나은 선택일 수 있음
괜찮은 Scheme 구현이라면 거의 무엇이든 SICP에 쓸 수는 있지만, 2판 이후에도 언어가 바뀌었기 때문에 추천하지는 않음
다만 자기 프로젝트를 시작한 뒤에는 다른 시스템을 써도 되고, 오래된 관용구의 현대적 대응물을 찾으려면 설명서를 읽어야 할 수도 있음 - MIT Scheme이 “될 법한 것 중 가장 단순한” 선택임
- 교육 목적이라면 MIT Scheme만 추천하는 편이 맞다고 봄
-
모든 프로그래머는 LISP를 배워야 하거나, 적어도 진지하게 공부해봐야 함
응용 프로그래머 대부분은 C 프로그래머처럼 절차적으로만 생각하는 법을 알고 있음
LISP는 하드웨어가 아니라 개념을 다루는 “아름다운” 언어이고, 1990년에 모교에서 몇 년간 대학원 프로젝트를 하며 써봤을 때 사고방식이 완전히 바뀌었음 -
예전에 책만 보고 SICP를 해봤는데, 강의가 훨씬 낫고 책은 보조 참고자료 역할을 한다고 봄
- 원래 대학 교육은 대략 1000년 동안 그런 식으로 굴러갔음
-
연습문제를 풀거나 책을 따라가지 않아도 됨
이 분야에 새로 들어왔든 수십 년 경력이 있든, 아직 이 영상을 보지 않았거나 SICP 수업을 들어본 적이 없다면 거의 누구에게나 도움이 될 만함 -
이 영상들과 책 전체를 끝까지 공부했고, 뉴스그룹을 통해 오프라인 스터디 그룹도 꾸렸음
정말 즐거웠고 큰 돌파구가 됐지만, 책 중간쯤부터 스터디 인원이 줄기 시작했음 -
SICP를 읽으라는 조언은 /g/에서 받은 조언 중 최고였음
-
이걸로 Lisp를 배웠고, 이어서 Clojure를 배운 뒤 그걸 중심으로 커리어를 만들었음
- 훌륭함. Clojure는 어떻게 배웠는지 궁금함
꽤 좋아하는 언어임
- 훌륭함. Clojure는 어떻게 배웠는지 궁금함
-
정말 강력 추천함
첫 번째 강의만 봐도 바로 빠져들게 됨 -
시스템 프로그래밍에 관심 있는 사람이 여기서 얻을 수 있는 게 뭘까?
- 이 강의들은 가변성, 상태 관리, 추상화 같은 주제의 핵심 질문을 거의 유일할 정도로 잘 뽑아냄
그래서 시스템 프로그래밍이 주로 상태 관리와 추상화에 관한 것인 한, 매우 깊이 관련 있다고 봄
다만 “시스템 프로그래밍”을 이미 존재하는 지저분한 시스템들을 억지로 붙이는 일이나, 서드파티 라이브러리에 대한 감각을 기르는 일 정도로 뜻한다면 별로 관련 없을 수 있음
그래도 여기에도 통찰은 있음. Sussman이 SICP를 내려놓고 MIT에 새 입문 과정을 만들라고 요구한 이유를 설명하는 영상을 봤는데, 자신이 다듬어온 보석을 정중하고 사려 깊게 접어두는 모습이었음
우리가 모든 추상화 계층을 가로질러 꿰뚫어볼 수 있다고 기대할 만한 시대는 끝났다는 뜻이었음
- 이 강의들은 가변성, 상태 관리, 추상화 같은 주제의 핵심 질문을 거의 유일할 정도로 잘 뽑아냄
-
이 강의들은 음질이 너무 나쁨
깨끗하게 보정할 방법이 있을까?