在线评测系统在程序设计类教学中的应用研究

2016-12-21 00:58苗桂君刘勇许南山张静韩静文
计算机教育 2016年9期
关键词:程序设计实践教学

苗桂君 刘勇 许南山 张静 韩静文

摘要:通过分析程序设计类课程教学中存在的问题及各高校在线评测系统的应用现状和教学模式,提出了基于北京化工大学在线评测系统的程序设计类课程教学模式,并将此模式应用于北京化工大学4届计算机科学与技术专业的课程教学中,积累了大量的实践活动原始数据。科学合理的数据分析证明,该教学模式取得了.良好的教学效果。

关键词:在线评测;程序设计;实践教学

0.引言

程序设计类课程具有入门难、两极分化严重、实践性强等特点,多数高校依赖计算机实验和综合课程设计,进行大量编程巩固训练,培养学生分析问题和以程序设计思想解决实际问题的能力。然而,上述实践教学方式的教学效果并不理想,主要问题概括为以下几个方面:

(1)程序设计类课程一般为5个班以上的大班教学,1名教师要同时指导200名左右的学生进行上机实验,教师工作压力大,监督能力有限,且无法及时了解每名学生的实验完成情况,没有时间和精力对学生提交的作业一一进行上机验证,只能通过抽检的方式检查,导致抄袭现象严重。

(2)上机实验教学通常是根据课堂讲课进度安排,实验课时一般为2学时或4学时,上机时间有限,只能以对课堂理论知识的验证和巩固理解为目的,不能进行有效的编程设计能力的训练,导致学生实际程序设计和调试能力差。

(3)进行上机实验的案例一般通过教材或课件提供,案例陈旧,不方便更新,覆盖知识点不全,且缺乏实用性和趣味性,因而很难调动学生学习的积极性和主动性。

(4)通过上机考勤、实验作业、课程设计报告等手段无法全面掌握和客观评价学生的学习情况,不利于学生动手操作能力和创新能力的培养。

所以,如何满足新时期教育发展的需求,如何提高实践教学的教学效果,是高校教师亟待解决的问题。随着我国教育信息化研究的不断深入和进程的不断加快,各大高校纷纷将现代教育技术引入到实践课教学的改革中来。为此,笔者将北京化工大学在线评测系统应用到计算机科学与技术专业的程序设计类实践教学中,提出了符合学生认知和教学规律的教学模式,在对所收集的大量实践教学活动原始数据进行科学合理统计和分析的基础上得出,该教学模式能激发学生的学习兴趣,并在一定程度上提高教学质量。

1.在线评测系统应用现状

在线评测(online judge,OJ)系统,起源于ACM国际大学生程序设计竞赛(ACMInternational Collegiate Programming Contest,ACMICPC),经过ACM竞赛近30年的发展,各大高校纷纷开发了属于自己的在线评测系统。其中,国外知名高校的在线评测系统有美国弗吉尼亚大学的UVA OJ系统、俄罗斯萨拉托夫国立大学的SGU OJ系统、俄罗斯乌拉尔国立大学的URAL OJ系统,另外还有一些国外公司开发的知名网站,包括TopCoder公司的TopCoder网站、Directi公司的CodeChef网站、CodeForces公司的CodeForces网站等。国内知名的在线评测系统中,最早开发在线评测系统的高校是浙江大学,其在线评测系统为ZOJ。提交次数最高的OJ系统是北京大学的pojE21,提交次数仅次于POJ的是杭州电子科技大学的HDOJ。其中,浙江大学的ZOJ、北京交通大学的BOJ、华中科技大学的HustOJ作为开源在线评测系统,具有很高的实用性。另外,哈尔滨工业大学、南开大学、吉林大学、福州大学等高校也先后开发了在线评测系统。这些评测系统,不仅被广泛应用于竞赛的集训和程序设计类课程的教学当中,还对外开放注册,为其他高校的程序爱好者们提供服务。

2.基于在线评测系统的教学模式

目前,在线评测系统广泛应用在各大高校程序设计类课程中,其现有教学模式可以通过以下3个方面进行总结:实验教学、课程范围、教学效果评价。

在实验教学方面,各大高校将该系统直接应用于程序设计类课程的上机实验教学。任课教师根据程序设计类课程的实验内容和具体要求,合理设置实验任务,新增题目或者从题库中选择合适的题目供学生上机练习。学生在编写、调试完程序后,将程序提交给评测系统进行判断。评测系统会在后台进行编译,并结合测试输入样例得出运行结果,与测试输出样例进行比对,给出评判结果。任课教师通过系统可以实时了解学生的做题情况并给予指导。该系统的使用,使得教师一人可以同时指导几个班级的学生一起上机,大大减轻教师的工作压力,还能避免作业抄袭现象。学生课后,可以继续登录系统,完成未完成的实验,保证了教学的连续性,在一定程度上,提高了教学质量。

在课程范围方面,该系统的应用主要集中在C/C++语言的教学上,对C/C++语言的教学质量有很大提高。而对于其他计算机专业相关的课程,例如数据结构、编译原理、计算机组成原理、数据库原理等很少涉及。

在教学效果评价方面,各大高校一般使用课程平均成绩的对比数据或者调查报告的形式来评测其教学效果,没有进行更科学有力的数据分析,不能有效说明对学生编程能力的提高是否有实质性的帮助。

3.本校实例

3.1北京化工大学在线评测系统

为了收集一手的实践教学研究数据,我校于201 1年基于改进的开源系统HustOJ开发了北京化工大学在线评测系统(online judge system ofBUCT),主要用于参加ACM竞赛的队员集训、校内周赛、跨校区组织的月赛以及我校程序设计类课程的实践教学中。

北京化工大学在线测评系统使用php语言开发,后台数据库使用MySQL,采用B/S架构,主要系统模块包括系统维护、题库管理与训练、实时状态与排名、竞赛及作业管理、名校联赛、北化程序员论坛、数据统计等,评测系统的主界面如图1所示。该系统支持C/C++、c#、Pascal、Java、Python、VB等常用编程语言。在使用过程中,笔者非常注重题库的管理,经过不断丰富和完善,系统题库现有题目1600多道,题目类型涵盖了数据结构、算法设计与分析、C/C++语言程序设计、Java语言程序设计、程序设计实训、ACM/ICPC程序设计方法与实践等几门课程的主要知识点。并为满足不同水平学生的练习需求,将题库题目按难度系数划分为5个等级,在一定程度上激发了学生对程序设计类课程的学习兴趣。

其中,数据统计模块使用数据可视化技术,从数据库中获取有意义的数据,通过highcharts、thinkphp等技术将数据分析结果进行图形化展示,从而可以更直观的了解学生在线评测系统的使用情况。

3.2OJ系统在我校的应用

经过近4年的教学实践,我校已形成一整套基于在线评测系统的程序设计类课程的教学方案,具体包括实践教学、教学效能、考核评价机制、激励机制4个方面。

3.2.1实时评测、反馈调控的互动实践教学模式

系统管理员在开学初将每届的学生信息导人到评测系统,根据学号生成相应的用户账号。任课教师可以通过评测系统的状态显示功能,查看学生的做题情况,实时跟踪学生的做题进度,对学生做题过程中遇到的共性问题给予针对性的讲解和及时指导,还可对排名靠后的学生进行重点辅导。为适应不同层次学生的学习需求,教师可以根据学生的知识掌握情况,及时调整实验任务的难度和数量,进行题目的分级分类,从而达到有效反馈、合理调控、提高课堂教学效果的目的。

3.2.2简化作业批改,提高教学效能

教师把课后作业题目挂到在线评测系统上,设置好起止时间,学生通过在线评测系统按时间要求进行作业提交,系统会统计出每道题目的提交次数、提交通过的题目数量及所使用的编程语言,对本次作业的完成情况进行排名,并可导出到Excel文件进行备案。教师可以方便地获取到所有学生每道题目的做题情况,记录总结学生遇到的典型问题,在课堂教学中进行针对性讲解。在线评测系统的使用,简化作业批改,使教师可以注重教育教学及自身素质的提高,从而提高教学效能。学生提交作业后,系统会快速给出评判结果,及时得知作业完成情况,即可进行后续修改与再次提交,与传统收发作业的模式相比,这种方式科学运用了生物心理学的规律,既缩短了反馈周期,又能激发学生的学习潜能和学习热隋。

3.2.3公平客观的考核评价机制

加大实践考核力度,使用在线评测系统进行实验课考核,操作实施方便,评判结果公正客观。学生通过使用在线评测系统,可实现对每次考核内容的系统化管理,发现当前课程学习的薄弱部分,主动弥补。每次考核都会给出系统排名,可使学生意识到学习差距,从而能对自身提出更高要求,调动学生学习积极性。

3.2.4创建科学合理的学习激励机制

评测系统会根据提交通过题目数量、提交通过比率给出总排名,从而鞭策落后的学生努力追赶,激励名列前茅的学生努力保持。另外,在每门课的教学中,设立“正确题目最多奖”“正确率最高奖”“通过高难度题目最多奖”;以宿舍为单位,统计每个宿舍完成题目数量进行排名;将ACM竞赛机制引入实践课教学中,每学期开展花样程序设计类竞赛,如课程月赛、周赛、以庆祝某个节假日为由的节日赛等。通过以上不同形式的激励,激发学生的学习动力,引导学生培养良好的学习习惯,形成积极向上的学习氛围,从而促进教学质量的提高。

4.教学效果分析

在2011-2014共4届学生的程序设计类实践教学中,“数据结构”“编译原理”“计算机科学导论”“操作系统原理”等课程的实践课教学先后被纳入在线评测系统中。下面将对2015年5月份之前的实践教学数据进行详细对比分析。

4.1各年级做题提交情况对比

各年级做题提交情况对比如表1所示,其中2013级的提交次数最多,正确率最高,对评测系统的使用效果最好,2011级和2012级由于教学模式未完全转变,对评测系统处于初步尝试阶段,2014级由于使用时间较短,故提交次数偏低。

4.2一年中不同月份做题提交情况分析

图2列出了2013年和2014年2年中不同月份提交总次数变化规律,由图2可看出,2013年该曲线变化情况为:1-4月、8-12月,随着课程教学的不断深入,提交总次数呈逐渐上升趋势,但是5、6月份由于学生准备期末考试,提交总次数下滑,8月份由于是暑假,学生做题积极性不高。总结2013年做题提交情况,2014年学校调整教学和考核方案,加大实践课教学力度,并将在线评测系统应用于小学期实践教学中,所以5、6月和10月的做题提交总次数达到峰值。

4.3各班级男女生做题提交情况对比

图3为计科2013级6个班级男女生的做题情况汇总。其中,每个班的总学生数和男女生比例相近,但却呈现出不同的提交情况分布。据调查,2班的班主任曾引导2班学生利用课余时间在系统上做题,所以2班提交总次数最多,达8823次,整体编程水平也较强。由图3可见,6个班级中,男生提交总次数为28028次,女生提交总次数为10782次,由于计科班级中,男女生比例大约为3:1,整体来说,男女生提交次数之比大约为2.55:1,女生平均提交次数略高于男生,可见,通过使用在线评测系统,女生的动手实践能力也得到提高。

4.4各宿舍做题人的提交情况对比

图4将计科2013级学生以宿舍为单位,列出了28个宿舍的做题人均提交情况。由图4可以看出,人的提交次数超过400次的有5个宿舍,其中人的提交次数最多的达720次,经过调查统计得知,这些宿舍有学生参加ACM/ICPC或者“蓝桥杯”软件大赛,因为个别学生对编程的爱好而引发整个宿舍学生的学习热情。所以,建议学校在大一学年结束时,可根据所有学生做题提交情况,合理调配宿舍成员,以一带多、相互促进、共同提高,丰富学生日常学习生活,激发学生团队意识,从而达到提高整个寝室学习状况的效果。

4.5课程总成绩、绩点与提交次数关系分析

图5列出了计科2012级数据结构和编译原理2门课程的期末总成绩、绩点与提交次数之间的关系。由图5可看出,提交次数与课程总成绩、绩点曲线变化基本一致,大致成正比关系,学生做题的提交次数越多,课程成绩越高,绩点越高,反之亦然。该图进一步验证了在线评测系统的应用能有效提高程序设计类课程的教学质量和教学效果。

4.6提交通过的题目数量与各科成绩相关性对比

公式中:COV为协方差;σx、σy为标准差;E为数学期望;变量x、y分别为所有学生提交通过的题目数量与各科考试成绩或平均学分统点。

由图6可见,ACM/ICPC程序设计方法与实践、编译原理、Linux/Unix编程基础、计算机科学导论、数据结构等专业核心课程,期末成绩与提交通过的题目数量的相关系数较大,故两者相关性较大,而数据仓库与数据挖掘、数据库原理、计算机组成原理、操作系统原理等课程的相关系数太小,表示两者相关性小。数据仓库与数据挖掘课程是大一第二学期开设的,学生在上课的时候普遍没有编程基础,该课成绩与在线评测系统提交通过的题目数量相关性不大。数据库原理、计算机组成原理等课程由于题库中的相关习题较少,学生做题量小,故相关性较小。所以后续需要继续丰富相关课程在线评测系统的题库,根据课程内容设置相应的题目,发挥在线评测系统在这些课程中的作用,实现评测系统在上述课程中的全面应用。

通过此相关系数还可看出,学生提交通过的题目数量越多,编程能力越强,课程成绩越好,故在教学中需大力引导学生注重编程基础,提高动手实践和编程操作能力。

5.结论

经过4届学生的教学实践证明,文中提出的基于我校在线评测系统的程序设计类课程的教学模式,取得了良好的教学效果。但是教师的宏观把控和引导监督作用不可忽视,虽然在线评测系统的应用将学生的学习由被动接受转向自主学习,但不能过分依赖系统,如果缺乏教师适时地引导监督,容易导致学生缺乏创新、过度自我管理或者学习隔靴搔痒、流于形式等问题。在此基础上,如何充分发挥在线评测系统的教学应用价值还需要进一步研究。希望本文的研究成果能为各高校程序设计类课程的教师提供帮助和参考。

猜你喜欢
程序设计实践教学
基于OBE的Java程序设计个性化教学研究
基于Electron.js的风向玫瑰图绘制程序设计与实现
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
“C语言程序设计”课程混合教学探索
茶学专业校企合作实践教学探索
《电气工程毕业设计》 课程的教学设计
研究型学习在传热学实践教学中的应用
思想政治理论课实践教学研究述评