蔡庆华,江健生
(安庆师范大学计算机与信息学院,安徽安庆246133)
信息技术的快速发展,不仅改变了人类生产生活方式和获取知识与能力的途径,也影响着教育事业的发展。2017年开始,教育部积极推进新工科建设,先后形成了“复旦共识”、“天大行动”和“北京指南”,并发布了《关于开展新工科研究与实践的通知》《关于推进新工科研究与实践项目的通知》,全力探索工程教育的中国新模式[1]。2018年,在成都举办的全国高等学校本科教育工作会议上,教育部进一步强调要发展新兴工科、改造传统工科,统一部署了新工科的建设方案[2]。随着新工科建设方案的实施,许多新的教学理论、方法与模式在高校本科教学过程中得到了研究与实施。
“C语言程序设计”一般是计算机专业第一学期开设的专业基础课程,作为培养学生实践能力、创新能力、程序设计能力和计算思维能力的课程,具有内容抽象、逻辑严密、实践性强等特点。虽然老师和学生对本门课程在整个培养目标中的地位很清楚,但是教学效果一直不是很理想。在长期的教学过程中,因个体差异,有些学生在经历高考获得成功后存在思想松懈、学习目标不够明确和学习方法不当等问题;而受教学大纲、课时、考核方式和学生数等因素的影响,老师在教学过程中存在照本宣科、教学吸引力不够、了解学生不足及实验指导不及时等问题。
为适应我校本科大类招生方案实施和新工科人才培养的需要,“C语言程序设计”课程不仅要培养学生思考、分析、解决实际问题的工程设计和实践能力,还要与新的技术和应用相结合,锻炼学生创新的计算思维能力,同时,还要通过本课程配套的项目设计和各类程序竞赛,培养学生的团队协作能力。
CDIO(构思、设计、实现与运作)工程教育模式[3]提出了一个涵盖12条标准的教育指导原则,集中体现“做中学”和基于项目教学的工程教育理念。从CDIO的指导思想出发,我们提出一种新的C语言程序设计课程的教学方案,以提升相关课程的教学、推动专业工程教育的目标得以实现。
“C语言程序设计”课程不仅要学习C语言的基本语法,更重要的是培养学生使用计算机解决实际问题的编程能力,是理论与实验一体化的课程。随着我校2018培养方案2.0版的实施,我们在平时的教学过程中,将理论课和实验课各自分开,均有相应的大纲和教学要求。
理论课我们积极推广“翻转课堂”教学。基于翻转课堂的“C语言程序设计”课程教学流程分课前准备(教材任务安排和学生观看视频)、课堂教学(教师重难点分析及编程能力训练)和课后教学(学生完成作业和复习以及教师检查)3个阶段。实际教学过程分为线上学习和线下两部分实施。
线上部分,根据学习目标,学生在老师的指导下安排学习进度和内容,观看教学视频和作业。研究表明,人类在知识获取过程中学习效率最高的持续时间一般在6~7分钟,若超过这个时间,学习和记忆效率会快速衰减。因此,根据这一认知规律我们对课程的知识点进行分解,每个MOOC视频录制的时长一般不超过10分钟,内容安排以介绍一个语法知识点和一个例题为主。
我们在前期课程建设的基础上,教学团队获批并积极建设省级课程类质量工程项目,安徽省MOOC项目“C语言程序设计”和精品资源共享课程项目“C语言程序设计”。结合新工科人才培养目标和学生的实际,从“MOOC资源”、“计算思维”和“新工科”建设三个角度出发,将“C语言程序设计”课程的知识点碎片化,整个课程我们一共录制有50个小视频,每个视频后均配有作业,用于巩固所学知识。MOOC视频已挂在安徽省网络课程学习中心平台和安徽省C语言程序设计精品课程网站,课程资源已基本建设到位。
线下教学过程中,相对于传统教学模式,老师简化C语言语法的教学,将重点放在算法分析和思路讲解中,着重培养学生自主学习和解决实际问题的编程能力。在具体操作过程中,我们设计了许多与实际生活联系紧密的案例,一共有40个,它们是求三角形面积、小数四舍五入运算、素数判断、求矩阵最大值、计算最大公约数、模拟扑克发牌、企业员工考勤等[4]。例如在学习“第2章数据类型”时,我们通过“求学生期末考试平均分”案例展开分析,一般而言学生的分数是一个整数,而平均分应是小数。如果选择其他类型数据,将不同程序运行得到的结果进行比较和分析,让学生理解如何去选择数据类型,从而掌握不同类型数据在计算机中如何存储和处理。在学习“第12章文件操作”时,我们以“通信录管理”案例展开分析,将传统方式即程序运行时通过键盘输入和显示器输出数据与用文件操作输入输出数据方式进行对比,说明使用文件操作进行输入输出数据的优点,从而让学生在解决实际问题时,能合理地去选取数据的输入输出方式。
实验课的教学,同样也分线上和线下过程。我们录制了许多操作调试C语言程序的视频,要求学生在每次实验课之前通过精品课程网站提前观看,提前掌握相应的操作方法。同时,将要求学生每次完成的实验内容和要求放到网站,让学生做好准备。在实验课中,要求学生通过网络在线提交实验文档,上传实验结果和源程序代码,程序上传后系统自动判断对错,并给出分数。这将教师从监控和统计学生完成作业情况中解放出来,使其专心去指导学生理解解题思路和解决编译调试程序过程中出现的问题,提高学生实验课程的学习效果。
Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交多种程序(如C、C++)源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验源程序代码的正确性。
学生每次新课前,通过观看MOOC视频,预习了解学习内容。在每个章节的内容学习完后,登录安庆师范大学在线OJ系统,完成相应编程作业,在一定时间内,系统自动统计作业完成情况,形成作业报告,便于老师了解学生学习情况。目前,我们已经按照教材章节内容和课程培养目标,以及OJ系统的特点,布置了8次作业,它们是顺序结构编程、选择结构编程、循环结构编程、函数编程、数组编程、指针与字串编程、结构体编程和文件编程。每次作业一般有8到15个编程题,题目安排一般由易到难,最后几题是提高题,大多是与学生日常生活密切相关的问题,如猴子选大王、计算器模拟实现、万年历的输出、圆周率的计算等,主要是为程序设计竞赛选拔选手。经过统计和分析,发现和前几届学生相比,19级计算机类学生的编程能力有明显提高。
为解决学生在学习过程中遇到的问题,我们建立了C语言课程学习QQ群和微信群,组织学生开展线上讨论,师生之间可以及时交流。对于有共性的问题,老师或学习较好的同学可以统一回复,以保障学习效果。
以往传统教学模式中,课程考核一般以期末考试为主,平时表现和作业完成情况为辅。期末考试的比重约占到总成绩的70%~80%。仅凭一张试卷或一次考试结果不能真实完整地反映学生的学习和知识掌握情况,对于全面评价学生学习效果缺乏足够的说服力,不利于人才培养。
为建立以能力为导向的C语言程序设计课程综合评价机制[6],实现理论与实践环节的统一评价,加大实践环节的考核力度,我们制定了综合的课程考核方案。在2019级计算机类的培养方案中引入了全新的课程评价体系,期中期末考试不再使用试卷进行笔试,而是采用自主研发的上机考试系统,题型主要是编程题、程序填空和程序改错题,重点考查学生程序阅读和编程能力。课程总评价以OJ作业、期中考试、平时考勤、实验完成情况和期末考试成绩按一定比例组合成最终成绩,所有考核过程的成绩均有原始数据,取消随机打分和送分现象。这种过程考核,促使学生在平时的学习过程中,要努力做到最好,避免了期末考试突击,激发了学生平时学习的热情,增强了学生实践和编程能力。
在C语言程序设计教学中,学生创新能力的培养是课程教学的最终目的。能力的培养不是仅靠知识传授与转移就能获得的,通常要通过从编写小程序到开发大项目的全面实践,让学生在项目实践过程中体会、总结和领悟,在深入的训练中得到全面的锻炼,才能最终得到提高。“C语言程序设计”课程学习结束后,要求学生提交一个小的信息管理系统,如职工工资管理系统、高速公路收费系统、学生成绩管理系统、校友信息管理系统、在线点餐系统、图书管理系统、学校运动会管理系统等[5]。
组织学生参加各级程序设计学科比赛,从而提高计算机专业学生的编程能力。程序设计竞赛是政府教育主管部门和科技协会针对计算机专业应用需求和学生能力培养而举办的一种综合性赛事。竞赛可以对学生的学科综合能力进行全方位检验,注重考查学生运用所学知识解决实际问题的意识和能力,同时也可以激发学生学习热情、提高学习积极性、增强团队协作精神。因此将程序设计竞赛与课程教学有机融合,能够有效推动课程教学改革,提高人才培养的质量。C语言教学团队在2019级新生教学过程中,开展了“新生宏晶杯”程序设计竞赛,有149位同学参加,大多数同学成绩均不错,取得了较好的效果,并为参加省级程序设计竞赛选拔队员做了准备。
C语言程序设计课程教学的最终目标就是在有限的时间内提高学生的学习效率、培养学生的实践编程能力。所以,本课题研究的重点是如何让学生能够学习好,又能大大缩短学习的时间,达到更好的学习效果。解决这一问题的方法在于充分利用多种教学媒体和教学手段,在每一节课的教学过程中,教师精心准备各种教学资源,设计贴近大学生思维热点的案例,只有这样做才能激发学生的兴趣,让学生在短时间内接受新知识,从而利用学会的新知识去解决问题。为了客观评价学生的学习效果,在“C语言程序设计”课程教学中,我们摒弃了重视期末考试、轻视教学过程考核的方式,采用过程型与鉴定型并重的考核方式,建立多维度评价体系,对学生进行全方位评价。
今后,我们将进一步结合我校学生的特点以及学科竞赛的经历,总结教学改革经验,完善教学内容、方法与手段,提高自己的教学水平,为提升计算机类学生的专业实践应用能力和综合创新能力,更加切合社会、企业对新工科人才的需求做出应有的贡献。