我们到底需要什么样的课程?

我们到底需要什么样的课程?

上个学期的连滚带爬不禁引我思考,我们到底需要什么样的课程?就上学期而言,ICS是我很喜欢的一门课,虽然它带来了一本几百页的课本、七个lab、无数的自学和讨论、可能还有惨淡的分数。这门课让我喜欢的地方,是我能够清晰地感知到它带给我的收获,从数的表示入手,一步步走入计算机的运行原理,期中后再从链接出发,又一步步向着宏观走去。这门课第一次为我带来了自己是一个学计算机的学生的感觉,也激发了我对计算机科学的兴趣。

与ICS巨大任务量和大量内容相似的是离散数学I。从基数序数讲起,笔锋一转又讲起逻辑,一节课结束逻辑部分后又来到了拓扑,Probabilistic Method,图灵机,图论,线性规划。。。甚至在作业中出现了随机图的内容。此外,在一周的另外一节课中,始终不知道应用场景是什么的具体数学和疯狂掉线的tutorial也总让我挠头。

ICS的成功在于其有着完整的学习链条,虽然内容多、难度大,但是我有明确而详细的课本供参考,有有趣而富有挑战性的lab供练习,还有每周一次的讨论班温故知新。反观离散I,助教虽有雄心壮志,但是实施起来可谓眼高手低。课堂、作业、考试严重无关,即使好好上了课,看了notes,也难以做出作业中的很多题目。这门课想要讲的内容太多,但是真正学起来大多是蜻蜓点水,难以深入。

我以前一直难以理解为什么中国学生在中学阶段如此领先的情况下,大学阶段取得的成绩并没有领先很多。原本一直认为是中国学生在大学阶段不够努力,事实上并非如此,中国优秀学生的勤奋程度不差于世界上任何大学的学生。而主要原因之一就是大学课程编排的落后与低效。我大一第二学期修了一门叫做人工智能引论的课程,感觉这门北大自己开发的课在某种程度上是在学习和模仿ICS的,同样广泛的知识涉及,同样的大班小班课,但是实际上下来给人的感觉也是讲了很多,学会很少。ICS的成功并非在于大胆教授那么多的知识,而是其有勇气在一学期的时间内教好这些内容,并有能力提供足够有效的参考和练习。

ICS的制作难度是超乎想象的,先不提豆瓣接近满分的《深入理解计算机系统》,光是Autolab这一配套练习系统就有着极大的难度。从自动评测防止cheat,再到Y86语言的汇编器和模拟器,制作起来都有极高的时间和经济成本。我记得北大本年度将Autolab系统全面升级到64位,但是也就因此出现了很多bug导致lab全面延期,attack lab需要TA手动评测,最终还取消了网络部分的proxy lab。这也印证了这门课制作上的难度。

我们被人工智能引论、离散数学I等这样的课程耽误了太多的时间,也白白消耗了太多的精力。这样课程的大量出现应该就是中美本科计算机学科差距的体现吧。希望学校能够多多开发一些高质量的课程,而不是喊着要给大学生增负的口号搞些没用的臃肿的累赘。

大学生已经够累了,能不能少些空耗人精力而难有收获的课程?