王金鹏,曹旗磊,王 涵
(山东工商学院 计算机科学与技术学院,山东 烟台 264005)
程序设计基础是一门实践性很强的课程,传统教学模式是理论课和实践课(上机)分开上,导致理论和实践脱节:理论课时,学生只能被动地听教师讲或者看教师操作,自己不能动手实践,“课上听来终觉浅”;实践课时,由于学生对知识的掌握度不同和操作进度不同,教师又不便做统一、系统的讲解,学生只能凭着在理论课上所听所看内容的残存记忆来操作,收效甚微。
传统的作业方式一般是教师布置任务后由学生自行上机练习,由于缺少“分数驱动”式的激励措施,故学生的积极性不高,且由于缺乏有效的验收机制故作业完成度也不高。另外,在这种作业方式下,抄袭作业的现象时有发生,并非每个学生都能亲自动手上机编程,使通过作业培养学生动手能力和实践能力的目标难以达成。同时,教师对学生学习的真实情况也难以掌握。
传统的考核方式是以期末考试(纸质试卷)为主,平时成绩只占很小比例,可以说是“一考定终身”,这种考试方式存在很多弊端,如考核内容不全面,成绩的偶然性很大,难以考查学生的动手实践和程序调试能力,对学生平时学习缺乏过程化监管和考核,对学习差的学生不能进行提前预警导致考试结束成绩不理想时已无可挽回等。
鉴于上述问题,有必要对程序设计基础的授课模式、作业方式和成绩考核方式进行改革,以提高教学效果。
为解决理论和实践脱节问题,可采用边讲边练的教学模式[1]。所谓边讲边练,就是在机房内授课,学生人手一机,教师根据需要可以随时讲述理论知识,也可以随时让学生动手实践,两种授课模式任意切换。这种教学模式不仅将理论和实践有机地结合起来,而且还可使教师实时地了解学生对知识的掌握情况,便于调节讲课进度和授课计划。
采用一种基于Online Judge(简称OJ)系统的作业方式[2],可有效解决传统作业方式所存在的诸多的问题。
OJ 是一种广泛用于大学生程序设计竞赛的在线评判系统,也叫ACM 在线评测系统[3],基于B/S 结构实现[4]。在OJ 平台上,参加比赛的队员可通过网络在系统中阅读题目、编制代码提交并查看运行结果是否正确。
基于OJ 的作业方式,是由教师在OJ 平台上编制题目并布置作业,学生可随时随地通过网络登录系统做题。这种作业方式的好处是学生提交的代码是否正确可实时在线评判,若结果不正确可以修改代码重新提交,直至正确为止,每次提交结果都有记录。借助OJ 平台,教师可以准确地掌握任何一名学生任何一次作业中的任何一题的完成情况(对于抄袭代码,系统有相似度检测,教师也可以人工查看代码)。
采用基于OJ 的作业方式,可有效提高学生的动手编程能力和程序调试能力。传统作业方式下,很难保证每个学生都能通过上机编程来完成作业,更勿论程序调试了,而在OJ 平台上,只有亲自动手编程并调试出正确结果,方能提交代码并被系统接受。
采用基于OJ 的作业方式,可有效提高学生做作业的主动性和积极性。新的作业方式可结合“分数驱动”的过程化考核方式(即每一题都按一定的分值计入期末总分),在每次作业后都实时公布每个学生的累计成绩,并且由于OJ 系统中有按做题数量排名的功能,故极易在学生中形成你追我赶、争先恐后的良好风气。
采用基于OJ 的作业方式,可有效解决作业完成度不高的问题。在传统的作业方式下,作业完成度不高主要原因是学生自身具有惰性,而教师又因为没有有效的验收手段而无法确定督促对象。在基于OJ 的作业方式下,每个学生对每个题目的完成情况教师都可随时在OJ 上查看,一目了然,对于作业完成情况不好的学生教师可随时进行督促。
基于OJ 的作业方式,还可以结合本文后面介绍的考核方式,对学生学习情况进行过程化监控和即时预警。
考核方式的改革主要体现在新的考核方式增加了对平时学习的过程化考核和对学生动手实践能力的考核两方面的内容。
2.3.1 对平时学习的过程化考核
将平时作业计入期末总分。结合基于OJ 的作业方式,规定平时作业中的每个题(含测验中的题目)都占一定的分值,计入期末总成绩(约占总成绩的30%)。
将原来的1 学期考1 次改为1 学期考3 次。把1 学期的授课时间分成3 个阶段,每一阶段进行1 次机考,3 次机考成绩共占期末总成绩的70%。
每次作业、测验和考试之后,都把学生所得的分值(绩点)记录在册,用Excel 表格的形式公布于众,学生可以查看自己每次的得分和总绩点,实时掌握自己的学习情况。
采用上述两项措施的目的是增加过程化评价环节,尽量降低偶然性的影响,使考查的知识点更多,考核更全面、更合理;使学生对自己平时学习情况更了解并可即时预警;使教师在督促或激励学生时有的放矢。
2.3.2 对动手实践能力的考核
程序设计基础旨在培养学生的计算思维能力、动手编程能力和程序调试能力[5],纸质试卷难以对上述能力进行全面有效的考核。将纸质考试改为上机考试的好处是能够对学生动手编程和程序调试的能力进行有效考核。
山东工商学院对程序设计基础课程的教学改革始于2010 年,2010 年首创边讲边练教学法并践行至今,2012 年在计算机科学与技术(简称计科)专业实行新的基于OJ 系统的作业方式,2014 年推广到全部6 个专业,同时开始采用1学期3 次机考、结合平时成绩评定总成绩的考核方式。
为了更好地推进教学改革,2014 年,在借鉴兄弟院校OJ 系统的基础上开发了本校的OJ 系统以及“程序设计基础考试系统”。
“程序设计基础考试系统”可用于平时作业和考试,目前已稳定使用4 年。系统支持选择、填空、判断、程序填空、编程等题型。目前,系统中有用于平时练习的题目约1 500 题,用于考试的题目约800 题,题库可进行增、删、查、改等操作。系统还支持手动出题和随机抽题两种组卷方式,学生交卷时可立即看到考试成绩,并能对考试成绩进行分类统计分析。表1、表2 分别是考试之后的成绩统计分析、各知识点得分率。
针对作业当中出现的抄袭代码或提供代码给别人的行为,笔者在OJ 平台中加入了代码相似度检测功能,该功能可检测出任何一份代码与以往每一份代码的相似度,并给出最高相似度及所对应的代码,教师可根据相似度并结合人工查看代码的方式决定是否对学生进行判罚。
表1 计科18 级第2 次考试成绩统计分析
表2 计科18 级第2 次考试选择题得分率统计
上述改革措施是在不断摸索、实践、总结的基础上逐渐成形的,是在计科专业首先实施,并在近几年开始向其他专业推广,但目前其他专业采用的措施并不彻底(因各种原因部分措施未实施),也不成熟。计科专业由于起步较早,做法更彻底,已经形成了一套固定的模式和优良学风的传承,故计科专业的教学水平与其他专业的教学水平相比已形成了较大优势,表3 是2014 年实行各专业统一考试以来计科专业与其他专业的平均成绩对比,从中可以看出新的教学模式、作业方式和考核方式具有压倒性优势。
新的教学模式、教学方法应用之后,学生的学习成绩和学习兴趣都有了显著提高,学生参加各种竞赛或考试(ACM 竞赛、全国蓝桥杯比赛、考研复试等)的成绩都有了突破性进步,毕业生质量更是迎来了令人惊喜的改变,近几年计科专业的本科毕业生频频被百度、360、趋势科技、饿了么、蘑菇街、链家等公司录用,这些标志着基于Online Judge 教学法的程序设计基础教学水平得到社会的广泛认可。
表3 历次考试计科专业与其他专业平均成绩对比
研究和实践表明,边讲边练授课模式可有效解决理论和实践脱节问题,基于Online Judge 的作业方式和考核方式,可有效提高学生的动手实践能力和程序调试能力,提高学生编程的兴趣和积极性,可对学生平时学习进行过程化评价,使成绩考核更合理,还可使教师更好地掌握学生的学习情况,所有这些,对于提高学生的学习成绩和程序设计基础课程的教学水平都有巨大的作用。