【译】为什么计算机程序的结构和解释很重要

原文:https://people.eecs.berkeley.edu/~bh/sicp.html

2011年,为庆祝麻省理工学院建校150周年,《波士顿环球报》列出了在 MIT 那里开发的最重要的创新。他们希望我能解释一下 SICP 的重要性,这是我发给他们的:

SICP 在许多方面都是革命性的。最重要的是,它极大地提高了介绍性知识内容的标准计算机科学。在 SICP 之前,第一门 CS 课程几乎都是完全充满了学习某种编程语言的细节。 SICP 是关于从细节中退一步来学习大局的方法思考编程过程。它将注意力集中在抽象的中心思想——从具体中发现一般模式问题并构建体现每种模式的软件工具。它使大量使用函数作为数据的想法,这是一个很难学习的想法最初,但一旦学会就会非常强大。(这也是同样的想法,以不同的形式,这使得新生微积分变得非常困难,甚至对于在早期数学课程中表现良好的学生。)它符合第一门计算机科学课程三种不同的编程范例(函数式、面向对象和声明性),而大多数其他课程甚至没有真正讨论哪怕是一种范式。

另一项革命是选择Scheme作为编程语言。直到今天,大多数计算机科学的介绍都使用当下的“热门”语言:从 Pascal 到 C 到 C++ 到 Java 到 Python。该方案从未在工业界得到广泛应用,但它是完美的 CS 简介语言。一方面,它有一个非常简单的,一切事物的统一符号。其他语言有一种表示法变量赋值,条件执行的另一种表示法,两个或另外三个用于循环,还有一个用于函数调用。课程教这些语言至少要花一半的时间来学习符号。在我在伯克利的基于 SICP 的课程中,我们花了第一个小时关于符号,这就是我们所需要的;在这个学期剩下的时间里,我们学习思想,而不是语法。此外,尽管(或由于)其简单性, Scheme是一种非常通用的语言,使我们能够检查这三种编程范式,特别是让我们看看如何 实现了面向对象编程,所以OOP语言似乎没有对我们的学生来说就像魔法一样。 Scheme 是 Lisp 的一种方言,所以它很棒将函数作为数据处理,但相比之下它是一个精简版本到更常用于专业编程的那些,最少的花哨的东西。阿贝尔森和萨斯曼非常勇敢以尽可能最好的教学语言教授他们的入门课程,而不注意所有工作都在进行中的抱怨其他一些语言。他们认为,一旦你了解了伟大的想法,这也是我的经验,学习另一种编程语言不是一件大事;这是周末的一件苦差事。我告诉我的学生,“语言你将在其中度过大部分工作生涯的方式尚未发明,所以我们无法教你。相反,我们必须为您提供您所需要的技能需要学习新语言的出现。

最后,SICP对大学新生的未来充满信心预期完成。 SICP 学生编写编程解释器语言,通常被认为更适合大三或大四的学生。文本本身并不容易阅读;它没有侧边栏并且是彩色的盒子和有趣的图片代表了现代教科书的目标注意力持续时间低的学生。没有多余的练习;每个锻炼教会了一个重要的新观念。它使用大词。但它回报了细读;每句话都很重要。

据统计,基于 SICP 的课程只占少数。但这本书其影响力超出了少数人。给后来的很多人带来了启发作者有意识地努力达到 SICP 标准的教科书。这方案作为学习者语言的使用已被其他人扩展了超过范围从中学到研究生。即使是比较主流的课程尽管大多数人对编程范式的想法变得敏感他们专注于面向对象的编程。计算机的想法科学应该是关于思想,而不是完全关于编程实践,此后扩大到包括有关背景和社会的非技术想法计算的影响。

SICP 本身拥有悠久的历史,这对于入门 CS 来说是非常不寻常的教科书。通常,一本书的寿命取决于它所采用的语言的流行程度。被附上。 SICP 已强劲发展超过 25 年,且没有任何迹象绝版。在那段时间里,计算发生了巨大的变化,从巨型大型计算机到个人计算机到移动互联网电话。然而这些变化背后的重要理念仍然是一样的,而且 SICP 很好地捕获了这些信息。

自 1987 年以来,我一直在教授基于 SICP 的课程。该课程已发生变化在此期间逐渐增加;我们添加了有关并行性、并发性的部分控制、用户界面设计和客户端/服务器范例。但它是本质上仍然是相同的课程。每隔五年左右,就会有人教师建议我们的第一门课程应该使用 X 语言;每个那时,我说“当有人写出世界上最好的计算机科学书籍时使用 X 语言,那就没问题了”,到目前为止,教员们总是投票支持继续学习 SICP 课程。我们很快就会知道该课程是否可以度过我自己的退休生活。

(脚注:不。伯克利大学新开设的第一门专业课程使用 Python,以及试图保留 SICP 的思想(和一些文本)的讲义。)

最近的讨论更加激烈,因为麻省理工学院经历了一场重大的变革重新设计低年级 EECS 课程。麻省理工学院以外的人倾向于将重新设计总结为“麻省理工学院决定切换到 Python”,但这不是一个感性的描述。麻省理工学院决定放弃课程围绕主题组织(编程范例,然后是电路,然后是信号处理,然后是架构)到围绕应用程序组织的课程(让我们构建一个机器人并对其进行编程;让我们构建一个手机并对其进行编程)。他们课程的一切都必须重新组织;的选择编程语言是这些决定中最不重要的。他们的新方法是更难教;一方面,每门课程都需要合作伙伴电气工程学院和计算机科学学院。也许及时应用优先的方法将引发一场意义深远的革命这是 SICP 之后的事情,但还没有发生。

根据我的经验,很少有学生意识到他们在我的课程中学到了多少有价值的内容。但是在调查所有的计算机科学专业的学生,SICP成为了最受欢迎的课程之一。回想起来,我经常收到早已离开的学生的邮件,告诉我他们是如何在工作中使用他们的想法的是学生时代不切实际的象牙塔观念。基于函数式编程里面发明的 MapReduce 软件在 Google 上用于数据并行处理帮助消除了象牙塔的声誉。