物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后国治,国治而后天下平 注册 | 登陆

评Tanenbaum的计算机教学十大准则

    荷兰鹿特丹自由大学的Andrew Tanenbaum教授是计算机教育界大名鼎鼎的人物,他写的操作系统、计算机网络等方面书籍是全世界公认的经典教材。
 
    Tanenbaum于1997年获得ACM/SIGCSE的计算机科学教育杰出贡献奖(Outstanding Constributions of Computer Science Education),他在获奖演说中提出了计算机科学教育的十大准则,在此笔者尝试对其一一进行解读。
 
1、目光长远 (Think long-term)
    计算机科学是一门发展及其迅速的学科,任何一个目光短浅限于当前的人和思想都将被马上淘汰,这是计算机科学最重要的特性之一。
    比如MS-DOS,其单用户单任务的设计、不支持连网(早期)等缺陷,即便有微软的大力支持,仍必将淡出历史舞台
    不从教育的教育看,任何一个信息工程,必须考虑以后的升级、优化等进一步扩展的可能,如果只注重当前,就算完成了设计需求,也是一个失败的工程。
    不论作为计算机科学学生,还是计算机从业人员,都不能局限于当前的技术和思考方式,大胆的想,大胆的干,正是计算机科学如此快速发展最大的动力。

2、强调原则,而非事实 (Emphasize principles, not facts)
    科研过程中的总结出的一般结论反映在计算机科学上就是所谓原则。应该在原则的指导下工作,而不是仅凭借自己看到的很有局限性的事实。
    写一个程序,用结构化方法比较省事,也许也比面向对象短一些,运行快一点,这是事实。但并不意味着这个程序就是好的:代码不可重用,你写的代码永远都是你的,而不是别人的;可扩展性不好,这样的代码最多写到一两万行就得停下来。在大型软件工程中面向对象的方法就是一条最基本的原则。
    再进一步,我们应该自己去研究一些原则性的东西,这是很有意义的工作。

3、对重大变革有所准备(Expect paradigm shifts)
    很多时候我们可以看到技术的进步和变革就在眼前,能不能跟上?这就是失败和成功的人区别所在。变革是无所不在的,重大的变革意味着机会,机会从来只给准备好了的人。
    对学生来说,首先是基础知识要牢,这些基础就是上面说的原则,很多新的技术变来变去,基本原则是不会变的。指导性思想有了,再来应对新出现的有血有肉的东西,就是做好了准备。

4、解释事物内在工作原理(Explain how things work inside)
    在计算机科学中,知其然不而知其所以然是一个很容易犯的错误,我们很容易以为自己懂了,会了,但你能解释清楚这个东西到底怎么实现的吗?如果做不到,那么你的发展很会有限,简单的说你就只能跟着别人屁股后面跑,而不能有所创新。
    这和数学很像,你可以知道一大堆定理,但如果你不懂得怎么样去证明它,就永远无法改进它,写出一个新的证明来,而只能套用公式,做一些体力劳动罢了。
    我想学软件的都应该学点组成原理体系结构,应该读读《深入理解计算机系统》一类的书。这也是专业学生比自学者的优势所在。

5、向学生展示怎么驾驭复杂度(Show students how to master complexity)
    算法的复杂度、一个工程的复杂性……都是很重要的概念,李开复先生曾经举了一个关于算法复杂性的很有意思的例子,有兴趣的可以去翻翻《做最好的自己》
    计算机和自然科学最大的不同是它的务实性,我们不是要提出一种做事情的方法,而是要做成一个事情,而且要做得最好。

6、计算机科学不是科学(Computer science is not science)
    这个很有意思,Tanenbaum应该是想拿计算机科学和自然科学来做比较,正如上面所说,自然科学讲究方法,我们需要提出一个能解决问题的方法,而计算机科学不但要方法,还要能实现,不能做出东西来的方法意义不大。
    另一方面自然科学讲究逻辑性,理论都要有一个坚实的基础和逻辑的检验,计算机科学不然,在这里实践是检验真理的唯一标准。
    Tanenbaun这样说肯定还有别的原因,我想不到了。

7、从系统角度思考(Think in terms of systems)
    当年读他老人家的《计算机网络》,很快陷入一章章的具体细节而一头雾水,好不容易读完以后回过头来看第一章,发现什么都明了了。这里第一章就是对整个网络理论的一个系统的阐述。
    往往会有这样的情况,你在这个地方做了局部优化,会影响别的地方的性能,必须得去考虑那里的损失。如果一个优化让全局性能下降了,那还不如不做。
    这点我理解得不是恨透。

8、讲述理论要适度(Keep theory under control)
    这一点是针对教师说的,对我们就可以说“学习理论要适度”,还是个实用性的问题,任何理论都是理论,你把RFC都读完了,也不会间的就配置路由器。
    笔者不好把握这个适度是指的什么程度。以自己水平,再学几年理论也不嫌多,理论比较扎实,实践起来更能理解透彻一些,而且理论也帮你知道了前面说的“事物内在原理”。
    可以这样理解这句话:学理论的时候,不要忘记你最终是要实践的。

9、忽略大而无当的潮流(Ignore hype)
    IT界各种潮流和新的概念太多了,我看到过不少人不停追求这些所谓时髦的技术而忽略了真正的进步。
    真正的大的技术革新实际上并不频繁。
    花很多时间去学习一个热门的东西的时候,应该去想想自己是为了什么。另外不可人云亦云。

10、毋忘过去(Don't forget the past)
    不论技术人员,还是决策者,这点都是至关重要的。建议专业学生多读读IT史,就几十年的事情,看上十几本书就可以深入细节了。读历史也是不要只看表面,要看到错误的思想和错误的决策是怎么产生的,比如李维先生的《Borlang传奇》就说了很多失败的根源,值得思考。

标签: tanenbaum, 教育, 计算机科学

« 上一篇 | 顶部 | 首页 | 底部 | 下一篇 »

引用本文

点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5

发表评论

评论内容 (必填):