扼殺新思想最有效的手段莫過于將其置于教育系統(tǒng)之神龕。教科書出版者、認(rèn)證機(jī)構(gòu)、行會(huì)組織、大學(xué)入學(xué)考試命題人——一旦囿于成見,便會(huì)困于彼此間的成見,阻礙新思想的發(fā)展。是故,常??匆妼W(xué)生修習(xí)滅亡之國(guó)的“現(xiàn)代”地理志,常??匆妼W(xué)生修習(xí)被計(jì)算器淘汰的對(duì)數(shù)表。且于計(jì)算機(jī)科學(xué),入門課程困于過氣十來年的教學(xué)法,此法被奉為圣典時(shí),是值1980s中期,此間,大學(xué)入學(xué)考試委員會(huì)批準(zhǔn)的一門大學(xué)預(yù)科考試便是基于Pascal。
本書為擺脫上述困境指明了道路。它強(qiáng)調(diào)編程乃想法表達(dá)之途徑,甚于僅是指揮電腦執(zhí)行任務(wù)。
Julie,Gerry Sussman 和我都受寵若驚,因Harvery 和 Wright 把他們革命性的計(jì)算機(jī)科學(xué)導(dǎo)論視為SICP的“前傳”。編寫SICP期間,我們常引用美國(guó)大計(jì)算機(jī)科學(xué)家Alan Perlis 的箴言。Perlis是Algol編程語(yǔ)言的設(shè)計(jì)者之一,此語(yǔ)言始于1958年,構(gòu)筑了形式化和精確化的傳統(tǒng),Pascal就很好地體現(xiàn)了。如下引言乃Perlis不得已而言于1975年,早AP考試9年:
Algol是個(gè)禍根。用它無趣味。Algol現(xiàn)已是管道工聯(lián)盟的章程(code)。它助你設(shè)計(jì)正確的結(jié)構(gòu)而不至崩潰,此過程卻毫無樂趣。 寫Algol程序沒有愉悅之感。它需要的是必不可少的勞力,和對(duì)枯燥細(xì)節(jié)的全神貫注。
Harvery 和 Wright 的導(dǎo)論起于另一個(gè)知識(shí)傳統(tǒng),它源自人工智能和Lisp的研究。使用本書走進(jìn)計(jì)算科學(xué),要關(guān)注兩個(gè)基本技能。
一是符號(hào)化編程的概念。這就意味著你不僅要處理數(shù)字和符號(hào),更要處理結(jié)構(gòu)化的數(shù)據(jù)集合——單詞是一張字母表(a list of),句子是一張單詞表,段落是一張句子表,文章是一張段落表,如此種種。你匯集數(shù)據(jù)依照的是自然化劃分,而非依據(jù)其最小組成。兩者的差異,相當(dāng)于“找出句中第三個(gè)單詞的第五個(gè)字母”與“掃視句子,見兩空格后停下,接著再掃四個(gè)字母,返回下一個(gè)字母?!?/p>
二是使用高階函數(shù)的技巧。這就意味著你不只是寫程序,更是寫會(huì)寫程序的程序。因之,你可在已有方法(method)上引導(dǎo)(bootstrap)出更為強(qiáng)大的方法。
此二技當(dāng)屬核心,編程入門課概莫能外,Harvery 和 Wright 就是這么做的。其本質(zhì)原理是,視對(duì)象為通用的部件,用靈活的方法去拓展組合,而不是小片段,即拼湊成僵硬的構(gòu)造物。
你若使用此書,當(dāng)去思索想法之表達(dá),而非句法之細(xì)節(jié),當(dāng)去設(shè)計(jì)自己的語(yǔ)言,而非記憶他人的規(guī)則。此類行為,將改變你的人生觀——不僅僅只針對(duì)編程,更是針對(duì)將設(shè)計(jì)作為重要一環(huán)的任何領(lǐng)域。這是因?yàn)椋闶菍W(xué)習(xí)欣賞部件間的關(guān)系,而非專注孤立的片段。再次引用Alan Perlis的箴言:
人們思考事物,依據(jù)句型、成語(yǔ)和詞組,再也不是揀抹子、和(huo)西門汀、一塊塊地砌磚。萬里長(zhǎng)城,矗立千年,已為名跡。而其建造,定當(dāng)無趣。
Hal Abelson