Python课堂上我与学生斗智斗勇已8个学期

按惯例,每学期初和学期末都会各推送一篇非技术文章,这是本学期末的。

======================

缺乏有效的过程控制和过程管理的教学,都是耍流氓。

======================

2013年春天,修订人才培养方案时为我校数字媒体技术和服务外包专业增加了“Python程序设计”课程。

2015年春天,万众期待的Python程序设计课终于开讲了。

我曾经讲了10多年C语言,也曾经创造过传奇,把140人的C语言全校公修课讲到了600多人。后来给本专业学生讲C语言,在机房练习的时候会偶尔布置了小作业限时完成,时间到了之后根据学生的完成情况进行打分。当时一般就是拿着名单在机房里转,谁完成了就过去检查一下。然而,不得不面临的问题是,本来说好的15分钟里只有几个同学完成了,结果在检查这几个同学作业的时候又有新的同学完成了。前几次课总是心太软,想着同学既然完成了就过去检查一下吧,结果搞来搞去一节课过去了,浪费了大量的课堂宝贵时间。

几节课后,为了考虑学习好的同学的感受,更为了充分利用上机课时间,只好狠心只检查前几个完成作业的同学的程序,晚几分钟完成的作业就不检查了。但是看着晚几分钟完成作业的同学们那幽怨的眼神,说实话我心里也不好受。

我一直想有个功能,就是机房管理软件能够远程锁屏,用来控制限时完成的小作业。预定的时间到了以后,咔擦一下把所有学生屏幕都锁住,然后我去检查已完成的作业。可惜到目前为止也没看到哪一款机房管理软件有这功能,当然即使有这个功能,在检查作业的时候,学生什么也不能做,只能坐着干等,也是浪费很多宝贵时间。

2015年冬天,烟台的雪和往年一样准时到来。望着教研室窗外大雪纷飞,一个想法诞生了:自己写个小软件,能够瞬间把学生端电脑桌面截图收集到教师机,这样的话可以等下课之后回到教研室再慢慢检查,课堂上一点时间都不会浪费。有了这个想法之后,整个人立刻就精神起来了,花了一天的时间一气呵成实现了这个期待已久的小功能。截图收作业功能就这样诞生了。

当然,系统中很多功能需要学生端配合才行,这个功能也不例外。

软件投入使用之后,果然方便了很多,课堂上可以有时间讲更多东西了。然后紧接着一个又一个想法出现了,陆续增加在线点名、离线点名、随机提问、在线测试、提交文件作业、屏幕广播、远程关机、数据汇总、数据导出等一系列功能(使用董付国老师Python教材的老师可以联系董老师获取系统源代码)。考虑到个别同学可能比较害羞,不好意思当面问问题,我还专门设计了在线答疑模块,不过这个功能几乎没用过,大部分同学会当面问问题,还有些同学喜欢微信问问题。只可惜有不少同学不懂怎么问问题,详见:我这么认真地问问题,你为啥不回答???

软件投入使用之后,上课提问像抽奖活动一样,不用带名单了,并且还不用纠结提问哪个同学,因为是随机的,每个同学都比较紧张,提高了学习的整体积极性。

除了界面上肉眼可见的功能,系统内部实现还隐藏了很多细节。例如,教师端会定时群发自己所在机器的IP地址而学生端会根据特定的信息动态更新自己与服务器的连接,学生端软件启动之后不允许关闭从而让尽可能多的同学保持学习状态,在线点名功能限制了每个IP在90分钟内只能点名一次。

一切都是那么的完美,直到有一天。有个同学说,他用Python写了个小程序,使用一个简单的循环,每次循环修改一次本机IP地址然后自动从名单文件中读取一个同学信息进行点名,瞬间完成了全班同学的签到。

给这位同学加了平时成绩,下课后我立刻修改了系统代码,不仅限制IP地址,还限制每个MAC地址90分钟内只能点名一次,完美解决了这个问题。

很快,又一个新的问题出现了,因为Python课程是直接在机房上课的,也就是传说中的“边讲边练”。我对“边讲边练”的理解,应该是老师讲一会儿,学生练一会儿。然而很多同学们的理解是,老师讲一会儿,学生玩一会儿。

为啥会这样呢?

经过仔细观察、单独询问和深入分析后发现,一个原因是学生自制力不够,另一个原因是很多学生不知道该干啥!!!于是系统迅速增加了两个新功能:监视学生电脑桌面和自我测试。

在第一个新功能中,每隔10分钟自动对学生电脑桌面截屏并检查与上一次截屏之间是否有较大变化,同时检查桌面上是否有足够多的代码。如果两个条件都满足就自动加1分,否则自动减1分。详见:技术要点|Python监控学生端电脑屏幕自动识别学习状态

当然,这个功能并不会记录学生桌面上的任何信息,不会涉及到任何隐私。如果想不学习还能加分,其实也是有办法的。例如有个同学就采取了下面这个视频中的办法,频繁单击鼠标来展开和收起“开始”菜单,只要速度把握的合适,总是会有好运气获得加分机会的。

对于第二个新功能,系统数据库中自带800道题,上课时学生练习完课堂内容之后,可以练习这些题目来巩固自己所学。最后考试也使用我开发的课堂管理系统进行在线考试,每个同学从800道题库中随机抽题100道,每次抽1道,不允许跳过,在任何时刻不会有两个同学做一样的题。这本来是一件多么美好的事情啊,但是却有同学利用课堂上的宝贵时间笨笨地一条一条复制题库里的题目和答案。

有一天,课间我发现有个学生美滋滋地打开一个Word文件,居然满满是我的Python题库。问他从哪来的,他说是自己写的代码,把我数据库里的所有题目都导出了。。。。

同学们之间的友谊是深厚的,一个同学有了题库,那么全班同学也就都有了。于是,一个严峻的问题产生了,在线考试时居然有不少同学打开Word版题库默默地抄(我的Python课是考查课,开卷考试,允许带任何复习资料,允许场外求助)。没什么比这更让老师生气的了,于是,在同学们考完之后的欢呼声中,我宣布“这次期中考试的分数,在最终成绩中只占很小很小比例,期待大家期末考试有更好的表现”,然后潇洒离开机房。

留下同学们在风中凌乱。

晚上回家我是一夜无眠啊,清晨隔壁楼顶上不知道谁家养的大公鸡第一声啼叫响起的时候,我突然有了想法,于是又是一气呵成对代码进行了修改,进入考试模式之后,封杀学生端电脑上的所有浏览器和文本编辑器,禁用系统剪贴板,只能老老实实做题。期末考试时,我觉得分数应该是反应了学生的真实水平了。

后来的几个学期,在线考试功能基本就稳定了,每个学期只需要往系统里导入一些新题目就可以了。结果第6届学生使用这个系统进行期末考试时,有个同学不到1分钟就考完了,并且是满分。一问,居然是自己编写了一个小程序进行无人值守自动考试。

考试结束之后,我迅速对系统进行了升级,考试时要求相邻两道题之间的答题时间差必须超过一定的时间,毕竟看题和打字答题是需要时间的。如果还要使用无人值守自动考试的话,就必须要阅读和分析客户端源码然后根据服务器反馈的信息猜测这个时间差的大小。这在考试期间基本上是无法完成的。

办法总比困难多,既然路都被封住了,要么认真学,要么使劲背题,要么到时候用手机查,第8届同学们表示已经找到了应对的方法。结果考前两周被告知,期末会在考完100道选择、填空、判断题之后,增加5道限时编程题,考试形式类似于大学英语四六级考试,一小时时间做客观题,然后发编程题并限时40分钟完成。详见:Python课程期末考试编程题自动批卷原理与实现模板

8个学期以来,也正是师生“斗智斗勇”的过程中,实现了真正的教学相长,真正想学习的孩子们在这个过程中也能提高很多。需要阅读学生端源代码然后分析和教师端之间的通信协议以及系统的数据库结构,还是有很多乐趣的。虽然少部分同学对系统的攻击给我造成了一定的麻烦,但我内心是喜悦的,毕竟学生是热爱学习的。我也一直鼓励学生发现教材、PPT或者课堂管理系统中的bug,并且对发现问题或者攻击系统成功的同学一定的分数奖励,同时也不断地完善这个课堂管理系统。

本学期的课程愉快地结束了,下学期听我Python课的数字16(课程名称:网络程序设计)和网络16级(课程名称:网络应用开发实践)同学们,你们准备好了吗?

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2018-12-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券