今天上午我上了暑期课程中《操作系统》的第一堂课,这篇文章里的内容就是我在开课后20分钟内想到的。
从我学了不下10门大学计算机专业课程里,我发现每门课的第一节课都是最简单的。内容也相当单一,教授无非是介绍一下自己的办公室位置、联系方式、接待时间,以及课程大纲,包括课程内容,和作业、实验与考试的次数、时间以及占总成绩的比值。介绍完课程大纲后,有可能还剩余一点时间,教授会用来讲课程的第一部分,多数也是总括性的内容,不是很难。回想一下我上过的其它课程,估计所有的大学课程都是如此。
比如我刚才上完的《操作系统》的第一节课,虽然暑期的课程时间要长一些,但老师的第一节课能讲到的还是一些关于操作系统的发展与演化,从线性系统讲到了分时系统。而这些知识对于一个使用Linux的人早已经当作稗官野史背的滚瓜烂熟了。试问哪个用Linux的人没有读过Eric Raymond写的《黑客文化简史》和Marshall Kirk McKusick写的《Berkeley二十年UNIX历史》呢?因此这节课并没有什么值得看的东西。
这样的第一节课看上去相当自然与正常,但我经历了这么多课后感觉这种模式有个很大的缺点:第一节课太简单了。问题的关键在于学生都是有惰性的,上课时发觉课上没讲什么东西,下了课也不知道该复习什么,于是就只好做其它事情。这样一来,当以后课程内容逐渐复杂,学生一旦没有及时察觉,很容易就会吃不消。我之前就吃过好几次这样的亏!
前几天我到读良葛格写的《反思“Hello World”》一文,现在觉得里面讨论的与这篇文章有很相似的地方。良葛格说到自从《K&R》开始,Hello World程序就成了编程语言教学课本的第一个程序。然后人们都过于宣扬了“计算机程序设计就像‘Hello World’程序一样简单”的想法,导致了人们对于程序设计的复杂度认识不足。
而更前的几天(大概一个月之前)我看了描述传奇数学家约翰纳什的事迹的电影《美丽心灵》,里面有一个情节是纳什毕业后去了MIT,为了逃避给学生讲授“过于简单”的多变量微积分课程,在第一节课上就给了学生一个非常复杂的问题让学生做,而在后来就忘了去上课。我觉得教授在第一节课给学生一点稍微复杂的“干货”大概是一个差不多的解决方法(当然不是让教授像纳什一样跷课:))。