月度归档:2010年01月

四年反抄袭,终于可以做总结了

我的教师生涯曾经差点儿毁掉。曾经有那么一段时间,我想消极地对待教学工作,不想再像费脑筋设计实验,不想再想费力气批改实验,甚至不想用心上课。原因是对学生“抄袭”的失望与无助。那时我觉得我做的一切努力都是徒劳的,都被“抄袭”轻松地抹煞了。批作业时,觉得自己就像一个在办离婚手续的地方推销玫瑰花的傻子,不管自己多么认真地书写评语,屏幕那一端都是一个猥琐的面孔在嘲笑我的自以为是。这时,一个在加拿大留学的同学告诉我moss的存在,于是我得救了。

moss是专门为检测源代码抄袭而设计的,可以瞬间从数百份源代码中找出一对对的疑似抄袭,支持很多种编程语言,而且有很多非常贴心的功能。比如教师可以给出框架代码,学生程序中出现的框架代码会被忽略;可以设定n份学生程序中都出现的代码被自动忽略;有可视化程度非常好的结果显示。它还可以处理中文的纯文本文件。Car现在正搞的Duplication可以处理中文的doc和pdf,也是功德很高的一件事。

moss的客户端是用perl编的,只能在命令行使用。我做了它的moodle插件,使在moodle中调用moss变得非常简单。

moss只是反抄袭的一个必要条件。它只是刑侦过程的一部分,还必须有刑罚过程配合,才能收到效果。

moss给出的结果只能是参考结果,还需要人工审核。moss的结果中排名越靠前的,抄袭的嫌疑越大,但并不绝对。是否雷同,要综合考量作业内容,难点、要点,相似比例和代码行数等。

moss查不出捉刀代笔的。针对这种类型的抄袭,我设计了让TA和学生面对面评分的策略,通过直接询问,看学生是否能解释程序。就算学生是找人帮忙完成的,这种方法也能逼迫他去了解程序,一定程度上也促进了教学效果。这种方法还有一个附带效果,就是可以对每名学生做个性化指导、总结。

抄袭确认后,必须有惩罚,否则就是鼓励抄袭了。惩罚的策略我一直在不停地摸索,寻找最优解。现在觉得,基本找到了。

学生抄袭无非是想用最少的力气获得最大的分数。惩罚就要反着来,让他什么都得不到。所以,凡是抄袭,当此作业0分是必须的,是最公平的,容不得半点讨价还价的余地。但这样会造成一种“不抄,0分;抄,最坏也是0分,如果运气好没被雷,就不是0分了”的状态。所以,惩罚必须更重。我的方法是“抄袭当次及之前所有的作业成绩都清零”。这样的好处是越往后越不敢抄,尤其那些曾经侥幸漏网的抄袭者。

假设一门课有8次实验,占总成绩的50%。如果一个学生不幸在第6次实验被雷了,他通过考试的希望基本就渺茫了。为了挽救他,我设计了“期末考试达标,实验成绩恢复”的策略。比如承诺只要期末考试能考到80分以上,被连坐清零的实验成绩都恢复。如果他是个值得挽救的人,那么后面的时间,就一定会更加努力学习了。

反抄袭的一个负面效果,是会“害”一些立志改行的学生。他们可能有自己的理想与特长,但被机械的制度圈进了一个自己不喜欢的专业,去学一些没兴趣的课程。如果他成功混到毕业证,拿着文凭出去闯,很可能会改行成功,创造一番事业。反抄袭,使他们很难混,很可能会毁掉一个未来的人才。对此,应该把每次实验的及格线都设得比较低,较易达到。这种策略对后进同学的帮助和鼓励作用也是很大的。

反抄袭没有技术难度,工作量也不大,最难的是坚持。对此持反感态度的学生是占多数的,得顶住这个压力。待到期末时,学生们回想这一学期获得的,就会感激这份坚持了。