본문 바로가기

개발중

왜 MIT는 SICP를 가르치는것을 중단하였는가

(한국어판 : 컴퓨터 프로그램의 구조와 이해)

"Structure and Interpretation of Computer Programs" 마법사책이라고 불리는 컴퓨터 과학 분야에서 저명한 책이 있다. 


MIT 컴퓨터과학 과정에서 입문으로 강의 해왔다고 들었다.  하지만 MIT에서 이제 이 강의를 중단하다고 공지를 띄웠고, 


이 책으로 공부를 시작하려던 나는 이 내용에대해 조금 더 알아보고 싶었고 알게된 사실을 공유하기 위해 이 글을 쓴다.


코딩의신 아샬님이 올리신 관련 영상도 유튜브에 있지만 내용을 보다 자세히 공유하기위해 글로 정리해보았다.


강의를 중단하게 된 이유 중 가장 큰 이유는 더이상 SCIP 강의가 요즘 엔지니어들이 하는 일을 준비하는데 도움이 되지 않는다고 느꼇다. 

이게 무려 1997년의 일이다. 20년이 넘게 흘렀다.

이유를 살펴보자면 80, 90년 대에는 엔지니어들이 간단하고 잘 이해된 부분들을 조합하여 복잡한 시스템을 만들어 냈었다. 

SICP의 목표는 이러한 시스템들의 이유를 설명하기 위한 언어의 추상화를 제공하는 것이었다.


하지만, 오늘날은 더이상 이와 같지 않다. 

엔지니어들은 일상적으로 복잡한 하드웨어의 코드를 작성하는데 완전히 이해하지 않고 작성한다. (간혹, 기밀때문에 이해할수도 없는 경우도 포함)

소프트웨어의 경우도 마찬가지다 막대한 기능을 가진 거대한 라이브러리로 구성되있다. 

학생들은 대부분의 시간을 라이브러리의 메뉴얼을 읽고 일을 마무리하기 위해서는 어떻게 라이브러리들을 연결할지 알아내기위해 보낸다.

요즘 프로그래밍은 더욱 과학에 가깝다. 이런 라이브러리의 일부를 사용해 찔러 보는 것이다.  

"종합적 분석"의 관점의 SICP ㅡ 더 작고 간단한 부분으로 더 큰 시스템을 구축하는 것 ㅡ 무의미하게 되었다.

우리는 프로그래밍을 찔러보기(시도해보는것?)으로 하게 되었다.

 

(추가) 유용한 댓글


그렇다면 우리는 무엇을 기본적인것으로 생각해야 할까?

(programming paradigms, algorithms, data structures, compilers, operating systems, networking, math for CS, digital logic, computer architecture)

AI(인공지능), ML(프로그램언어), NLP(자연어처리), 웹디자인들은 어플리케이션 분야이다, 기본적인것은 아니다. 

당신이 충분한 시간을 써야 되는 것은 컴퓨터 프로그램들, 수학적으로 추론될수 있는 수학적대상(수, 순열, 분할, 행렬, 집합, 함수, 및 관계)에 대해서이다.

A fixed point(고정점)

Automata theory(오토마타 이론) 


Turing-completeness , Truing-machines들은 PDAs(Pushdown automaton) 그리고 FSAs(Finite-state automaton) 있다. 


튜링머신이 할 수 있는것들과 PDA는 할 수 없는것들 문맥의존문법(Context-sensitive grammar)의 파싱

PDA는 할 수 있는 것들과 FSA는 할 수 없는것들 문맥자유문법(Context-free grammar)의 파싱

FSA는 정규표현식(regular expression)들을 파싱한다.


Programming language theory

- binding(lexical, dynamic)

- what an enviorment (a mapping between names and bindings)

- how enviorments chained

- how evaluation and compilation are related( role that environments play in both prcess)

- static and dynamic typing

- how to compile a  high-level language down to an RTL


Operating systems

- what a process, thread, parallel processes lead to problems, mechanisms for dealing with those problems, 

  mechanisms require hardware support(atomic test-and set instructions)

- basic data structures

(Mainly what data structures are really all about is making associative maps that are more efficient for certain operations under certain circumstances.)

- database(what databases are really all about is dealing with the architectural differences between RAM and non-volatile storage, 


(원문 : http://lambda-the-ultimate.org/node/5335)