摘要“高级语言程序设计”是高校学生程序设计入门课程主要包括编程语言的基础知识、基本语法和程序设计基本方法。针对目前实验教学现状及存在的问题基于的程序设计实验平台被引入“高级语言程序设计”课程实验教学中。实践证明基于该实验平台的实验教学改革措施对于增强师生之间交互、促进学生自主学习、帮助教师了解学生学习情况、改进教学方式有积极作用。
关键词:Online Judge;程序设计;辅助教学
中图法分类号:TP311文献标识码:A
Teaching research of “high-level language programming”based on Online Judge
GUO Wang
(School of eMathematics and Statistics,SouthwestUniversity,Chongqing 400715,China)
Abstract:“High-level language programming” is an introductory course of programming for college students, which mainly teaches the basic knowledge, basic grammar and basic methods of programming language. In view of current experimental teaching status and existing problems,the programming experiment platform based on online judge has been introduced into the experimental teaching of “high-level language programming” course. Practice has proved that the experimental platform can help enhance the interaction between teachers and students, promote students' autonomous learning, understand students' learning and improve the teaching process.
Key words: Online Judge, programming,auxiliary teaching
“高级语言程序设计”是高校学生程序设计入门课程,主要讲授编程语言的基础知识、基本语法和程序设计基本方法。通过该课程理论、实验等环节的学习与训练,学生可以理解编程语言及应用方式,掌握利用计算机解决问题的能力,培养计算思维,并通过实验锻炼动手能力。编程语言的掌握程度对学生后续学习有较大影响。
“高级语言程序设计”作为实践应用型课程,实验环节在教学中占有重要地位,有利于学生对理论知识的消化与吸收,培养其解决实际问题的能力。如何加强实验课程的过程化管理,准确掌握学生学习情况,如何客观地对学生提交的实验结果进行评价,如何快速地对实验报告进行批改和反馈,是当前实验教学面临的普遍问题,对实验教学质量有重要影响。
1实验教学现状及存在的问题
“高级语言程序设计”课程实验教学形式主要是教师布置实验作业,学生在实验课上进行编程练习,同时教师在现场进行指导。实验习题大部分来自书本,通常利用本章节所含理论知识即可编程解决。在这个过程中,往往一位教师同时对几十位同学进行指导,教师几乎一直在响应学生的提问,而解决一个程序问题需要阅读学生编写的代码、发现问题并对学生进行多方面的引导,由于指导学生已经占据了课堂的主要时间,教师通常只能在课后通过学生提交的实验报告掌握监测其实验情况。然而,这种方式存在以下几个问题:对于学生而言,实验过程中的疑问不一定立刻能够得到老师的指导,提交实验报告后也无法及时得到实验结果正确与否的反馈。对于教师而言,即使每次实验课都尽心尽力,还是无法照顾到每位学生;课后实验报告的批改量较大,人工批阅代码难免遗漏一些程序逻辑错误;无法针对每位学生做出反馈,且对于学生实验中的问题,往往需要重现当时的实验环境和编辑运行的状态,才能进行针对性解决,现有的实验条件与交互方式无法实现,而良好的交互是提高教学质量的必要手段;缺乏學生实验过程监测数据,只能以实验报告作为判断学生实验效果、给定平时实验成绩的依据。
2 Online Judge 简介
在线评判系统( Online Judge System)是一种基于 Web 的交互式程序设计训练系统[1]。在线评判系统的大量使用始于 ACM 程序竞赛[2],为了备赛,国内外许多大学都分别自行开发了类似的在线评判系统,用于日常训练和内部比赛。系统能对学生用 Web 浏览器提交到服务器的习题、作业等程序源代码进行在线编译,生成可执行文件,并从数据库中调用测试数据,从程序运行的正确性、耗时、耗费内存及返回结果等各方面评测试代码,并精确反馈测试结果[3]。系统后台管理一个或多个题库,提供训练题目,每个题目有多个测试用例,以验证用户提交的代码的正确性。测试用例一般包含多组测试输入数据和一组正确输出数据,用户提交程序代码后,系统通过验证在相同输入数据时程序是否可以分别正确地输出结果,以判断程序的正确性。
3基于 Online Judge 的课程实验教学改革
为了解决目前“高级语言程序设计”课程实验教学存在的问题,基于 Online Judge 的程序设计实验平台被引入其实验教学中。课程采用了北京理工大学 Python 教学团队主持设计的 Python123在线教学平台[4],平台面向 Python,C,C++等编程语言,提供课程建设和管理、习题库建设、程序习题自动评阅、学习数据综合分析、混合式教学辅助等功能。
3.1按照 Bloom 教学目标分类法组织知识点
布卢姆(美国当代著名的心理学家、教育家)将认知领域的教学目标按由简单到复杂的顺序划分为知识、领会、运用、分析、综合、评价六个层次[5],形成由低到高的阶梯,对知识的掌握程度是逐步加深的,前一个层次是后一个层次的基础。前三个层次(知识、领会、运用)描述了聚合思维的过程,后三个层次(分析、综合、评价)描述了发散思维的过程。前者使学生回忆起来知道和理解的内容并用于解决问题,后者使学生创造出经验中不存在的新见解和新发现。
实验平台支持自定义习题(图1),习题支持选择、判断、填空、简答、讨论等题型,每道题目均可设置涉及的知识点,按照 Bloom 教学目标分类法,发布知识点与习题,标注题目难度、类型,便于科学设置作业难度,分析学生知识掌握层次。也可使用系统已有的大量共享题库来自建习题,以共享给其他教师,极大丰富了课程练习与作业的内容,减轻了命题工作量,提升了命题客观性[6]。“高级语言程序设计”课程实验的主要内容都是实验平台上的习题,分为基础性实验和提高性实验。自建习题主要由两部分构成,一部分来自课程所用教材的课后习题,通常用于基础性实验,包括模仿、知识、理解和简单应用等较低层次目标,单题涉及知识点较少,综合难度不高;另一部分来自国家计算机等级考试中的真题以及部分竞赛题目,主要用于提高性实验,包括分析、评价、综合、设计等较高层次目标,单题涉及知识点较多,综合难度显著提高,可以增加习题的高阶性、创新性和挑战度,激发学生的解答兴趣。
3.2单元模式助力实验考核评价改革
实验平台采用练习、作业、考试三种类型的答题单元(图2)。练习单元用于学生自主学习,不设截止日期,学生提交答案后即可立即查看答案和成绩,学生可以反复进行练习,在练习中不断巩固知识点。练习单元主要为基础性实验,题型主要为选择题,通常每次练习10道选择题。作业单元用于教师布置平时实验作业,有明确截止日期,截止日期前无法查看答案和成绩,截止后无法作答,教师可在单元教学结束后,设计单元作业题目,通过答题情况发现知识掌握的薄弱点,在之后的课堂上着重讲解。作业单元既包含基础性实验,也包含提高性实验,题型包括选择题、填空题和程序设计题,通常每次布置5道选择题、5道填空题和2道程序设计题作为作业。考试单元用于单元测验、期中或者期末上机考试,教师设置在线试题、考试时间,考生在线答题,考试结束后,支持下载考生代码、命题试卷、成绩等,匹配教学管理要求,教师可以在整个学期不同阶段开展阶段性测试,帮助学生找到适合自己的学习方式。
在以往的“高级语言程序设计”课程实验考核中,教师主要以学生提交的实验报告评定实验成绩,实验报告中程序代码抄袭现象严重。与此同时,考核成绩存在一定的人为因素,影响成绩的公正性。所以,在引入实验平台后,实验考核将不再采用纸质实验报告,而是采用实验报告和上机测验相结合的形式,而且强调过程考核。
3.3代码自动评阅,实验反馈提速增效
平台提供基于 Online Judge 的代码自动评阅功能(图3),可以自动判断学生提交的答案是否可以正确解答问题,立即反馈实验结果,解決教师无法兼顾每位学生的问题,同时极大减轻教师作业批改负担;教师在设置习题时可提供完整且详细的参考答案,对于一段代码采用多组测试用例验证,指引学生快速找到程序逻辑漏洞,纠正代码错误,增强其自主分析问题解决问题的能力,帮助他们从被动学习转变为主动学习。
3.4学情统计,监测实验全过程
平台针对每一课程单元,提供作业提交率、成绩分布、及格率、平均分、习题正确率、习题平均分、习题提交次数、学生学习时间、最活跃时间段等学情统计及可视化数据分析(图4),针对教师所教授班级,提供班级学习数据和实验成绩,提高教师成绩统计效率,帮助教师了解学生实验全过程,教师可在班级范围内进行公示,增强学生学习的收获感和成就感。同时,教师可以通过对学生学习过程中产生的数据进行管理和分析,帮助教师了解学生对知识点的掌握程度,及时调整教学进度,不断优化教学方案。比如,对于正确率不高的习题所涉及的知识点可以在讲评时重点讲解。
3.5精心设计实验内容,驱动学生自主学习
“高级语言程序设计”课程实验教学改革首先搭建基于实验平台的开放教学环境,然后,以实验平台上的题目为核心,让学生进行探索、研究。首先,教师以实验平台上的挑战性问题进行问题驱动,从而激发学生的学习兴趣,刺激学生进行自主研究。学生在阅读实验问题后,思考解答方法,也可自行查阅资料。当教师发现学生自主学习遇到障碍时,可以进行适当引导。由于提高性实验难度较大,会使部分程序设计基础薄弱的学生产生畏难情绪,对于这部分学生,可以在教学要求上实现分层,即不要求完成所有提高性实验,引导他们首先巩固基础性实验。在课程后期,布置较为复杂的实验大作业,鼓励学生根据能力强弱、优势特点每3人组成一个团队,团队内部自由交流,合作寻求解决方案,在适当的时候教师也可以加入讨论、交流,对学生加以引导。作业完成后,每个团队须提交团队实验报告,总结经验与收获,报告团队成员贡献率。另外,额外设置部分附加实验,引导学有余力的学生进一步探究,并在考核成绩中给予一定的奖励分。
4教学成效
在将程序设计实验平台应用到实验教学中后,教师对学生知识点的掌握程度了解得更加清楚,通过对错误进行分析处理,进行示范和讲解,改进教学过程和布置相关习题练习,同时大幅度减少教师批改实验报告的时间,形成了良好的教学反馈,增强学和教的体验;学生应用程序设计知识解决实验平台上的具体问题,体会到所学知识和所编程序的价值,激发了学生的学习兴趣和热情,促进了学生自主学习,提高了学生实践动手能力,有利于培养学生综合应用所学知识解决实际问题的能力。图5统计数据表明,使用实验平台的班级学生成绩较未使用实验平台的班级学生成绩明显提高。图6统计数据表明,教师评阅时间大幅减少。
5结语
针对“高级语言程序设计”课程实验教学过程中学生得到指导不足、实验结果反馈不及时、实践动手能力不能得到充分锻炼等情况,同时为了减轻教师课堂和课后工作负担,更好地跟踪学生在“高级语言程序设计”课程的学习状态和进展,本文构建了一种基于 Online Judge 程序设计实验平台的教学环境。该实验平台可以对学生提交的程序正确性做出自动判断并给出结果,极大减少教师的工作量,同时学生可以立刻得到系统反馈并在不断尝试的过程中学习和积累经验;全面的学情数据统计能够帮助教师了解学生的学习效果,不断优化教学方案。实践证明,基于实验平台的实验教学改革措施对于增强师生之间交互、促进学生自主学习、帮助教师了解学生学习情况、改进教学过程有着积极作用。
参考文献:
[1]吴舜歆,梁宝兰.Online Judge 的设计与实现[ J].福建电脑,2012,28(2):166?167.
[2] Wasik A ,Antczak M ,Badura J ,et al.A Survey on OnlineJudge Systems and Their Applications [ J].ACM Computing Surveys( CSUR),2018,51(1):31?34.
[3]黄晓华,沈健,常晋义,等.基于 Online Judge 与 HTML 批注技术的实验教学平台设计[J].计算机与现代化,2014(11):117?121.
[4]黄云,洪佳明,覃遵跃,等.基于云平台的"程序设计基础"课程实验教学改革[J].实验室研究与探索,2016,35(2):191?195+223.
[5]许小东,吴军强,刘小晶.基于 MOOC 的程序设计开放实验平台的构建[ J].实验室研究与探索,2017,36(4):157?160.
[6]廖雪花,厉兰洁,唐思娩.基于 Online Judge 的 C 语言程序设计实验课教学改革研究[J].计算机教育,2016(6):130?132.
作者简介:
郭旺(1990—),硕士,实验师,研究方向:软件工程、软件测试。