工程教育专业认证驱动下的《C++程序设计》课程改革与实践
2020-03-05李政伟葛欣席景科聂茹
李政伟,葛欣,席景科,聂茹
(中国矿业大学计算机科学与技术学院,徐州221116)
0 引言
工程教育专业认证是实现工程教育和工程师资格国际互认的重要基础。《C++程序设计》是计算机相关专业的重要基础课。依照工程教育专业认证的“以学生为中心,以产出为导向”的人才培养理念,本课程不仅是对C++语言的学习,也是对学生软件开发的启蒙和初步训练,对于培养学生灵活运用所学知识,夯实软件开发基础非常关键。学生对本课程的学习质量,将直接影响后续专业课程的学习,在很大程度上影响着计算机类专业人才的培养质量。在工程教育专业认证背景下,笔者结合近年的教学实践,在吸取兄弟院校卓有成效的教学改革基础上,从优化和完善教学内容,拓展第二课堂,强化实践动手能力,分阶段分层次对学生的学习效果进行过程化考核等多个方面进行探讨与解析,提出适应于工程教育专业认证要求的《C++程序设计》课程的教学改革措施,以期提升课程教学质量。
1 《C++程序设计》教学中存在的问题
作为“第一门”高校计算机相关专业的基础必修课,新生对该课程的期望值很高,然而实际上,不仅学生普遍反映“难学”,教师也反映“难教”。笔者多年来一直承担《C++程序设计》的教学工作,通过梳理面向复杂工程问题的工程教育要求,发现现有的《C++程序设计》教学主要存在以下问题:
(1)繁杂的语法规则使初学者望而生畏
和常规的程序设计语言相比,C++语言的语法规则繁杂,甚至某些规则还与硬件有关。对于刚刚步入校门的大一新生而言,理解并掌握这些规则存在较大困难。学生普遍反映概念繁多,规则复杂,难以实际运用。相当一部分学生被纷繁复杂的语法所吓倒,对程序设计产生畏难情绪,进而影响到后续课程的学习。
(2)实践教学方法滞后
目前的实践教学停留在对课堂知识点、教材例题的肤浅验证上,实验设计枯燥无味。程序设计教学方法与培养目标严重脱节,不仅削弱了学生的学习积极性,而且程序设计思维得不到有效锻炼,不利于创新型人才的工程实践能力的培养。
(3)对专业能力的培养重视不够
教师在教学过程中太过循规蹈矩,过于注重语法、语义的繁文缛节。学生花了很大精力学习语法,却仍然无法顺利编程解决实际问题;忽视程序设计思维的引导和锻炼,导致分析问题、解决问题的能力不高,很大程度上影响了学生专业能力的培养。
(4)考核方式重理论轻实践
目前,该课程的考核方式分为平时成绩和期末成绩两部分。这类形式单调的考核方式,忽视了动手操作与日常应用能力的考核,导致“高能低分、低能高分”的不合理考核现状,无法客观公平地评价学生的实际学习情况。
2 基于工程教育专业认证的课程改革
课题组结合多年的教学实践和课程特点,以课程示例库为依托,以工程教育专业认证标准、规范为基础,以“学生为中心”,不断优化和完善教学内容,拓展第二课堂,强化实践动手能力,分阶段分层次对学生的学习效果进行过程化考核,构建出符合工程教育专业认证要求的《C++程序设计》教学体系和教学新模式。面向工程教育专业认证的课程改革实施方案流程图如图1 所示。
图1 面向工程教育专业认证的课程改革实施方案流程图
2.1 完善和优化教学内容,构建课程教学示例库
基于工程教育专业认证以“学生为中心”理念,始终将学生放在课程教学工作的首位,始终关注学生的学习效果,针对性地调整授课内容、节奏、方式等。打破固定的章节结构,重新梳理和优化整合《C++程序设计》教学内容。广泛收集、整理教学示例和项目,构建符合工程教育专业认证要求的教学示例库,针对性引导学生在编程实践中进行强化训练。《C++程序设计》课程的部分知识模块及示例展示如图2 所示。
图2《C++程序设计》课程部分知识模块及示例
示例的目标不是针对单个或几个知识点的简单展示,而是应该体现实际应用场景、具有启示和示范意义。C++课程面向对象部分涉及类和对象的基本概念、构造函数,析构函数,静态成员、友元函数、继承、多态性、文件操作、运算符重载等知识点。根据项目的难易程度,可选取“校园人员管理系统”、“飞机订票管理系统”、“坦克大战”、“贪食蛇”等学生较为熟悉的场景示例供课堂讲解和课下分析使用。
此外,可以根据需要把一个实际项目分解为若干个子项目,将知识点融入到各个子项目中,实现教学内容的循序渐进。以“校园人员管理系统”为例,其常见模块包括人员管理、学生管理、教师管理、教学管理等。在设计学生类和教师类时可以涵盖面向对象的基本概念、类和对象定义、继承与派生等知识点。校园人员管理系统设计与C++课程知识点对应关系如表1 所示。
表1 项目示例划分
2.2 增量式基于项目驱动的分层实验教学设计
实验教学是工程应用型人才培养的重要内容。依照“循序渐进”的核心思想,构建为两层“阶梯式”C++实验教学体系(如图3 所示)。实验内容从模仿型实验、基本型实验、提高型实验、逐步递进过渡到综合型实验。
图3 增量式项目C++实验教学体系(部分)
实验项目不再仅仅局限于验证型实验,而是设计为涵盖基础和应用的增量式实验教学体系。其中,基础层注重基本知识,用以帮助学生掌握C++基本语法和理解面向过程的程序设计方法。基础层实验又被细分为模仿型程序、基本型和提高型实验。学生通过基础层实验项目巩固所学知识点,有助于按照教学节奏安排学生循序渐进开展编程实践。
应用层着重系统设计及软件开发能力训练,强调课程知识点的前后联系和融会贯通。该层以综合型实验项目为主,结合实际工程应用设计并实现出相应实用型信息系统。相对于基本型实验而言,其综合性、复杂性和应用性更高,有助于引导学生加强对各个知识点的融会贯通,提高其应用系统开发的综合能力。图4是以图书信息管理系统为例的增量式项目实践说明。该系统根据课程内容的不断深入,逐级递进设计出六个版本,将新知识点渐进融入到每一个版本中。前一个版本是后一个版本的基础,而后一个版本是前一个版本的继承和拓展。通过上述六个版本的增量式训练,学生在循序渐进学习新知识的同时,也实现了对旧知识的不断巩固和强化。在实际操作中,教师可以设计基于不同应用背景不同类型的综合型实验项目,鼓励并锻炼学生的分工协作能力。
图4 增量式图书信息管理系统
2.3 拓展第二课堂,强化实践动手能力
一方面组织教师参与指导学生第二课堂活动,另一方面鼓励学生参与教师的科研项目,撰写并发表科研论文;推动、引导学生参加学科竞赛(例如蓝桥杯软件设计大赛、ACM/ICPC 国际大学生程序设计竞赛等),不断强化学生的分析与解决问题的能力、进一步激发学生的创新意识和编程能力;采用“以赛促学,以学促教”的人才培养方式;为学生动手实践能力的发挥提供固定平台和场所,并安排专任教师进行现场辅导。
2.4 以编程能力培养为目标的分阶段考核
为了体现考核过程的客观公正性,采用分阶段机考取代一考定终身的传统评价方式(采用周考和期末考试相结合的方式,并已经推广至一周多考)。按照两层实践教学体系设置考题,侧重编程能力考核。当学生完成某一阶段的实践内容之后,就能通过机考及时评价对该阶段知识点的掌握情况,实现分阶段完成知识点的学习和考核任务。这样不仅提高了成绩评定的透明度,同时也有助于学生了解自身学习情况,及时调整学习方向,提高自主学习效果。对于平时成绩的考核,将改进以往局限于日常作业和出勤的简单考核模式,而是分阶段记录并评价学生的日常表现,并将其作为成绩评定的主要依据。另外,课题组开发了基于个性化画像的考试评价软件,针对每个学生的不同答题情况,自动生成其对相应知识点的掌握情况,以便于教师开展因材施教和个性化辅导。
3 结语
总之,以工程教育专业认证标准、规范为基础,以示例库为依托,不断优化和完善《C++程序设计》教学内容,按照两层实践教学体系架构,分阶段分层次对学生的学习效果进行过程化考核,杜绝“高能低分、低能高分”现象发生。积极拓展第二课堂,强化学生的实践动手能力,实现以编程能力培养为目标的分阶段考核,构建符合工程教育专业认证要求的《C++程序设计》的全新教学体系和教学模式。从实际的教学达成度来看,学生的学习积极性较以往明显增高,在平时的上机实践中,绝大部分学生能做到独立分析和解决问题,而最后的考核结果统计也达到了预期目标。