跳转至

UW Programming Languages — 华盛顿大学编程语言课程

简介

Programming Languages 是华盛顿大学(University of Washington)在 Coursera 上开设的课程,由 Dan Grossman 教授主讲。这门课使用三种语言 — SML(Standard ML)、Racket 和 Ruby — 来讲解三种不同的编程范式:函数式、函数式(带宏)和面向对象。

这门课的独特之处在于不是教你三种语言,而是通过三种语言让你理解编程语言的核心概念:模式匹配、递归、闭包、类型推断、宏、多态、子类型 vs 参数多态。学完这门课,你再看任何一门新语言时,都能快速识别它的设计模式和核心特性。

Dan Grossman 的讲解被学生评价为"清晰到令人发指",他把复杂的概念讲得简单明了。

先修要求

  • 编程经验:至少熟悉一门编程语言
  • 不需要:SML、Racket 或 Ruby 的前置知识(课程从零教起)
  • 不需要:函数式编程经验

难度

🌟🌟⭐(中等)

课程前半部分(SML 基础)相对容易,后半部分(Racket 的宏系统、Ruby 的对象模型)难度上升。作业有一定挑战性。

学时

约 50-70 小时

  • 视频课程:约 20 小时
  • 编程作业:约 30-50 小时

课程资源

自学建议

  1. 一定要做编程作业。 这门课的作业是核心,不做作业等于没学。作业要求你用 SML、Racket 和 Ruby 实现各种语言特性,是理解编程范式最好的方式。

  2. 不要跳过 SML 部分。 很多同学觉得 SML 不实用就跳过了,但 SML 的模式匹配和类型推断是理解函数式编程的最佳入口。

  3. Racket 的宏系统值得重点学习。 宏是 Racket 最强大的特性,也是理解"代码即数据"这一 Lisp 哲学的关键。

  4. 学完后对比你熟悉的语言。 比如,Java 的泛型是参数多态,Python 的 duck typing 是子类型多态。这种对比能加深你对语言设计的理解。

  5. 这门课适合在学完第一门语言后、学第二门语言前上。 它帮你建立编程语言的"元知识",让你后续学任何语言都更快。

  6. 如果时间有限,优先完成 Part A(SML)和 Part B(Racket)。 Part C(Ruby)相对独立,可以后续补上。