张沫 章彪
摘要:对编程类课程而言,传统教学存在填鸭式理论教学、实践教学环节松软流于形式等不足,教学效果不理想。该文针对程序设计类课程教学中存在的问题,给出了基于ACM竞赛模式、运用在线编程测试OJ平台来开展程序设计类课程教学,收到了较好的教学效果。
关键词:ACM竞赛;教学改革;C程序设计;OJ平台
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2021)07-0165-02
Abstract: For programming courses, the traditional teaching method has some shortcomings, such as cramming theoretical teaching and practical teaching, which is not satisfactory. In view of the problems existing in the teaching of programming courses, this paper presents the teaching of programming courses based on ACM competition mode and online programming test OJ platform, which has achieved good teaching effect.
Key words: ACM competition; teaching reform; C programming course; OJ platform
C語言是计算机专业的通识基础课程,旨在培养学生的逻辑思维能力、创新实践能力和解决实际问题的能力,为后续专业课程的学习奠定良好的基础。该课程具有表达能力强,简洁紧凑、灵活方便,程序设计自由度大,生成目标代码质量高,程序执行效率高等优势。 由于c语言的特点决定了学习者本身需要很好的基础,而很多学生是第一次接触c语言,没有编程基础,这也就使得学生很害怕上这门课程,学习进度也比较缓慢。针对这种情况,如何教好学生这门课,让学生爱学能学,对提高学生的程序设计能力至关重要。
1 传统教学效果不理想
1.1 理论与实践脱节,学生学习兴趣欠缺
在课堂上学习的时间有限,理论知识点丰富,使得教师必须花费大量的时间来讲理论部分, 这样的话学生实践的时间很少没有进行实际操作,无法深刻把握,课堂后缺乏自主学习的能动性,“满堂灌填鸭式”教学也让学生没有学习的兴趣。
此外,学生的实验结果通常课程结束后才公布。只要完成实验内容,大多数学生就不再进行深入探索。另一方面,实验方案激励不足,学生之间没有形成良好的竞争氛围,所以整体教育质量也没有得到提高。
1.2 教师教学手段单一
根据学生之前学年学习的结果来看,发现学生们“事前热情,事后乏力”,因为他们缺乏必要的学习韧性。还有就是在高等职业教育机构中,c语言教学内容过于强调基本原则和基本业务,并且,“碾压式教学”也没有考虑到高等教育的专业性质和知识基础薄弱的学生。 教学中,教师的方法缺乏多样性,仅仅借助一些经典的解释和验证示例,这也就让许多学生在使用C语言的时候不能独立解决出现的问题,或者必须依靠教师传递的代码,然后把这些代码直接执行复制和粘贴操作,对自己所写的程序完全不了解,脱离实际应用,造成从学生不再听老师讲课,学习出现困难的时候也不再向老师寻求帮助,消极应对,使得教学效果较差。
1.3 实践教学环节松软,流于形式
该课程实践的时间严重不足,以浙江邮电职业技术学院为例, 2016年这门课程共设置72小学时,实际操作36学时,理论课堂36学时。学习的时候学生们主要听老师讲解,自己操作的时间几乎没有,然而也只能在课堂上问老师,但老师并不总是能解决课堂上所有学生的问题。沟通平台也没有搭建起来,师生沟通机制也没有形成,造成实践无法发挥最佳效果。另外,学生学习通常都是被动式的接受,低年级学生往往也倾向于“被动”获得知识,不能主动从网上学习,也不能独立学习。也就是说,他们必须在老师的指导下才能进行试验课程的学习。
1.4 考试机制不合理,仅仅“为考而考”
以往教学中,学生在课堂学习、完成课后练习 、实验室报告、期末测评等方面的学习成绩都会受到考核,而这些考试通常只涉及客观问题,表现的是学生的记忆和叙述能力,而不能表现学生分析和解决问题的编程能力。采用这种检验方法过于注重形式评价,试验作业的期末评价需要以学生实验操作水平作为考核标准。然而以往都没有实行这样的考核方法,只能以卷面考试来代替。
2 基于ACM 竞赛模式的C语言课程教学探索
为了解决传统教学存在的不足,我们引入了ACM竞赛模式下的教学改革策略。ACM竞赛是一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛,是世界上最具知名度的大学生计算机编程技能竞赛之一。竞赛由至多3名在校学生组队,每队分配一台电脑,竞赛时长历时5个小时,考验团队创新和团队合作,考核学生在开发新软件时的创造性,还能测试他们在压力下工作的能力。经过多年的发展,该竞赛已经发展成为最具影响力的大学生程序设计竞赛,目前已经已有很多优秀的OJ系统。国内知名度较高的有北大的POJ、哈工大的HOJ、浙大ZOJ、杭州电子科技大学的HOJ、牛客网等;国外比较知名的系统有OJ SGU、UVa Online Judge等。这些平台共有的特点有:
2.1 题目涉及领域广,对学生要求高
ACM从难度来看,有水问题(简单问题)、中等问题和高难度问题这三个层次,平台主题包括排序、搜索、递归、分区、图形算法、数据结构、搜索算法、动态规划、数学问题、计算几何和具有多种算法的合成类算法主题;教师和学生按照每个问题后的成功率来确定问题目标的难度,并在教学中运用这一特点进行分层教学。
2.2 磨炼学生的创新和团队协作能力
竞赛由三名学生组成小组,他们共用一台英语计算机,限时5个小时团队协作进行C、C++或Java编程程序,鼓励学生在开发新软件时表现出创造性,并且还能测试他们在压力下工作的能力。
2.3 磨炼学生的抗高压能力
这些平台每个科目都需要大量的操作时间和内存来测试学生算法的优越性;建立足够多的方案测试实例,用这样的方法来测试学生能否充分考虑问题;程序的返回结果须遵守非常严格的格式要求,以测试学生编写代码的严格程度;提交问题的总次数用罚时的方法进行,每多提交一次,总运行时间多几分钟,这是为了测试学生解决问题的速度和能力。这种评价机制要求学生具备很强的抗压性,这种模式的长期教学可以就学生的理解和解决问题这两方面的能力得到很好的发展。
2.4 采用在线评测系统,追求高质量程序
这些平台拥有足够多的练习和竞争所需要的习题,并为每个平台提供了大量的实验使用实例。学生的程序代码会在线上传送,而且代码会在结果页面上以不同的区域进行测试精确度、总时间、记忆体使用率即内存消耗等等。学生们评价以结果为标准进行调整。此方法是对学生分析问题、资料点整合、算法最优化、内存的分配和控制等方面能力的考核测试。
3 课程教与学中引入OJ平台和ACM竞赛模式
3.1 在理论教学中引入ACM 竞赛
1)任务驱动
在某些理论教学内容中,可以从ACM的基础题目中选取若干个相似的简单题目,学生通过解题,可以加深对理论的理解。
2)翻转课堂
对于指针等最难掌握的知识点,通过事先编写好代码,学生可以事先好好理解以下代码,并在课堂开始时在ACM平台上进行测试,然后着重把握理论内容中最困难的点,使得课堂教学效率得到提高。
3.2 基于ACM的实践教学
理论教学结束后,选择了一些试题进行理论解释和强化,平台会根据学生提交的代码,给出相应的结果,学生能够根据结果判断该程序是否正确,从而避免了再去设计自己的程序测试用例。通常情况下,学生不会参与c程序设计中的软件测试,也不会体验到设计测试的示例。程序运行后,程序运行没有出现错误通常也被识别为正确,比如在一次编程中,一名学生在输出结果时没有换行, 运行一次的答案是正确的,该学生误认为换行与否不重要,这样做明显不正确。假若在ACM平台上提交程序,如果对问题回答不正确或输出格式不正确时,系统将给出“WA”或“PE”,这将有助于学生检测程序中的问题,培养学生的严谨性。
3.3 基于ACM的课程教学优势分析
1)小组学习和协作学习:作为编程课日常教学的一部分,ACM可协助学生指派三人组成一個小团队,其中一人作为其他两组成员之间相互学习的管理员,以加强协同合作,这种教学形式既增进了合作意识,也促进了学生的专业发展。
2)多层次教学:在OJ的在线平台上,简单和困难的问题做出区分,举例来说,杭电ACM平台,11页之前英文题,之后为中文题,学生学习更加循序渐进,有利于学生学习。学生的基础和能力各不相同,在实践中,不同的学生应选择难易程度不同的问题,这样有利于分级学习取得很好的效果。
3)实时实际执行:OJ平台包括各种主题,当主题完成时,学生可以在线查阅,测试平台进行结果的反馈,显示即时效果,并提供讨论论坛,让各路高手处理这些主题,而无须教师参与。
4)激发学生兴趣,点燃学习热情
近年来,在引入ACM平台助理程序设计学校方面,学习举措已明显改善,大多数学生对学习前学习和程序设计都有意识。例如,本学期程序员为“选择结构”部分处理15个主题,而这两个课程102名学生中72%提出30多个问题,甚至45个问题。在教程的后续章节中,学生学习的方法变得越来越有趣。他们开始超出书本或教科书中包含的主题和专题,开始设法解决平台上一些最困难的问题,这些问题对学习兴趣、学生编程能力的发展和继续教育都有帮助。
4 结束语
在引入ACM竞赛模式到C语言课程教学的三年时间内,学生期末测试成绩优秀率逐年上升,学生参加ACM省赛和市赛的成绩也有了很大进步,其中第十五届ACM竞赛获银奖、十六届和十七届ACM竞赛获金奖。由此可见,基于ACM的教学模式既使得教师教学负担变小了,还有利于提高学生编程方面的能力,激励学生进行自主学习,有利于学生毕业后更好地适应软件开发工作。所以, 我们将进一步扩大此类平台的使用广度和深度,更大地提高编程类课程的教学效果。
参考文献:
[1] 刘宇欣,周秋霞.ACM平台在C程序设计教学中的应用[J].计算机时代,2018(3):66-69.
[2] 田仲富,刘楠,李桂英.高校优质数字化教学资源共建共享有效策略研究[J].科教文汇(上旬刊),2018(1):1-3.
[3] 李环.基于ACM竞赛的程序设计类课程教学改革研究[J].计算机教育,2016(3):115-118.
[4] 徐新爱.基于学科竞赛的《C语言程序设计》课程教学改革研究[J].西南师范大学学报(自然科学版),2015,40(9):224-228.
[5] 林金珠,倪天伟.基于ACM-ICPC竞赛的C语言课程教学实践[J].安庆师范大学学报(自然科学版),2017(1):102-104,119.
[6] 戴丽萍,宋艳,张风彦,等.《C语言程序设计》课程教学改革与实践[J].当代教育实践与教学研究(电子刊),2015(11):548.
[7] 王晓娜,刘素转.C语言程序设计课程教学改革研究与实践[J].课程教育研究,2018(1):223,226.
[8] 王兴国.基于互联网+的数字化网络教学资源共享应用研究[J].科技经济导刊,2017(4):55.
【通联编辑:代影】