緣起
這是一本MIT的本科教材游盲,回想自己讀本科的時(shí)候一直想讀這本書,大概讀了10頁左右就放棄了蛮粮。后面讀研了讀了第一章益缎,做了一定習(xí)題,但是仍舊放棄了蝉揍。其中链峭,原因就不說,看來我也是拖延癥患者又沾。后面工作了弊仪,深感自己對(duì)事物抽象能力的弱熙卡,以及對(duì)自己沒能夠堅(jiān)持做一件事情而痛恨自己。所以開始看SICP一書励饵。
關(guān)于本書的書評(píng)
關(guān)于這本書的評(píng)論驳癌,這里就不多說了,再著不管什么樣的書役听,只有自己去讀去用才知道颓鲜。總之典予,對(duì)于本書的評(píng)論兩極分化甜滨,至于是哪一級(jí),各位自行判斷瘤袖,我這里僅僅提供一些其他相關(guān)的評(píng)論衣摩,如下:
- 豆瓣:sicp評(píng)論
- 知乎:sicp熱點(diǎn)
- quora: sicp-topic
構(gòu)造過程抽象概述
開始的時(shí)候就引用了John Locke的《有關(guān)人類理解的隨筆》中的一段話,話語十分簡(jiǎn)潔而且讓人受益捂敌,現(xiàn)在摘抄如下:
心智的活動(dòng)艾扮,除了盡力產(chǎn)生各種簡(jiǎn)單地認(rèn)識(shí)之外,主要表現(xiàn)在如下三個(gè)方面:
- 將若干簡(jiǎn)單認(rèn)識(shí)組合為一個(gè)復(fù)合認(rèn)識(shí)占婉,由此產(chǎn)生出各種復(fù)雜的認(rèn)識(shí)泡嘴;
- 將兩個(gè)認(rèn)識(shí)放在一起對(duì)照,不管它們?nèi)绾魏?jiǎn)單或復(fù)雜逆济,在這樣做時(shí)并不將它們合二為一酌予。由此得到有關(guān)它們的相互關(guān)系的認(rèn)識(shí);
- 將有關(guān)認(rèn)識(shí)與那些在實(shí)際中和它們同在的所有其他認(rèn)識(shí)隔離開纹腌,這就是抽象霎终,所有具有普遍性的認(rèn)識(shí)都是這樣得到的滞磺。
從上面這句話至少可以看出升薯,我們認(rèn)識(shí)事物或者對(duì)某件事情的理解可以通過組合、對(duì)照(比對(duì))击困、抽象隔離等思維手段搞定涎劈。而第一章中關(guān)于《構(gòu)造過程抽象》一章就是基本就是圍繞上面這段話寫。
基本要素
當(dāng)我們需要解決工作上阅茶、學(xué)習(xí)上還是生活上問題時(shí)蛛枚,往往需要知道一些基本的步驟,除非特別簡(jiǎn)單的問題可以一步搞定脸哀,否則需要將很多措施組合一步一步的解決蹦浦。在程序設(shè)計(jì)的世界,需要處理兩樣?xùn)|西:數(shù)據(jù)和過程撞蜂。與現(xiàn)實(shí)世界中得問題和措施很像吧盲镶。想想我們?cè)诮鉀Q問題時(shí)候是不是運(yùn)用了同John Locke描述的心智活動(dòng)侥袜。在用程序解決問題也是一樣的,如何去描述數(shù)據(jù)和對(duì)其操作的過程呢溉贿,畢竟計(jì)算機(jī)不懂我們所說的中文枫吧,它們之間溝通也有這一套語言,而這些語言必需有著三個(gè)基本元素:
- 基本表達(dá)式:用于表示語言所關(guān)系的最簡(jiǎn)單的個(gè)體宇色;
- 組合的方法:通過它們可以從較簡(jiǎn)單地東西出發(fā)構(gòu)造出復(fù)合的元素九杂;
- 抽象的方法:通過它們可以為符合對(duì)象命名,并將它們當(dāng)作單元去操作宣蠕。
過程抽象
在有了基本要素之后例隆,就相當(dāng)于我們有了一些基本的工具了。在我們面對(duì)比較難或者大問題時(shí)抢蚀,自然而然會(huì)采取分解的動(dòng)作來解決裳擎,就如同“大事化小,小事化了”思币。如何將大事變成小事鹿响,作者使用了求某個(gè)數(shù)的平方根問題來說明,將解決此問題的步驟進(jìn)行分解谷饿,并且每一個(gè)過程完成了一件可以清楚標(biāo)明的工作惶我。這就是過程的抽象。
當(dāng)我們采用方案去解決問題的時(shí)候博投,就需要評(píng)估方法的時(shí)效性了〕窆保現(xiàn)實(shí)世界考慮的比較多,比如時(shí)間毅哗、人力听怕、資金等等。一旦涉及到人的活動(dòng)就會(huì)變得復(fù)雜起來虑绵。而計(jì)算機(jī)的世界里尿瞭,簡(jiǎn)化了很多,考慮時(shí)間和空間翅睛。畢竟人們關(guān)注機(jī)器啥時(shí)候給我干完活声搁,啥時(shí)候出結(jié)果,我們需要投入什么硬件啥的捕发。在我們學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)或者算法的時(shí)候都會(huì)使用一個(gè)叫大O的方法來描述疏旨。而書中都是直接根據(jù)步驟或者分析程序來來推導(dǎo),極為繁瑣扎酷。而本書的作者卻采用先描述過程的計(jì)算過程檐涝,也就是過程是怎么執(zhí)行的,執(zhí)行的形狀是啥,比如,線性谁榜、遞歸(先展開后縮)拉岁、樹型來描述,這一點(diǎn)超級(jí)棒惰爬,讓人看著舒坦喊暖。
知道時(shí)效之后,我們就會(huì)想能不能將解決問題的技巧推廣撕瞧,就會(huì)去抽象陵叽、概括。后面作者求函數(shù)的零點(diǎn)丛版、不動(dòng)點(diǎn)一步一步介紹如何將過程作為參數(shù)(如同生活中的條件)巩掺、返回值(如同其他的幫助)。
結(jié)束
總之页畦,我挺喜歡這本書胖替,現(xiàn)在一直在看,最近剛把第一章看完豫缨,書上的demo也罷還是課后習(xí)題都寫在我們電腦里面測(cè)試一番了独令。具體可以參考我的sicp項(xiàng)目。