Structure and Interpretation of Computer Programs


程序设计技术与方法


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

 

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


虽然本课程的基本内容以Scheme程序设计技术为主线展开,但是其中的许多内容具有更广泛的意义和参考价值。教科书的主旨并不是讨论巧妙的算法,而是更关注复杂程序的组织技术,复杂系统的功能分解和组合。计算机(软件)系统是人类有史以来开发的最复杂的系统,需要认真地分析和分解已缓解复杂性的影响,提高大型系统开发、调试、维护、升级的工作效率。本课程中讨论了一些有效的系统分解和组织技术,不仅可以用于Scheme passing编程实践,对我们在常规语言和面向对象语言中进行开发也有参考价值。在这一课程中,我们也将适当地介绍书中的一些思想和技术在常规程序设计领域的运用。


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

 

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


课程和教科书中的一些概念和亮点:


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


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


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


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

 

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

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