1. 引言
“程序设计”是我校非计算机专业学生的一门科学文化基础课程。该课程的目标是在“大学计算机基础”先修课程基础上,使学生理解程序设计的基本思想、方法和过程,掌握C程序设计相关的基本概念、控制结构、数组、函数、指针、文件的等理论知识,使学生具备一定的实际问题分析、设计和解决能力,能独立思考、敢于质疑批判,在具有挑战性的学习过程中磨练坚毅、顽强、不断进取的意志品格。上述教学目标决定了课程学习具有相当的难度,以往的教学经验也表明,学生在学习过程中存在学期中间掉队、作业拷贝抄袭、考前突击记忆等现象,要保证学生有效达成上述教学目标的挑战巨大。
2. 问题分析
现阶段,我校学生“程序设计”课程的教学考核主要面临着以下问题:
1) 学生的应试能力强与实践能力弱的矛盾问题。对很多学生而言,本课程学习的目标就是为了通过考试,这种通过考试的观念则体现为“画重点”、“给题库”,甚至背、记程序代码,通过考前突击学习、短暂性记忆就可以过关 [1] 。因此,有待重塑学生的大学学习方法与态度,提高学生的日常学习效率,提高运用程序解决实际问题的意识与能力。
2) 课程形成性考核量化存在负担过重或依据不强等问题。若形成性考核量化过细,则考核内容与频次仅依靠老师人工记录,会存在“教、学、管、保”负担过重问题,影响老师课堂教学,且会过多占用学生课后课程学习时间 [2] 。形成性考核量化过粗,则依据性不强,对“教、学、管、保”的指导性作用就不明显。
3) 课程考核对学生能力考核偏弱的问题。“程序设计”是一门面向全校学生的基础课程,课程理论与实验并重。终结性考试采用试卷考核,难以考核出学生运用程序设计、程序调试和程序编写技能解决实际问题的能力 [3] [4] 。
4) 形成性考核成绩评定不能跨班级的问题。目前程序设计课程的形成性考核是在每一个期班内部由老师考核实现,无法实现跨班级、跨专业、跨队别、跨学院的公平公正的形成性考核成绩统一评定。
上述问题的存在严重影响了课程教学目标的达成。为此,我们对考核方式进行了改革,通过强化形成性考核,把学习效果落在平时、落到实处;通过综合性实验设计等考核,提高学生学习积极性、探索欲。使学生不仅掌握C语言相关知识与原理、程序设计方法,更要把这些知识、原理、方法转化为用程序解决实际问题的编程实践能力。
3. 改革目的与内容
考核改革以突出考核学生高阶思维能力 [5] 目标为牵引,区分“记忆、理解和应用”等基本知识和技能考核和“分析、评价和创造”等知识技能运用和解决复杂问题能力的考核。强化“学中考”,突出过程性考核的比重和量化,引导学生重视课前、课中和课后等过程性学习效果检查 [6] ;强化“考中学”,建立以考促学的激励机制。设置综合性实验,并提高其成绩占比,突出对利用程序设计课程知识独立自主解决应用问题能力的考核。
考核方式强调“重过程”、“重创造”的理念,以终结性考核作为学生基础能力的保底检测手段,突出形成性考核对学生成绩评定的效用。重点改革形成性考核的内容与方法,引导学生重视平时课程学习。其中,“重过程”体现为:将形成性考核成绩在总成绩中的比重提高到60% (原比重为40%),形成性考核由课前测试成绩、课后测试成绩、作业成绩、实验成绩、阶段性测试成绩、综合性实验成绩五个部分组成,各项成绩占比分别为5%、5%、10%、10%、15%、15%。
“重创造”体现为:综合性实验。老师设置具有一定难度的综合性实验,由学生自主设计流程并实现算法,其中:手绘流程图和手写伪代码/代码,成绩占比60%;依托EduCoder在线实训平台(https://www.educoder.net/)调试评测程序,成绩占比40%。
考核改革的最终成绩,由形成性成绩和终结性考核成绩共同决定。终结性考核不及格,则以终结考核成绩为最后成绩;终结性考核及格,则按形成性考核成绩与终结性考核成绩加权得到课程最终成绩,其中,加权权重分别为60%和40%。
4. 课程考核改革情况
4.1. 总体情况
考核改革的对象分别来自A学院、B学院共计8个期班,共计373人,由4名老师同时实施。按照考核实施内容,各个教学班依托Educoder在线平台组织了10次课前测试、10次课后测试、10次作业和10次实验,以及2次阶段性测试,还组织了一次综合性实验考核,最后形成了形成性考核的成绩。
4.2. 课前测试与课后测试
课程总课时40学时,每周2次课,其中:1次理论课、1次实验课,共10周。在课堂上,主要采用了线下理论讲授和线上实践练习的授课方式。课前测试主要依托Educoder在线平台完成。考虑到学生连接网络、网络中断等异常的存在,课前测试和课后测试分别安排在授课前一天和授课当天。老师通过统计分析学生课前测试和课后测试的成绩,可以有效掌握学生的学习情况,实时调整授课内容的重点和难点。课前测试和课后测试的Educoder系统界面如图1和图2所示。依托平台,可以快速统计出每道题目的正确率,为老师了解学生对知识点掌握情况提供有效的手段。
4.3. 课后作业和课内实验
课后作业主要是选择题和简单编程作业,目的是检查学生课堂知识的掌握情况(见图3),作业需要学生动脑分析并动手编写程序来完成,系统会自动评测程序给出分数。为鼓励学生独立自主完成作业,允许学生反复提交测试代码,提交次数不作为成绩优劣评判的依据。同时,老师也会人工检查评阅学生的代码,对用时较少和测试次数较少的学生进行抽检,查阅学生完成作业的独立性和有效性,也可以结合课堂教学进行检查。
4.4. 阶段性测试
在考核改革中组织了2次阶段性测试,一方面检查和督促学生的学习,另一方面考察学生对已学知识的掌握程度,供老师及时了解学生学习效果,及时调整后续授课进度和重难点。第一次阶段性测试安排在C语言顺序、选择和循环三种基本结构之后进行(见图4);第二次阶段性测试安排在数组和函数之后进行,同时测试内容包括所有已学知识(见图5)。依托Educoder平台,测试题目包括选择题、填空题和编程题,其中编程题占比40%。从测试成绩来看,两次阶段性测试学生成绩均分都在85分以上,部分班级均分达到90分以上,体现出学生在平时学习中具有较好的学习态度和较强的编程能力。对于得分低考点知识进行分析,在后续知识的授课中,老师通过增加这些知识点的迭代讲解来巩固学生学习效果,同时对考试成绩偏低的学生进行了重点关注和辅导。
4.5. 综合性实验考核
综合性实验考核主要考察学生的程序设计、代码编写和实验报告撰写能力。考核分为三个阶段:
1) 实验预习
老师发布实验任务,学生理解实验问题,查找资料完成设计思路、设计程序功能模块、描述算法流程、撰写伪代码,并提交预习实验报告。在该过程中,检查学生是否掌握了结构化的程序设计方法、模块化函数的使用思想,以及规范的算法描述。
2) 在线实验
依托Educoder平台,组织学生进行集中在线考核,主要检查学生是否能够根据预习报告的实验设计内容独立地完成程序代码的编写、调试工作。要求在2小时内在线提交评测代码,并对代码进行查重检查,防止有抄袭作弊情况。综合性实验在线评测结果见图6。
3) 报告撰写
实验结束后学生提交一份实验报告,对自己的实验过程进行总结分析,主要包括关键问题及其解决方法、实验体会与收获等内容。综合性实验主要考察学生的问题分析能力、综合运用课程知识设计方法、解决问题的能力以及实验报告撰写能力。综合性实验报告采用电子版网络提交,老师在线评阅给定成绩。
依托平台可以完成所有形成性成绩的统一管理,每项形成性成绩都可从Educoder平台导出,最终的形成性成绩可由考核改革预设的权重进行加权得到。
5. 考核成绩分析
考核改革主要涉及我校A、B两个学院,共计8个班次、373名学生。为了更好地检验考核改革的效果,同时考虑不同学院教学管理和学业课程差异,将8个班次按学院分开,并与未实施考核改革的班次进行比较。具体分析如下:
5.1. A学院成绩分析
A学院参加课程终结性考试的学生共计348人,其中参加考核改革的人数为185人,未参加考核改革的班级人数为163人。A学院参加考核改革、未参加考核改革和全体学生的考核成绩的总体情况如表1所示。
Table 1. Comparison of performance of examination reform of College A
表1. A学院考核改革成绩对比
由表1可以发现,参与考核改革学生的优秀率和良好率分别为8.6%和36.%,均高于未参与考核改革学生的优秀率和良好率。参与考核改革学生的不及格率仅为4.3%,远低于未参与考核改革学生的不及格率(20.2%)。同时,参与考核改革学生的平均分为77.4,高于未参与考核改革学生的平均分9.6分。
5.2. B学院成绩分析
B学院参加课程终结性考试的学生共371人,其中参加考核改革的人数为185人,未参加考核改革的班级人数为186人。B学院参加考核改革、未参加考核改革和全体学生的考核成绩的总体情况如表2所示。
Table 2. Comparison of performance of examination reform of College B
表2. B学院考核改革成绩对比
由表2可以发现,参与考核改革学生的优秀率和良好率分别为14.1%和34.1%,均高于未参与考核改革学生的优秀率和良好率。参与考核改革学生的不及格率仅为2.7%,低于未参与考核改革学生的不及格率(5.9%)。同时,参与考核改革学生的平均分为79.3,高于未参与考核改革学生的平均分3.5分。
综合A学院和B学院来说,对比参与考核改革学生与未参与考核改革学生的成绩,从平均分和不及格率可以发现,考核改革通过强调学生的全过程学习和能力训练,有效提升了学生的学习效果。
6. 结语
考核是学生学习的指挥棒,仅以纸质考核的方式会诱导学生背、记知识,而突出形成性考核的考核改革,则将学生的成绩获得从最终一考转为平时的点滴积累,强化学员对学习过程和编程能力的关注 [2] [4] 。从效果上来说:
1) 培养了学生良好的学习习惯
通过课前测试和课后测试,督促学生养成了课前预习和课后及时复习的习惯,学生在一定程度上改变了以往课前无问题和课后问题多的不足,部分学生可以带着一定的问题进课堂与老师积极交流。
课后作业和课内实验都是依托平台设置了完成时间限制,学生会及时完成作业,一定程度上改变了学生以往作业提交的拖拉习惯,以及教员难以全员批改的问题。
2) 一定程度上提升了学生的学习积极性
从教学过程来看,学生很关注形成性测试以及作业的成绩,对于错误的题目会及时请教老师。对于课前测试和课后测试成绩较低时,部分学生会请求重做一遍,从某种程度上帮助学生巩固了知识。在综合实验实施过程中,学生在设计阶段就会在课后投入大量的时间反复调试代码,学生的学习自主性、独立性有一定的进步。B学院的学生绝大部分在实验课前就可以完成预习,并独立做完其中的大部分实验。
3) 挑战了学生学习能力的最近发展区
在综合性实验考核过程中,从问题分析、过程描述,到代码编写、调试,再到实验体会、实验报告撰写等,对学生学习能力都有较大的考验,有效拓展学生学习能力的最近发展区 [7] 。在线上考试过程中,部分学生通过线上平台现场编写和提交代码感觉压力大,通过克服重重问题完成考核使学生感受到了莫大的成就感。学生的代码编写能力、应对压力能力都具有较大的提升。
致谢
本文的研究工作还得到了陆军工程大学《程序设计》精品课程的资助和支持,在此表示感谢。
NOTES
*通讯作者。