这学期9月中旬申请到了一门本科生课的助教(TA),是《高级C语言编程》,是一门拥有180人左右的大课。这是第一次当助教,充满新鲜感,最开始还去往年的此课程的网站去下载并仔细阅读课件以及五次大作业的描述,给老师提课件的改进意见,比如编程风格,变量命名,调试器GDB的短命令使用等。接着熟悉课程的往年材料和课件,自己大概列了一下大纲和主要的知识点,有的内容自己本科学习的时候也没有覆盖到或者已经遗忘了,依然需要重新学习一下,与时俱进,这种实践性技术课程,学好的唯一途径是自己多动手敲代码,测试并阅读不同的程序,搜索高质量的讨论问题。等到学期开始之后,每周一会有助教的例会,和老师一起开,讨论下即将布置的作业如何准备,需要具体设定的目标,交流反馈下前一个周五的实验课的情况,比如学生的出勤,提问等。因为编程作业占了一半的比重,而学校排课又没有提供TA的office hours,所以学生如果有问题要么就在课程的一个在线问答平台,要么就去找老师讨论解答。
180人的课,一共3个TA,1个reader(可惜只改期中期末卷子和五次作业之一的一半),因此TA就同时得扛起改作业的大旗了。学生的作业是提交到Linux服务器上,我们就登录到服务器上去复制学生的提交的所有代码到另一个文件下进行批改。学生数量之多,不容小觑。一直到自己改起作业来的时候,才发现任务量真的很重,也算自己碰到的鲜有的每周平均工作量能到到20小时的助教工作了。同时自己还得修3门课,其中两门还有projects和期中期末考试。印象最深的一次是学期中的某个周一老师和助教们一起开会,开的时间有点长,到下午3点半多了,突然意识到自己不能再继续开了,因为3点半自己修的另一门课的期中考试就开始了。那周之前的一个周末也一直都在频繁修改我负责的那次作业的要求文档,根本没时间复习自己修的课程,直接后果就是期中考试跪了,丢了好多分,还好期末拼命复习,力挽狂澜,拉回了成绩。那时候,出现在脑袋的想法就是准备不足,一事无成。事先准备好材料,开会才有的可讲,进度可控,避免出现高度投入讨论而忘却了时间。
所有作业的代码都是在服务器上批改的,有的时候作业的代码挺长的,七八百行了,单个文件,代码风格也是各异,有的不对齐,无用的空行特别多,奇怪的或者无法读懂其意义的变量名等等。不过,磨刀不误砍柴工,事先写好Shell脚本,处理下所有的代码文件,并且写的makefile编译运行之,把生成的结果(图片)和正确程序生成的图片对比下,就能大概知道学生这次作业的表现了。很多时候又不忍扣太多分,毕竟学生同时选了四五门课, 这只是他的一门而已,而有的可能确实花了不少时间在这个上面。改太严,分扣多了,学生们经常有邮件来询问或者索要更多的分,毕竟要到一分就赚了,没要到也不亏。简言之,改松点,学生知道哪里错了,吸取了教训,皆大欢喜,不至于一个功能函数失足,全盘皆输。总之,一个好的脚本能够极大的简化工作量和提高效率,不用每次手动切换工作目录到下一个学生的作业文件夹等等。如果最初能花些时间把这种编程作业设计成提供公有测试和隐藏一部分私有测试集的形式的话,估计学生的表现会好很多,改作业也会轻松很多,不用跟学生去理论输出的相似程度或者看上去一样,为什么我错了,或者说我只有几行像素错位了,其他的都没问题之类的,这样至少改作业的过程是透明公正的,结果是可复现的。
改作业的过程中,也发现学生,不限国籍了,中国的,越南的,墨西哥裔的等等,会去谷歌搜素代码的缓存或者去GITHUB搜代码库,或者找往届的学生索要答案,因为毕竟每年开这门课,作业改动并不是特别大,在有答案的前提下,稍微修改下变量名,增加些无厘头的换行,改变大括号的位置等,终究逃不过代码查重工具的法眼。老师最后揪出了不下10个作弊的学生,最后处理结果是直接把那次作业挂0分,学期末继续上报到教务处了。虽然实际抄袭的学生更多,但是抓典型,这群学生也算一失足成千古恨了。
在实验课的阶段,如果自己负责那次作业的话,那就得从周五早上8点一直到晚上8点,中间在上午10点10点是空出的。从学生那里得到的反馈有限,也许大神学生不需要参加这种级别的实验课,都会了;学渣自己放弃治疗了;中游的看心情。而自己难免会由于样本过小而错误地估计全班的情况,少数几个学生的问题也许不是共性,可是,到了接下来的周一,又只能跟老师汇报这些碰到的情况了,而其他的都是未知。学生的真实水平只能更多地通过闭卷的考试来考察了。
学期中的时候让全班学生做了一个在线的教学评估,大概一半的人参加了。最后看了下自己得到的反馈和评论,还是被大多数学生感激和认可的,比如说这个助教的Linux操作和C语言知识很熟练,调试很快,迅速找到了卡住自己好几天的bug,热心解答自己的疑问云云(毕竟有的本科生可能知识不够全面扎实,问到的问题也许刚好是我会的……);也有人提出了建议比如语速偏快,虽然也有几个表达不满的比如英文不地道有口音,不过也不要紧,以后可以改进,毕竟是这么大的一门课,没能服务好个别学生也是会发生的,众口难调,只能满足大多数人的需求了。
总之,这学期的助教经历带来的不仅仅是又熟悉了一次C语言和Linux命令和vim的一些快捷键技巧,更多的是分享知识的乐趣和助人解决疑难杂症的成就感,进一步锻炼了口语,提高演讲水平,培养幽默风趣的风格,专业知识水平得扎实,不能砸了场子,仍需积极学习。