今天看到Andrew Tanenbaum (minix的作者。读过CS的人应该不陌生吧)。在SIGCSE的计算机科学教育杰出贡献奖(Outstanding Constributions of Computer Science Education)上发言的文字材料。A.T在演说里提出十大计算机科学教育的十大准则:
目光长远 (Think long-term)
强调原则,而非事实 (Emphasize principles, not facts)
对重大变革有所准备(Expect paradigm shifts. 翻成范式转变也忒生硬了,不知道有没有标准翻法)
解释事物内在工作原理(Explain how things work inside)
向学生展示怎么驾驭复杂度(Show students how to master complexity)
计算机科学不是科学(Computer science is not science)
在系统角度思考(Think in terms of systems)
讲述理论要适度(Keep theory under control)
拒绝炒作(Ignore hype)
毋忘过去(Don't forget the past)
教学一体,这10大教育准则其实同样适用于CS学习。准则1,2,3, 9告诉我们学习时应当注重思想,而不是某个具体的实现或巧合。今天的热门技术可以转眼明日花黄。OS360的任务控制可能今天没几个人知道了,但进程管理的原理仍然值得学习。编程语言几年一换,但抽象,数据封装,算法原理仍然几十年不变。要想在技术变迁的洪流里不疲于奔命,只有原理优先,以不变应万变。准则3还提出了应对突变的对策:批判性思考,自学,和随时检验自己的假设。第三条尤其重要。套用Steven Seagal(当年我对他的合气道推崇之极
)的电影Under Siege 2: The Dark Territory里那个邪恶工程师Travis Davis的话说:“假设是他妈失败之母"(Assumption is the source of all screw-ups).准则4, 5, 7告诉我们深入了解系统工作原理的重要性。这就是为什么这本书 仍然是CS学生的必读。高德纳早也知道内外兼修的重要性,所以才会在《计算机编程的艺术》里雄辩地阐述了为什么他要用MMIX(一门他创造的汇编)来描速算法。
6和8颇有意思。A.T相当强调CS务实的一面。准则6的最佳注解是一句流行的引言:工程师为了创建而学习,科学家为了学习而创建(Engineers learn to build,. Scientists build to learn). 关于准则7的例子隐隐有理论如果不能刻划现实,就用处不大的意思。这个俺有保留意见。理论本来就是一个演化的过程。无数优秀理论都是由无数人改进不够完美的理论二来。最近重读Klaus Scheider的Verification of Reactive Systems第一章,形式化验证的家谱,就可以看出精彩的理论往往来自一系列向现实逼近的粗糙理论。何况当年看似粗糙的理论因为外界的变化也许就变得有吸引力了呢?这不是没有例子的。
准则10尤其重要。现在的电脑工业出了名的喜欢“重发现”当年的技术。虚拟机不是新鲜东西。垃圾处理不是新鲜东西。delegate不是新鲜东西。匿名函数不是新鲜东西。clsoure不是新鲜东西。OO不是新鲜东西。continuation不是新鲜东西。泛型不是新鲜东西。硬件的进步,软件开发技术的进步,以及理论的进步往往让当年被束之高阁的技术重见天日,再焕活力。所以了解历史绝对有助现实。Andy Kessler的力作How We Got Here(免费书,叙述及其精彩,强烈推荐哈)也可旁证以古为鉴的重要性。