扼杀新思想最有效的手段莫过于将其置于教育系统之神龛。教科书出版者、认证机构、行会组织、大学入学考试命题人——一旦囿于成见,便会困于彼此间的成见,阻碍新思想的发展。是故,常常看见学生修习灭亡之国的“现代”地理志,常常看见学生修习被计算器淘汰的对数表。且于计算机科学,入门课程困于过气十来年的教学法,此法被奉为圣典时,是值1980s中期,此间,大学入学考试委员会批准的一门大学预科考试便是基于Pascal。
本书为摆脱上述困境指明了道路。它强调编程乃想法表达之途径,甚于仅是指挥电脑执行任务。
Julie,Gerry Sussman 和我都受宠若惊,因Harvery 和 Wright 把他们革命性的计算机科学导论视为SICP的“前传”。编写SICP期间,我们常引用美国大计算机科学家Alan Perlis 的箴言。Perlis是Algol编程语言的设计者之一,此语言始于1958年,构筑了形式化和精确化的传统,Pascal就很好地体现了。如下引言乃Perlis不得已而言于1975年,早AP考试9年:
Algol是个祸根。用它无趣味。Algol现已是管道工联盟的章程(code)。它助你设计正确的结构而不至崩溃,此过程却毫无乐趣。 写Algol程序没有愉悦之感。它需要的是必不可少的劳力,和对枯燥细节的全神贯注。
Harvery 和 Wright 的导论起于另一个知识传统,它源自人工智能和Lisp的研究。使用本书走进计算科学,要关注两个基本技能。
一是符号化编程的概念。这就意味着你不仅要处理数字和符号,更要处理结构化的数据集合——单词是一张字母表(a list of),句子是一张单词表,段落是一张句子表,文章是一张段落表,如此种种。你汇集数据依照的是自然化划分,而非依据其最小组成。两者的差异,相当于“找出句中第三个单词的第五个字母”与“扫视句子,见两空格后停下,接着再扫四个字母,返回下一个字母。”
二是使用高阶函数的技巧。这就意味着你不只是写程序,更是写会写程序的程序。因之,你可在已有方法(method)上引导(bootstrap)出更为强大的方法。
此二技当属核心,编程入门课概莫能外,Harvery 和 Wright 就是这么做的。其本质原理是,视对象为通用的部件,用灵活的方法去拓展组合,而不是小片段,即拼凑成僵硬的构造物。
你若使用此书,当去思索想法之表达,而非句法之细节,当去设计自己的语言,而非记忆他人的规则。此类行为,将改变你的人生观——不仅仅只针对编程,更是针对将设计作为重要一环的任何领域。这是因为,你是学习欣赏部件间的关系,而非专注孤立的片段。再次引用Alan Perlis的箴言:
人们思考事物,依据句型、成语和词组,再也不是拣抹子、和(huo)西门汀、一块块地砌砖。万里长城,矗立千年,已为名迹。而其建造,定当无趣。
Hal Abelson