SICP 是不是被高估了?
這本教材如果也叫難,要是考到物理系或是數學系可以去自殺了。
除了想從這本書學到「程序的本質」等知識外,我也想學會把那麼多豐富的思想講清楚的能力。
我來轉個文章:Programming by poking: why MIT stopped teaching SICP
In this talk at the NYC Lisp meetup, Gerry Sussman was asked why MIT stopped teaching the legendary 6.001 course, which was based on Sussman and Abelson』s classic text The Structure and Interpretation of Computer Programs (SICP). Sussman』s answer was that: (1) he and Hal Abelson got tired of teaching it (having done it since the 1980s). So in 1997, they walked into the department head』s office and said: 「We quit. Figure out what to do.」 And more importantly, (2) that they felt that the SICP curriculum no longer prepared engineers for what engineering is like today. Sussman said that in the 80s and 90s, engineers built complex systems by combining simple and well-understood parts. The goal of SICP was to provide the abstraction language for reasoning about such systems.
Today, this is no longer the case. Sussman pointed out that engineers now routinely write code for complicated hardware that they don』t fully understand (and often can』t understand because of trade secrecy.) The same is true at the software level, since programming environments consist of gigantic libraries with enormous functionality. According to Sussman, his students spend most of their time reading manuals for these libraries to figure out how to stitch them together to get a job done. He said that programming today is 「More like science. You grab this piece of library and you poke at it. You write programs that poke it and see what it does. And you say, 『Can I tweak it to do the thing I want?」. The 「analysis-by-synthesis」 view of SICP — where you build a larger system out of smaller, simple parts — became irrelevant. Nowadays, we do programming by poking.
As to why they chose Python as an alternative, Sussman joked that it was 「late binding」 decision. Python has a ton of libraries that make it applicable to many types of projects that instructors might want to assign (like writing software to control a robot.)
Sussman admitted that the SICP curriculum was 「more coherent」 than what they have now and that they still don』t know what the right curriculum should be.
網上能找到該文翻譯. 大意是SICP的作者認為SICP已經不適合培養現代軟體工程師,以前的軟體工程師通過組合簡單的功能來完成複雜功能的構建,現在功夫都花在看眾多庫的文檔來"刺探式編程"??
我也糾結要不要花功夫看了..拿來膜拜是被高估了,拿來入門是被低估了。。。
時不時冒出來個non trivial 的演算法你讓新手怎麼看得下去入門的話還是隔壁 The Little Schemer 輕鬆愉快沒有太高估。讀過和沒讀過的,差別很大。讀過的,基本上代碼結構清晰,邏輯簡潔清楚,bug少,可復用性高沒讀過的,很難做到上面幾點學學函數式語言絕對有好處。
只要你有收穫,被高估和被低估,沒有區別
喜歡用「echo」命令的人會說「echo」是Linux系統管理員必須掌握的命令,然而你用「printf」代替「echo」也不會影響你成為優秀的系統管理員,但是不得不承認,「echo」是一個很好的工具。同理,SICP是一本好書,居家旅行必備,被人喜歡,沒有高不高估的說法。誰會去高估一本書?
我覺得最最可惜的一點是 。。。
我讀完SICP,感覺那個編譯器不是自己寫的
是對書抄的。。。所以沒那麼強的成就感同理於那個元循環解釋器。。。雖然很美但是我覺得還是不夠極簡,所以我嘗試實現宏,把所有除了副作用的功能用宏+lambda實現,set!,define我不得不也放入核心,set-car! 和 set-cdr!因為cons本身就是一個lambda閉包,還能用SICP教過的「把』修改指令『應用於cons形成的閉包做出OO效果」的方法。。。然而這樣還是丑爆了。。。然而實現宏的時候,由於完全沒有科班經歷,我完全想不到怎麼解決衛生宏的問題,我能想到的是用組合子,這樣就不會引入多餘的變數,污染源代碼了。。於是我又放棄了僅以lambda為核心,把SKI加入核心。。然後終於要開始動手了,我才發現,SICP忘記叫我怎麼做測試了。。。。我寫出來的編譯器,如果過不了測試,哪連玩具都算不上。。。於是入了Coq的坑,因為我覺得測試集可能會漏。。。所以,最最可惜的一點是,SICP沒有教我怎麼做測試。。。。有種五虎斷門刀認為易筋經被高估的即視感
問別人不如自己判斷
這本書的作用是關於計算以及符號計算何以可能的導論教材;簡單來說是「如果計算概論用這本書做教材,豈不美哉」
如果被流放到荒島度過餘生並且只允許帶一本書(不限類型)的話,我選擇SICP.
這本書就是時間黑洞。如果你想全部讀完,習題全部cover掉,需要花費非常多的時間。但是很值得一讀。不過拿來入門真的是太難了,很難堅持讀下來。
編程領域的bible
這麼多學術性的東西,都是假定在cpu性能、內存容量無限的基礎上。
還在看,我只覺得你們都好牛逼,「不過是MIT的入門書」,的確是入門書,不過不要忽略了是MIT,一個個好厲害似的,show code
唯一讓我覺得彆扭的就是寫scheme。
樓上也有人說了,老美夸人是「毫不吝嗇」的,有誇張成分。基本擼完前3章。書中的有些術語很難理解,但是思想絕對是永不過時的。比如「抽象屏障」,讓人覺得迷迷糊糊,其實直接說「分層」就容易多了。最讓我覺得寫得不太好的是論述「相等」的那一節,說得很隱晦,htdp里直接說是「外延相等」和「內涵相等」,豁然開朗(儘管內容是一樣的)。流的實現那一節不能按書上的代碼直接實現,沿用「宏」,作者沒明說。
目前正在拜讀SICP,唯一不適應的是用了Lisp這種語言,語法簡直顛覆三觀。和其它的函數式編程語言相比,結構不是特別的清晰,當然其中的理論知識還是蠻豐富的,希望自己能堅持看完吧,慢慢啃!
一本入門書,哪來什麼高估低谷。MIT Berkeley 都是拿來新生入門課。書的內容也不難,晦澀的原因是歷史比較久一些概念太老,一時難以適應。
我覺得是被吹的過高了。他對初學者很有幫助,那些例子和習題很有啟發性。如果已經學過haskell或者python這些現代語言,已經了解編程語言的基本概念,我覺得起碼前三章已經沒有細看的必要了。很多推薦這本書或者其他所謂名書的都是所謂葉公好龍的初學者,或者水平不高的裝逼犯。。。本科生的課本有啥可吹牛逼的。。。
比起灌輸知識,這本書最大的作用是訓練編程思維作為一本Scheme教材,這本書絕對是被高估了作為一本編程入門/進階書籍,這本書怎麼吹都不為過同樣的,如果想幾周內立竿見影的效果,大概是不現實的但如果能夠有耐心慢慢看慢慢思考體會的話,這本書絕對是神作
推薦閱讀:
※SICP中環境模型可以等價為龍書中(第七章)講的的運行時刻環境么?
※怎麼理解邱奇計數?
※sicp中的流模式在實際開發中有什麼應用?
※《深入理解計算機系統》和《計算機程序的構造和解釋》這兩本書有什麼異同點?
TAG:SICP |