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

2020-10-30 06:02:47

另一场革命是选择Scheme作为编程语言。直到今天,大多数计算机科学导论都使用任何当时流行的语言:从Pascal到C到C++,从Java到Python。Scheme从未在工业中广泛使用,但它是介绍CS的完美语言。首先,它对所有东西都有一个非常简单、统一的符号。其他语言有一种用于变量赋值的表示法,另一种用于条件执行的表示法,两三种用于循环的表示法,还有另一种用于函数调用的表示法。教授这些语言的课程至少有一半的时间花在学习符号上。在我在伯克利基于SiCp的课程中,我们花了第一个小时记法,这就是我们所需要的;在剩下的学期里,我们重新学习思想,而不是句法。此外,尽管(或因为)它的简单性,Scheme是一种非常通用的语言,这使得我们有可能研究这三种编程范例,特别是让我们看到面向对象的编程是如何实现的,所以OOP语言在我们的学生看来不像是魔术。Scheme是Lisp的一种方言,所以它在处理数据功能方面很棒,但与更常用于专业编程的版本相比,它是一个精简的版本,只有最少的花哨。Abelson和Sussman非常勇敢地用尽可能好的教学语言教授他们的入门课程,对所有工作都是用另一种语言授课的抱怨置之不理。他们想,一旦你学会了大创意,这也是我的经验,学习另一种编程语言不是什么大不了的事;这是周末的一件苦差事。我告诉我的学生,你们职业生涯的大部分时间都要用的语言还没有发明出来,所以我们不能教你们。取而代之的是,我们必须教给你学习新语言所需的技能。最后,SICP对大学新生能够取得的成就抱有坚定的乐观态度。SICP的学生编写程序语言的翻译器,这通常被认为更适合大三或大四的学生。文本本身并不容易阅读;它没有任何现代教科书中典型的侧栏、彩色方框和有趣的图片,这些都是针对注意力不集中的学生的典型。没有多余的练习;每个练习都教会了一个重要的新概念。它用的是大词。但仔细阅读是值得的,每句话都很重要。据统计,基于SiCp的课程一直是一小部分。但这本书的影响力超出了这一少数群体。它激励了许多后来的教科书,它们的作者有意识地试图达到SICP的标准。从中学到研究生院,图式作为学习者的一种语言的使用已经被其他人推广到了各个领域。即使是更主流的课程也对编程范例的概念变得敏感,尽管它们大多集中在面向对象的编程上。计算机科学应该是关于思想的想法,而不是完全关于编程实践的想法,已经扩大到包括关于计算的背景和社会影响的非技术想法。SiCp本身就有很长的寿命,这对于介绍性的CStextbook来说是非常不寻常的。通常,一本书的寿命只能与它所依附的语言时尚一样长。SiCp的强势已经持续了25年之久,并没有显示出绝版的迹象。在这段时间里,计算发生了巨大的变化,从巨型大型计算机到个人计算机,再到手机上的互联网。然而,这些变化背后的大想法仍然没有改变,而且SICP很好地捕捉到了这些想法。自1987年以来,我一直在教授一门以SiCp为基础的课程。随着时间的推移,课程发生了渐进式的变化;我们增加了关于并行性、并发控制、用户界面设计和客户端/服务器范例的章节。但它本质上仍然是同一条路线。大约每隔5年左右,教职员工就会有人建议我们的第一门课程应该改用X语言;每次当有人用X语言写出世界上最好的计算机科学书籍时,我都会说,那会很好。到目前为止,教员们一直投票支持继续使用SICP课程。我们很快就会知道这门课程是否能让我自己退休。(脚注:不是。伯克利分校为专业开设的第一门新课程使用的是Python,课堂讲稿尽量保留SICP的思想(和一些文本)。

最近的讨论更加尖锐,因为麻省理工学院对他们的低级EECS课程进行了重大的重新设计。麻省理工学院以外的人倾向于将这种重新设计归结为麻省理工学院决定改用Python,但这并不是一个有洞察力的描述。麻省理工学院决定从围绕主题(编程范例,然后是电路,然后是信号处理,然后是体系结构)组织的课程转变为围绕应用程序组织的课程(让我们构建和编程机器人;让我们构建和