Structure and Interpretation of Computer Programs


程序设计技术与方法


——计算机程序的构造与解释

 

课程简介:本课程面向数学学院和信息学院三年级同学。以MIT著名的Structure and Interpretation of Computer ProgramsSICP)为教科书。每周上课3小时(课堂讲授和讨论),上机2小时。上课时间每周三晚9-11节,地点理科一号楼1114。上机时间另外安排。

 

教科书简介:SICP被世界上一些最著名的大学(如斯坦福、普林斯顿、牛津等)用作程序设计课程的教材,被广泛称誉为“世界上最好的程序设计教科书”。SICP“对计算机科学的教育计划产生了深刻的影响”。SICPSchemeLisp的一种方言)作为基础语言,讨论了程序、编程技术、不同编程模型、程序运行基础、实现(解释和编译)等方面的许多问题。SICP的英文版相关材料(包括各章节全文)网址为http://mitpress.mit.edu/sicp/;中文版《计算机程序的构造和解释》由裘宗燕翻译,机械工业出版社出版(2004)。

与前几年课程的情况相比,本次课程内容将有些变化。课程中适当讨论教科书的一些重要内容与常规(基于C/C++)的程序设计的关系,以及对常规程序设计的可能启示

 

课程和教科书中的亮点:


如果你对程序和程序设计很有兴趣,但不了解下面提到的许多概念,那就值得学习本课程。本课程将有助于你进一步理解什么是计算,如何组织计算过程;理解程序设计的本质;理解程序设计语言本身;结识许多有趣而且有价值的技术。


函数式语言和函数式程序设计:无状态程序设计,基于函数调用和递归。这里将讨论许多重要的编程概念,如尾递归、高阶函数、运行中的函数构造和传递、局部环境、变动性、约束传播、积极求值和惰性求值(消极求值),无穷数据结构,继续传递(continuation passing)等。


函数式程序设计正在对主流编程世界产生越来越大的影响。最新的Java/C# 都声称支持重要函数式概念λ-表达式,Web标准语言XQuery本身就是一个函数式语言,许多广泛使用的动态语言(如RubyPython等)是函数式语言的发展,微软最近也推出了函数式语言F#。函数式语言还贡献了许多重要技术,如递归、动态存储分配、递归的栈实现、闭包、废料收集等。


编程模型:除基本函数式和命令式(基于状态的)程序设计模型外,这里还讨论数据驱动的程序设计、基于流的程序设计、并发、非确定性、逻辑程序设计等。


实现技术:这方面的内容包括将数据作为程序,程序解释器,寄存器机器模型,基本实现技术,程序的编译,存储器分配和废料收集,尾递归优化等。

 

每一位严肃的计算机科学家都应该阅读这本书。它清晰、简洁并富于智慧,适合所有希望深刻理解计算机科学的人们。我们强烈推荐它。

——Mitchell Wand,在《美国科学家》杂志上对SICP的评论