计算机学院2009级学生的入学与往届没什么两样,但在大三这一年为他们讲授《操作系统》课之后,发现他们是非常特别的一届,具体表现为:
- 特别能抄袭。被确认抄袭的人次历史之最,是往届数倍
- 特别能放弃。抄袭无门后,就大片地放弃作业,人数也是历史之最,往届数倍
- 特别少交流。网上论坛里的讨论,无论数量还是质量都是史上最低
- 特别能应试。虽然发帖少,但询问评分细节的帖子却是史上最多
- 特别缺惊艳。即便是独立完成作业且拿满分的同学,其中也难以见到往届哪种处处惊艳的效果,很多人都只是应付,看不到任何激情。
这种突然的极端变化令人不得不思考,做为使用新教学大纲的第一届学生,是不是大纲的变化带来了这些问题?这些思考形成了本文。希望看到此文的同学、老师能多提意见,一起丰富此文,适当时候提交给学院。
新教学大纲的主要变化
我手上并没有新旧大纲的文本,凭印象列出09级已经经历过的主要变化:
- C语言课变成C/C++课
- 很多课程的授课和实验学时缩短,甚至有些课程的实验完全砍掉,使学生有了更多可自由支配的时间
- 累加式考试深入到每一门课程,一张考卷定乾坤的日子不再有
- 大一全年完成一个年度创新项目(从08级开始);大二下开始每学期一个软件设计与开发实践课。都是分组完成一个大项目
高级语言程序设计课改带来的问题
高级语言程序设计课由纯C变为C/C++,而学时没有增加,必然造成C和C++都学不到位。学不到位并不是问题,没有任何一门语言是一门课就能教会的。问题在于,这门课的定位没有向后传达,导致后续课程的教师仍抱有原来的期待,被打了个措手不及。
就拿文件操作来说,大家的心理预期都是在C语言课学完,后面课程再应用一下、巩固巩固。但在09级是课上没咋学,到数据结构课需要用时,就表示不会。数据结构老师太nice,直接去掉这部分要求,导致到了我的操作系统课,学生还不懂怎么用。
所以我认为,课改后的高级语言程序设计必须给出一个明确的定位,到底这门课的输出是什么,有哪些是后续课程可以直接利用的,哪些是必须再培训的。
累加式考试带来的问题
去年底在全校做报告时我曾提出一个观点:“如果不作业反抄袭,累加式考试就注定是个玩笑。”从09级的情况看,我言中了。
据我了解,在前两年的学习中,他们只经历过一门反抄袭的课:高级语言程序。浩瀚的纵容抄袭作业的课程,消磨了他们的求知欲,甚至扭曲了他们的价值观。到大三时,他们中的很多人已经不相信自己有能力独立完成作业,所以再次面对反抄袭时,就纷纷放弃。
反抄袭必须大家都动手,才有真正的意义。但考虑到很多教师面临的客观情况,现阶段并不适合全面由任课教师做这件工作。应该以学院为单位,组建反抄袭委员会,做抄袭行为的最终裁定。对抄袭的惩罚也不能仅仅是一门课内的事情,要与奖学金、入党、保研,甚至学籍挂钩。每次看到被我抓过抄袭的学生入党、被评为优秀学生干部,我都觉得讽刺至极。
项目式学习带来的问题
这是最大的一个改革,相关经验不多,所以带来的问题最严重:严重打击学生自信心。
在以前,大家基本都是考试成绩论英雄,分高和分低的差别也就是背书多少的差别,所以分高的也不觉得自己比别人牛多少,分低的也不觉得自己真就不如人。项目式学习之后,一切都是真刀真枪,搞得定的就是公认牛人,搞不定的也承认自己确实不行。这正能说明项目式学习的美好愿景。然而,现在的项目式学习因为管理不善,多数人都没真正动手去搞,整日只能膜拜那些大牛,仰角越来越高,久而久之就觉得自己真是不行了,自信心完全丧失。但事实上,如果他们一开始就能亲自动手,未必就搞不定。
年度创新项目
大一的年度创新项目开题总是能让人眼光直亮,但中检时就有几分泄气,等结题时所剩项目的数量只能是令人失望了。虽然结题的项目都挺扎眼,但一项普及型的运动最后变成精英秀场,这绝不是成功。我们虽然可以用“大多数学生经历了失败,获得了经验”来自慰,但必须正视的问题是,很多学生在过程中看到的是自己和牛人之间那貌似无法弥补的差距,信心受到严重打击。
虽然口号是“允许失败”,但学生早习惯了成败论英雄式的考核,谁也不好意思拿失败上去混分。或许,我们应该考虑采用“越失败,越高分”的评价标准?思路来自于一篇博客,其中谈到:
Pennsylvania University 的一位教授在他的工程设计课上希望他的学生以失败来通过考试,这门课又被称为“Failure 101”。 在这门课中最好的学生是那些失败最多的并且风险最大的学生。就好比走迷宫,最先走出迷宫的人是那些犯错最早并且最多的人,因为他们把走过的路描述成地图,迷宫的构造了然于心,自然能更快走出来。
这种评价标准对初生牛犊来说实在是再合适不过了。
软件设计与开发实践课
这门从其它课程挤出来的课,会延续3到4个学期,每学期让学生分组做个大项目,项目主题是上一学期学过课程的综合。在不是每门课都能保证充足的实践性的情况下,这种做法可圈可点。但再好的设计也敌不过糟糕的实现。此课程的直接结果就是彻彻底底地消灭了许多同学还残存的那一点点自信。
分组项目总会遭遇的一个尴尬,传统说法叫“坐车”,现代说法叫“打酱油”。
分组的目的是培养团队意识,锻炼团队合作能力。但事实上,绝大多数项目都是一个人干,n个人看。这n个人中可能会有一个心肠好的还能帮着写写文档、打打下手,剩下的连看都未必看。
我曾问过那个1,为什么能容忍那些n。他说没啥要容忍的,他们真要是动手干,才会发生需要容忍,甚至完全无法忍的事情。
合作的项目越多,差距越大,就越没有信心能追上,于是干脆就永远放弃了追赶。09级学生是我见过的最没精气神的一届。只两次大项目就把他们打成这样了,等所有项目做完会怎样?我不敢想象。
是不是我们该放弃“团队合作”这个奢望呢?不应该,条件也不允许(没那么多指导老师)。怎么办?我目前没有经验,但有一些粗浅想法:
- 控制团队规模,2人为上,3人最多
- 开题
- 将项目工作量进行划分。可以不均分,能力较弱的同学可以只做少部分工作,只要达到对他本人的锻炼目的即可
- 按工作量和难度情况,给每人设一个“最高分”。比如某人任务量比较少,那么他最后全完成也只能得到80分
- 每周那三小时的机房之旅基本没用
- 让网络成为指导与协作的主阵地,方便管理和监控
- 师生用乐学网交流,如打字说不明白,就网上留言约时间见面,证明确实指导了
- 代码传到github,可以便捷地跟踪谁在什么时间做了什么,完成工作量的百分比。而且git是工业界一个非常重要的配置管理工具,很有必要学会使用
- 允许组内成员互相帮助,甚至替他人完成工作,但最后必须如实交代。如果结题时发现组内有一人把他人成果当成自己的,全组0分
- 根据实际完成情况,以开题时划定的最高分为依据,多加少减,完成每个人的评分
实践教学比重提升带来的问题
在以前,整个本科课程体系都是理论当道,纸上谈兵,学生到毕业了也没写过多少行代码。毕业生倒也是人才辈出,一方面是行业情况好,另一方面是我们的学生确实优秀,就算大学没练出实践能力,到工作岗位也能被激发出来。还有一些学生走学术路线,与实践渐行渐远,靠理论成为大家。
后来,大家都认为本科阶段在踏实理论基础同时,也应该锻炼实践能力,所以实践的比重越来越大,于是抄袭党和酱油党就越来越多,其中不乏理论牛人靠抄袭和酱油而保研,进而在理论上更有建树。但决不能因为有这样的人存在,而默许抄袭和酱油。
当禁止了抄袭和酱油,那么就要开始考虑因材施教的问题了。从目前情况看,在很多“好学生”身上,实践能力是个0-1的二值问题,要么有,要么什么都没有。我认为这和我们容忍了太多抄袭和酱油有关。如果他一直都必须自己兢兢业业做作业、项目,那么也许就能锻炼出实践能力了。当然,这只是想象,在没有杜绝抄袭和酱油的情况下,谁都不知道实际会如何。甚至也许可以肯定地说,会有那么一类学生,他们是天生的理论家,但实践能力奇缺,我们的培养应该埋没他们吗?
虽然以前的培养方式埋没了很多天生的实践家,但好在他们也确实不适合读研深造,到企业反而如鱼得水。但对天生理论家来说,不让他们读研,可能是我们的损失;让他们进入职场,可能会遇到问题。所以,我们必须因材施教,不能一刀切地要求所有人。也许,设计多种培养方案,甚至完全放开地让学生选课,根据自身情况去选择实践路线、理论路线或两者兼有,能比较完美地解决此问题吧。
在课程体系未提供分类培养策略的情况下,单门课程可以靠平分实践与理论的分值,并让两者的及格要求都足够低,达到一定程度的平衡。
后记
每项新改革都会带来新问题。指出这些问题是为了改革更好,而不是打击改革,也不是针对发起和实施改革的人,更不是针对被改革所累的人。
在现行的体制下,一次好的改革要做到既不给教师增加负担,也不会不照顾整体的和谐,还要让学生成为前所未有的强人,难度可想而知。但只要所有人,无论领导、老师,还是学生,都能坦然地正视问题,真心想解决问题,这些就都不是事儿。