2005年7月,正是我在ACM班学习的第二个暑假,我和同班同学留在学校里完成一个编译器项目设计,即非常有名的Tiger编译器。当时当助教的是李磊和刘巧玲学长。从那时开始到第二年的3月,我们又在上一届学长的指导下设计完成了Nachos操作系统和Fatworm数据库管理系统。当时我觉得本科就能做助教是一件非常棒的事情,于是在我马上就向俞老师申请担任04级的助教了。
一开始和我搭档的是同一届的周牧昕、曲文涛和钱风,后来是04级的李沐、李博、孙晓锐、连晓晨,再后来就是05级的田远、韩玮、张康、李冰,06级的陈相如、陈天奇、潘俊峰、黄桑霞、朱一和等人了。到这可以算第一阶段,在这个阶段参加助教工作的同学比较少,不过他们用优秀的业务素质和极大的热情弥补了这个缺陷。李沐为几个课程设计制作的网页至今还有很高的访问量;钱风编写过很详细的设计文档,很多人都喜欢研究他的程序;陈相如自己搭出了一台服务器;田远、陈天奇构造了很多高质量的测试数据;还有潘俊峰为组成和网络实验做了很多开创新性的工作。
在这几年的时间里我们做了不少工作,譬如建设课程网站、收集资料和数据、安排进度、讲课答疑、设立讨论组、指定评分标准,组织面试等等。有一些想法是在和同学们的交流中产生的。譬如郭佳骋就建议用SVN管理代码,而之前都是用FTP来收发作业的。使用版本管理系统有不少好处:它支持撤销操作,也不怕本地系统崩溃(每年夏天总是有学生抱怨自己硬盘烧掉了),还能让助教了解所有学生的进度,如果发现有人一下子提交了很多代码,我们就要怀疑他是不是在抄袭赶工了。
2009年之后,俞老师建议我扩大助教团队的人数,因为他意识到设置助教不但对低年级的学生有好处,对高年级的学生也是一种锻炼,为此还特意开了一门叫做《教学实践》的课程。从此以后助教的人力资源就宽裕多了,可以算作是进入了第二个阶段。这一阶段我们想做的事情首先是评测自动化,乌辰洋和陈相如花了很多心思,目的是让助教变成大型IT公司的测试团队,能够每天利用服务器自动进行nightly build。学生如果第一天递交代码,他在第二天早上就能收到结果,积极性自然也提高了。其次是重新规划课程网站,使得这些网站不但可以用来通知上课时间,也能提供完整的作业要求和设计指导,便于自学或者复习。这一想法是张康提出的,不过最后整个网站基本都是贾枭带着基建组的一大帮同学做的。
这些制度性的规范接近完成的时候,下一步的工作就应该是对课程设计的内容进行优化调整了,也就是说从2012年开始,应该算作第三阶段的开始了。首先的一个想法是,确定哪些实验是核心。编译器、操作系统以及CPU设计,构成了一个基本但完整的软硬件环境,看来这三个实验是能整合到一起的,我们应该把它们看作是一个实验的三个部分,更强调它们的整体性。这些实验最好能安排在一个学年里,完成它们会给学生带来很大的成就感。之前这三个实验是三门独立的课程,内容显得太多了,我觉得只需要保留精华即可,有些细节上的东西不提也罢。譬如编译器中的逃逸变量和静态链——现在已经很少有命令式语言采用这些概念了,Tiger编译器中还存在着。当然做过的同学都知道这对理解frame很有好处,其实如果先不理会静态链,等做完一个原型再来思考这个问题,也是很简单的。如果在一开始就提出全部要求,对初学者来说确实是不太友好的。
上面讲的是课程要求,还有一个重要的问题就是怎么教学生做。我倾向于多利用设计模式来表达软件架构的逻辑。譬如编译器部分,visitor模式,façade模式,memento模式都是很自然就能用上的。其实不少同学在完成课程设计的时候,都不自觉地用到了这些模式,但我觉得如果能仔细分析一下的话,这个作业就不但能帮助理解计算机的软硬件环境,而且还能在学习设计模式的时候获得第一手的资料了。
助教团队坚持了这么多年,经验教训很多,不少事也让我很感动。首先选出一个好团队就很困难,成员的素质是一方面,另一方面还要考察是不是有合作精神和责任感。其中团队的负责人更加重要,他还要懂得怎么和人协调交流,我的原则是起码他要为别人着想,不要我行我素,在班级里人缘好的就能过关了。其次,如果想激励学生,一定要多用奖励机制,而不要用惩罚机制。虽然有的时候,这两者就是一个东西,但效果完全不一样。比如收作业,如果制定一个晚交扣分的规则,大部分就人会掐着截止时间交。如果变成早交加分的规则,那么几乎人人都争先恐后地交作业了。以前我们的评分标准都是从满分开始向下扣除的,现在时不时地设立一些加分任务,虽然在无形之中要求学生做得更多一点,也不会有人提出异议,不少任务都完成得很好。
临近期末的时候,助教和学生都会忙得不可开交。大二的助教在给大一考试编写数据,大三的助教一边正在测试大二的程序,一边还要对付大四助教的催促,而研究生们个个都被各种会议的deadline赶着向前走,到了晚上一两点钟,很多人还在线上,一个小时之内就会收到二三十封邮件。这是一个非常有活力的集体,我为能在ACM班里担任助教工作而感到非常自豪。
简介: 马融,男,2003级ACM班,毕业于上海市实验学校,目前在交大攻读博士学位,导师是密码学专家曹珍富教授。兴趣爱好是数学和阅读。