虽然是技术年会,我却跑去听了教育专题研讨论分会场。意外的是,这个分会给了我很多启发。
首先超级感动:国内高校有这么多有责任心的老师,认认真真思考教育、了解学生,热情洋溢地交流教学方法。他们是上海交大软院院长臧斌宇(2002年就开始的系统化教学改革)、北京大学陈向群(主持人)、北航王雷(利用数据分析学生实验行为)、复旦的张亮/高建(AIM教学内核,github: davidgao)。
听完报告,我果然很遗憾自己的操作系统课程水水就过去了。悲哉!难得自己对操作系统那么感兴趣,去没有最大程度地被引导利用。好想回本科系统地学习、实验一遍。另外一个听会感受是:写内核对本科生的要求算很高,就算是北大、上交这类层次的学校,每年也只有二三十人的“拔尖班”学生有能力进行内核开发(开发自己的玩具内核或修改教学内核),然而工业界对系统知识人才目前有求贤若渴之感。那缺失的这部分人才在哪里呢?好在研究生和几年工作经验的人稍稍补上了这类缺口。
我从大一下学期开始,就对计算机底层运行机制非常感兴趣。没记错的话,把注意力真正转移到内核设计实现是在大二上邂逅了日本人的那本《30天》,大二下选修了操作系统概念这门课。然而课如其名,真的只是教“概念”,颇有学习文科课程之感。当时这门课的小实验是unix/linux环境系统编程,就是使用一些API进行多进程、多线程编程。一开始我觉得莫名其妙、浅尝辄止(我想知道fork怎么实现,而不是学习如何利用fork!),不过今天听了上交臧斌宇老师的观点,他认为通过这些系统调用,了解操作系统内核暴露给用户的接口,是学习操作系统一个比较好的切入点。除了小实验,这门课的课程设计是漫无目的地自个儿琢磨uCOS,老师除了布置这个实验外其它一句话没说。听说南信大另外一个教授操作系统的王进老师的实验是在用户态模拟一些内核行为,如内存分配——虽然和上交拔尖班直接真实内核环境编程还差很远,但是上交臧斌宇老师自己也说了,内核编程不能强迫每个同学去做。大学里水完了操作系统这门课,有幸从恩师王金伟那得到一个课题,注意力转移到了Linux内核编程。课题为期一年,这个过程让我深刻体会到操作系统概念教程这门课和实际内核开发之间的鸿沟。在磕磕绊绊完成课题后,也就是大四上学期的尾巴到寒假这两个多月,我参照《Orange’s》设计自己的内核,实现了bootloader、系统调用框架、多进程轮转切换。和复旦高建同学(新偶像!)自己编写的特性丰富的AIM教学内核比起来,我的非常原始。
悔恨的我一度想捧起教科书重新学习操作系统,一度想掏出两年前自己写的内核好好完善完善。可是错过了就是错过了,从另外一个角度看,也没有必要。现在反思操作系统这门课,我觉得课程的目的是理解操作系统,再通过操作系统在系统结构整个领域中至关重要的位置,发散着去理解整个计算机结构,让学生成为一个对“系统知识”有“知识系统”的人,从而能在这个基础上做出自己的工作。而不是,把重新造轮子当作工作,抑或是为了理解操作系统而去理解操作系统,那顶多是解解好奇之渴,作为一个研究生我不能满足于此。操作系统考了多高的分数,实验做得多么精妙绝伦,本身都不是目的,对系统结构整体观念的把握能力是我们该好好培养的。