6.001 是麻省理工大学 EECS 系的入门课程。我记得 Joel Spolsky 似乎说过,这门课的难度和他在宾州大学时读过的CSE121 如出一辙,因而,这类课程的另一种功效是 —— 让新生们在第一学年结束前,接受巨大的打击,以便评估一下自己是否应该转系。
多年过去,宾州大学已经改用 Java 教授此课,麻省理工大学也亦步亦趋的改用了当下流行的 Python。
为什么?
教材的合著者 Sussman 解释:1980 年代时的技艺和 90 年代中期或 2000年之后的不同。在当时,优秀的程序员花费更多时间思考,代码精炼短小,且和思维的节奏相似。即便如Scheme,也能一气呵成的从头看到末尾。就像是电阻器,当你懂得如何读出色条并且知道额定功率、容差、阻抗和欧姆定率的时候,你就知道了一切。6.001 即是以此为基础,讲授如何理解小段代码,以及,如何使用简单的技巧将它们合并成你想要的大家伙的方法。
不过,Sussman 说,今非昔比。现在,你要纠缠在难于理解和不知谁人攒写的代码中。你得先做一些调查,了解库是如何工作的,或尝试不同的输入,看看代码如何回应。这和 80 年代的工作全然不同,因此需要新的课程。
有趣的是,新的 6.001 的核心是教你如何给一个机器人编程。学期的末尾, 你得让你的机器人动起来。不过,机器人和电阻不同,它需要面对实时变化的环境考验,例如轮组打滑,因此,系统要稳健可靠。这同样和最初的 6.001 讲授的内容不同。
至于为什么是 Python?Sussman 说,也许是因为 Python 已经有了和机器人有关的库吧。
虽然教材已换,Alan J.Peris 在这本术士之术的序言中反复提及的一段话仍是适用的 —— 「乐趣常驻」。