以OJ系统和学科竞赛为核心的程序设计实践教学
刘勇 田凯 周晓琳 吴佳伟
摘? 要:通过分析各高校在线评测系统应用于实践教学的现状,结合北京化工大学在线评测系统应用实际,对九年来的计算机科学与技术专业的编程课程教学实践和程序设计类学科竞赛的培养情况进行数据分析和整理研讨。经验表明,文章分析的以在线评测系统为基础,以学科竞赛为目标的实践教学模式有利于培养优秀的计算机科学与技术专业学生。
关键词:程序在线评测系统;学科竞赛;实践教学
中图分类号:G640 文献标志码:A? ? ? ? ?文章编号:2096-000X(2021)06-0028-04
Abstract: Based on the analysis of the current Online Judge (OJ) system application of practical teaching in other universities, in this paper, we analyze the practical application of OJ system in Beijing University of Chemical Technology. In the last nine years, we widely used OJ system in teaching practice of programming courses and the training process of programming competition. Our experience shows that the practical teaching mode based on OJ system and programming competition is beneficial to cultivate excellent computer science and technology students.
Keywords: Online Judge System; programming competition; practice teaching
引言
近年来,全国高校对于大学生实践能力的培养越来越重视,而对于计算机相关专业的学生来说,提高自己的动手编程能力也就是提高了实践能力。程序设计类课程具有入门难,两极分化严重、实践性强等特点。对于各大高校,计算机专业的竞赛具有参加人才难挑选,培养难度高等特点。
所以,如何满足新时期教育发展的需求,如何提高实践教学的成果,如何培养具有更高水平的程序设计类竞赛人才,是高校教师亟待解决的问题。随着我国教育信息化研究的不断深入和进程不断加快,各大高校纷纷将现有的教育技术引入到实践教学中。为此,作者将北京化工大学在线评测系统应用到计算机科学和技术专业的实践教学中,对所收集的大量实践数据进行了合理统计和分析得出,使用新的基于在线评测系统的教学有助于激发学生的学习兴趣,提高学校和学生参加计算机类相关竞赛的积极性并获得优异的成绩。
一、在线评测系统应用现状
在线测评(Online Judge, OJ)系统,起源于ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest, ACM ICPC)[1]。经过ACM竞赛30多年的发展[4],各大高校纷纷开发了属于自己的在线评测系统。其中国内著名的OJ系统包括:北京大学的POJ,该网站有强大的软硬件系统,每天代码提交次数高达3000次;浙江大学的ZOJ,浙江大学通过ZOJ举办浙江大学计算机程序设计能力考试(PAT),PAT的成绩可以作为多家企业招聘和研究生复试的机试成绩。此外杭州电子科技大学的HDOJ、电子科技大学的UESTC OJ和华中科技大学的HustOJ都在程序竞赛领域有较高的知名度。国外知名的在线评测系统有西班牙Valladolid大学的OJ(UVA)、俄罗斯Ural立大学Online Judge(URAL)、Codeforces和atcoder等。近年来各大公司也使用一些针对求职面试的在线评测系统,比如国内知名的牛客网和计蒜客等。这些评测系统,不仅广泛应用于教学、对学科竞赛人员的培训和求职面试中,还对外开放注册,为其他程序爱好者们提供题库和代码评测服务。
二、基于在线测评系统的实践教学
目前,在线评测系统广泛应用在各大高校计算机科学和技术专业的教学和竞赛的培养中。
在教学方面,各大高校将该系统直接应用于程序设计类课程的上机实验教学中[2]。任课教师根据程序设计类课程的实验内容和具体要求[3],合理布置实验任务,新增题目或者从题库中选择合适的题目供学生上机练习。学生在编写、调试完程序后,将程序提交给评测系统进行判断。评测系统会在后台进行编译,并结合测试输入样例得出运行结果,与测试输出样例进行比对,给出评判结果。教师可以通过系统在网上抽查学生作业,及时发现问题给出指导,该系统的使用大大减轻教师的工作压力。学生课后可以继续登录系统,完成未完成的实验,保证了教学的连续性在一定程度上,提高了教学质量。
在课程范围方面,该系统的应用主要集中在C/C++ 语言、Java语言、Python语言的教学上,对这几门语言的教学质量有很大提高。而对于其他计算机专业相关的课程,例如编译原理、算法分析和设计、计算机组成原理、数据库原理等涉及较少[4]。在计算机类学科竞赛的培养中,各大高校使用在线评测系统選拔参加学科竞赛的学生,进行模拟比赛,提高竞技水平。
三、本校实例
(一)北京化工大学在线评测系统
我校基于开源的HustOJ系统部署了北京化工大学在线评测系统(Online Judge system of BUCT),主要用于我校程序设计类课程的实践教学、校内周赛、月赛、“蓝桥杯”软件大赛的选拔和集训以及参加ACM竞赛的队员集训[5]。
北京化工大学在线测评系统(BUCT OJ)使用php语言开发,后台数据库使用MySQL,采用B/S架构,主要系统模块包括系统维护和管理、题库管理、实时状态、排名、竞赛和作业、ACM竞赛专区、讨论版。校内访问网址为www.buctcoder.com,校外网址为http://39.106.31.26/,系统主界面为图1。
经过多年不断的丰富和完善,BUCT OJ已经积累了近5000道编程题目,题目类型涵盖了数据结构、算法设计与分析、C/C++语言程序设计、Java语言程序设计、 Python语言程序设计、程序设计课程设计、ACM/ICPC 程序设计方法与实践[6]等几门课程的主要知识点;题目难度覆盖面也很广,有适合刚入门新手的题目,有适合入门以后需要多加练习的题目,有适合选拔学生竞赛的题目,有适合参加学科竞赛学生训练的题目等多种类型题目。
BUCT OJ系统已经有超过70万份代码的提交,这些数据都存储在数据库中,我们可以使用这些数据对学生的学习进度,实践水平进行合理的分析,专业性的进行培养。
(二)OJ系统在我校的应用
OJ系统已经在我校程序设计教学和学科竞赛中使用了九年时间,在使用过程中,我们不断总结经验,积累方法,形成一整套基于在线评测系统的课程教学和学科竞赛培养方案。
1. 实时评测教学
系统管理员在开学初将学生的信息导入OJ中,根据学号生成相应的账号。任课教师可以通过评测系统的状态显示功能,查看学生做题情况,对学生做题过程中遇到的共性问题给予针对性的讲解和及时指导,对排名靠前的同学可以进行重点培养为学科竞赛人员,对排名靠后的学生进行重点辅导。为适应不同层次学生的学习需求,教师可以根据学生的知識掌握情况,及时调整实验任务,进行题目的分级分类,从而达到有效反馈、合理调控、提高课堂教学效果的目的。
2. 更好的教学效能
教师把例题和课后作业题目挂到在线评测系统上,例题帮助学生进行熟悉练习,课后作业设置好起止时间,学生通过在线评测系统按时间要求进行作业提交,系统会统计出每道题目的提交次数、提交通过的题目数量及所使用的编程语言,对本次作业的完成情况进行排名,并可导出到Excel文件。教师可以方便地获取到所有学生每道题目的做题情况,查看是否抄袭,记录总结学生遇到的问题,在课堂教学中进行针对性讲解。在线评测系统的使用,简化作业批改,使教师可以注重教育教学及自身素质的提高,从而提高教学效能。学生提交作业后,系统会快速给出评判结果,及时得知作业完成情况,即可进行后续修改与再次提交,与传统收发作业的模式相比,这种方式科学运用了生物心理学的规律,既缩短了反馈周期,又能激发学生的学习潜能和学习热情。
3. 公平客观的考核评价机制
使用在线评测系统进行实验课考核,评判结果公正客观。学生通过使用在线评测系统,可实现对每次考核内容的系统化管理,发现当前课程学习的薄弱部分,主动弥补。每次考核都会给出系统排名,可使学生意识到学习差距,从而能对自身提出更高要求,调动学生学习积极性。
此外,将该系统直接用于学生程序设计语言类课程的考试上,传统的试卷考试对于程序设计语言类课程有很大的局限性,对老师的批改、学生的创新都有很大的影响。我们可以使用该系统,进行上机考试,规定的时间内完成规定的题目。这一方法更加公平公正。
4. 合理的激励机制
评测系统会根据提交通过题目数量、提交通过比率给出总排名,从而鞭策落后的学生努力追赶,给名列前茅的学生一些自信,激励他们继续坚持。将ACM竞赛机制引入实践课教学中,每年定期开展程序设计类竞赛,如新生赛、月赛、周赛、校赛、女生赛,以庆祝某个节假日为主题的节日赛等。通过以上不同形式的激励,激发学生的学习动力,引导学生培养良好的学习习惯,形成积极向上的学习氛围,从而促进教学质量的提高[7]。并且可以通过这些比赛选拨优秀的学生进入到ACM队,为我校培养更多更优秀的竞赛型学生,为参加学科竞赛并获得高水平奖励打下基础。
5. 学科竞赛
学校的ACM队的教师会对基于评测系统选拔出来的计算机学科竞赛的学生进行集中教学和管理,教师同样会录入新的题目或从已往的题库中选择合适的题目用于队员的平时训练,严格控制他们的时间,提高效率。定期举行队员之间的竞赛,或者是让他们参与其他高校的比赛。制定并实行合理赏罚制度,帮助学校挑选最合适的学生去参加学科竞赛,提高学生水平,为学校获得优异的成绩[8]。
四、数据分析
(一)“蓝桥杯”软件大赛获奖数据和代码提交数
我校从第四届(2013年)“蓝桥杯”开始参加软件类大赛,至今已经参加了七届,图2对第四届(2013年)到第十届(2019年)我校参加“蓝桥杯”软件大赛的获奖情况进行统计。由图2可以看出我校在“蓝桥杯”软件大赛中获奖总数呈上升趋势,图中的水平线对应的为某一项的平均值,平均获奖数为36,这证明我校基于OJ的计算机学科竞赛培养有一定的成绩。我校在“蓝桥杯”软件大赛省赛在获奖数量也呈上升趋势由2013年的19项增加到2019年的47项。“蓝桥杯”软件大赛的规则是省赛一等奖选手获得直接进入全国总决赛资格。我们可以看出我校在全国总决赛的获奖情况有波动。与省赛相比, 我们会发现国赛的获奖受很多因素的影响,例如我校师生对蓝桥杯的重视程度不如ACM/ICPC,没有投入更多的精力;某一届学生对编程的兴趣感的强弱;某一届学生生源地的影响(部分省份在中学时就会进行编程教育)。
对我校在线评测系统上2013至2019年的代码提交数进行了统计如图3。经过对比图2和图3,我们发现我校在“蓝桥杯”软件大赛中获奖数量和当年学生在OJ系统上提交代码的数量大致相符合,可能某一年会受到某位代课老师教学习惯(在教学中使用OJ多/少的情况),学校对于学生开课内容等原因的影响,会出现获奖的数量和当年学生在OJ系统上提交代码的数量不太相符的情况。总体来说,可以看出,代码提交的数量和获奖数量成正相关。代码提交多的年份,获奖数量也越多。实践证明,我们的OJ系统在教学中的使用更频繁,学生使用OJ课下练习的次数也在增加,这样有助于我们的学生提高编程动手能力,增加他们对于编程的兴趣,有助于我校培养高水平的计算机相关专业学生。
(二)获奖人数对应生源地
图4为我校在第四届到第十届(2013-2019)“蓝桥杯”软件大赛中获奖人数及其对应省份的分布情况,其中饼图所占面积越大表示我校在该省份生源中获得“蓝桥杯”软件大赛奖的数量越多。图中每个省份后面的数字表示我校在该省份生源中的获奖人数。这其中受到我校计算机专业学生生源地的影响,在几个获奖人数多的省份相对生源比较多。
从图4可以看到,山东,河北,山西,河南,福建等省份的学生获奖人数获奖数量都比较多。我们调查发现由于这几个省份对于中学编程教育更加重视,基础更好。建议学校在分配宿舍的时候可以根据这些统计信息进行合理分配,以一帶多,相互促进,共同提高,从而达到培养更多高水平计算机专业人才的目的。
五、结束语
经过九年教学实践证明,基于北京化工大学在线评测系统的教学实践研究,取得了良好的教学成果,为我校培养了一批具备编程能力和参加竞赛的学生,并在各种计算机学科竞赛中获得了优秀的成绩。但是不能过分依赖系统,教师的引导和监督作用不可忽视。如果缺乏教师的引导和监督,容易导致学生流于形式,影响学习。
参考文献:
[1]张赫尧,史文静,施尔宁,等.基于Online Judge与ACM_ICPC模式的课程探究[J].计算机光盘软件与应用,2014,17(23):212+214.
[2]范江波,张学辉,张建兵.以Online Judge为突破口的程序设计课程全过程学业评价改革实践[J].科教导刊(中旬刊),2019(09):96-97.
[3]陆国栋,陈临强,何钦铭,等.高校学科竞赛评估:思路、方法和探索[J].中国高教研究,2018(02):63-68+74.
[4]苗桂君,刘勇,许南山.在线评测系统在程序设计类教学中的应用研究[J].计算机教育,2016(09):157-162.
[5]李博,孟成博.对HUSTOJ在线评测系统的若干优化与创新[J].现代计算机(专业版),2013(35):47-50+56.
[6]黄宏博.基于ACM竞赛平台模式的程序设计题自动判题系统设计[J].时代教育,2014(03):64-65.
[7]王桂平.高校学科竞赛培训模式探索与实践[J].计算机教育,2019(07):142-145.