OCaml 和 CS3110 的历史演绎

1.4. CS 3110 简史

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

曾几何时,麻省理工学院有一门名为 6.001计算机程序结构和解释(SICP) 的课程。它有一本同名的教科书,并且使用了 Scheme,一种函数式编程语言。Tim Teitelbaum 于 1988 年秋季在康奈尔大学教授了该课程的一个版本,非常密切地遵循这本书并使用了 Scheme。

CS 212. Dan Huttenlocher 曾在 MIT 担任 6.001 的助教;他后来成为康奈尔大学的教员。1989 年秋季,他创立了 CS 212 算法表达模式。在 SICP 课程的基础上,他为材料注入了更严格的方法。Huttenlocher 在 1990 年代中期继续开发 CS 212,使用各种本土方言 Scheme。

其他教师开始定期教授该课程。Ramin Zabih 作为麻省理工学院一年级学生的成绩为 6.001。1994 年春季,他在康奈尔大学任教,教授 CS 212。Dexter Kozen(康奈尔大学博士 1977 年)于 1996 年春季首次教授该课程。该课程的最早在线记录似乎是1998 年春季,由 Greg Morrisett 教授在迪伦;这门课的名字变成了计算机程序的结构和解释。

1999 年秋季,CS 212 有了自己的讲义。正如 CS 3110 一样,CS 212 的实例涵盖了函数式编程、替代和环境模型、一些数据结构和算法以及编程语言实现。

CS 312。当时,CS 课程有两门编程入门课程,CS 211 计算机和编程,以及 CS 212。学生选修其中一门,类似于今天的学生选修 CS 2110 或 CS 2112。然后他们选修 CS 410 数据结构。CS 410 最早的在线记录似乎是从1998 年春天开始的。它涵盖了 CS 212 未涵盖的许多数据结构和算法,包括平衡树和图,并使用 Java 作为编程语言。

根据他们选择的课程(CS 211 或 212),学生们正在进入具有不同技能组合的高级课程。经过广泛讨论,教师决定将 CS 211 设为必修,将 CS 212 重命名为 CS 312 Data Structures and Functional Programming,并将 CS 211 设为 CS 312 的先决条件。同时,CS 410 从课程中取消,其内容分为 CS 312 和 CS 482 算法分析简介。Dexter Kozen 在1999 年秋季讲授了 CS 410 的最终产品 。

Greg Morrisett 于2001 年春季推出了新的 CS 312 。他从 Scheme 切换到 Standard ML。Kozen 于 2001 年秋季首次教授它,Andrew Myers 于2002 年秋季首次教授它。Myers 开始从另一本 MIT 教科书《Java 程序开发:抽象、规范和面向对象的设计》(Barbara Liskov 和 John Guttag)中整合有关模块化编程的材料。Huttenlocher 于 2006 年春季首次教授该课程。

CS 3110。2008秋季发生了两个重大变化:语言切换到 OCaml,大学切换到四位数的课程编号。CS 312 变为 CS 3110。Myers、Huttenlocher、Kozen 和 Zabih 分别于 2008 年秋季、2009 年春季、2009 年秋季和 2010 年秋季首次教授修订后的课程。Nate Foster 于 2012 年春季首次教授该课程;Bob Constable 和 Michael George 于 2013 年秋季首次共同授课。

Michael Clarkson(康奈尔博士 2010 年)于2014 年秋季首次教授该课程,此前他在2008 年春季以博士生的身份完成了该课程的首次 TA 课程。他开始修改 OCaml 编程材料的介绍,以纳入 Dan Grossman(康奈尔博士 2003 年)关于通过将编程语言分解为语法、动态和静态语义来学习编程语言的原则方法的想法。Grossman 在华盛顿大学的 CSE 341 编程语言和他流行的 编程语言 MOOC中使用了这种方法。

2018年秋季开始编写这本教科书。它综合了康奈尔大学二十多年来函数式编程教学的成果。用康奈尔晚歌的话来说,

这是我们自己的墙壁的回声
,我们美丽的康奈尔。

分类: 默认 标签: 发布于: 2022-06-27 12:10:20, 更新于: 2022-06-27 12:10:20