CS 3110 的简要历史

本书是康奈尔大学 CS 3110 课程的主要教材。该课程已经存在超过二十年,始终教授函数式编程,但并不是总使用 OCaml。

曾经有一门名为 MIT 的课程 6.001 结构和计算机程序解释(SICP)。它有同名教材,并使用 Scheme,一个函数式编程语言。蒂姆·泰特尔鲍姆在 1988 年秋季于康奈尔大学讲授了该课程的版本,紧跟书本的脚步,使用 Scheme。

CS 212。丹·胡特纳勒曾担任麻省理工学院的 6.001 课程助教;后来他在康奈尔大学成为一名教授。在 1989 年秋季,他开设了 CS 212 算法表达方式课程。基于 SICP,他对该课程材料进行了更加严格的处理。胡特纳勒继续开发 CS 212,直到 1990 年代中期,为此他使用了各种家 grown 的 Scheme 方言。

其他教师开始定期讲授这门课程。Ramin Zabih 在麻省理工学院(MIT)担任学生时曾修读过 6.001 课程。在 1994 年春季,他在康奈尔大学担任 faculty,教 CS 212 课程。Dexter Kozen(康奈尔大学博士 1977 级)于 1996 年春季首次讲授这门课程。该课程最早的在线记录似乎是 1998 年的春季,由 Greg Morrisett 在 Dylan 中讲授;该课程名称已经变为计算机程序结构与解释。

1999 年秋季,CS 212 已经有了自己的讲义。与 CS 3110 一样,那个 CS 212 的实例仍然涵盖函数式编程、替换和环境模型、某些数据结构和算法,以及编程语言实现。

CS312。当时,计算机科学(CS)课程中有两个入门编程课程,即 CS211《计算机和编程》和 CS212。学生们选择一个或另一个,就像今天的学生选择 CS2110 或 CS2112 一样。然后,他们学习了 CS410《数据结构》。CS410 最早的在线记录似乎来自 1998 年春季,它涵盖了许多数据结构和算法,包括平衡树和图,并使用 Java 作为编程语言。

根据学生所选的课程,CS211 或 212,他们在进入高级课程时拥有不同的技能集。经过充分讨论,教职员工决定将 CS211 设置为必修课,将 CS212 重新命名为 CS312 数据结构和函数式编程,并将 CS211 作为 CS312 的先决条件。在同一时间内,CS410 从学科中被删除其内容被分配给了 CS312 和 CS482 算法分析介绍课程。 Dexter Kozen 在 1999 年秋季学期中教导了 CS410 的最后一堂课。

格雷格·莫里塞特在 2001 年春季开设了新的 CS312 课程。他从 Scheme 转换到标准 ML。库兹恩首次讲授该课程是在 2001 年秋季,安德鲁·迈尔斯则是在 2002 年秋季。迈尔斯开始将《Java 编程开发:抽象、规范和面向对象设计》中的一些材料纳入课程教学,这本书是巴拉·利斯科夫和约翰·古塔格的著作。胡特伦洛赫尔首次讲授该课程是在 2006 年春季。

CS3110。2008 年秋季有两个大变化:语言转换为 OCaml,大学转换为四位数字课程号。CS312 变为 CS3110。Myers、Huttenlocher、Kozen 和 Zabih 首次在 2008 年秋季、2009 年春季、2009 年秋季和 2010 年秋季分别讲授修订课程。Nate Foster 首次在 2012 年春季讲授该课程;Bob Constable 和 Michael George 第一次共同讲授是在 2013 年秋季。

迈克尔·克拉克森(2010 年康奈尔大学博士)首次讲授该课程是在 2014 年秋季学期,作为博士生在 2008 年春季学期担任助教。他开始修订 OCaml 编程材料的展现方式,以便将丹·格罗斯曼(2003 年康奈尔大学博士)的关于以语法、动态和静态语义为基础的学习编程语言的方法融入其中。格罗斯曼在华盛顿大学计算机科学与工程系 CSE 341 编程语言课程中,以及他的人气 MOOC 《编程语言》中也使用该方法

2018 年秋季,这本教科书的编写开始了。它综合了康奈尔大学超过二十年的函数式编程教学成果。在康奈尔大学晚钟歌中说到:

是墙上的回响 我们自己的,美丽的康奈尔。