摘要:针对计算机、软件工程等专业C++程序设计课程的教学现状,在对课程体系结构和教学中存在问题分析的基础上,从突出实践动手能力出发,制定以实际任务为考核要求的教学规划,分别从调整教学内容、丰富教学手段、深化实验训练和教学队伍建设等方面,结合目前教学的实践情况,进行了教学改革的探索。
关键词:程序设计课程 教学改革 C++ 面向对象
一、课程特点分析
C++程序设计课程是内蒙古大学计算机科学与技术专业、软件工程专业和信息管理与信息系统专业本科生的专业基础课程之一,该门课程的开设目标主要是锻炼学生的编程能力,强调对于程序设计语言的理解和应用,要求学生在掌握语言规则与基本原理的基础上,熟悉使用计算机指令的模式去分析和求解问题、进而能够开发相应的程序。在整个专业的课程体系中,C++程序设计往往是其他诸多专业课程如算法和数据结构、软件工程、设计模式等的先行课和基础课。
内蒙古大学C++程序设计课程的教学历史可以追溯到上世纪90年代。从1991年起,该课程为计算机专业学生开设,当时开设的目标主要是使学生在掌握基本程序设计语言的基础上,能够熟悉大规模应用开发的思路和方法,因此在学生熟悉了Pascal和C等语言后,介绍C++的语法特别是面向对象编程的技术。随着计算机技术和程序设计语言的快速发展,传统的Basic、Pascal等语言退出了软件开发工作的前沿,C++目前成为大中型软件开发的首选语言。我校从2000年后,将C++程序设计作为专业基础课,在一年级第二学期开设,4学分、64课时。
课程主要教学内容包括C++基本数据与表达式、程序控制结构、函数、数组、结构、类与对象、运算符重载、继承、虚函数与多态性、文件与输入输出流等。在教学中,课程包含课堂讲授和实验教学两部分,课堂教学16周,每周4课时;实验教学13周,每周3小时。在课堂讲授中选择了“大学计算机”规划教材系列中的C++程序设计基础课本,并参考结合国外优秀教材进行讲解,采用PPT课件讲授配合黑板板书分析、程序现场调试示范等方式组织课堂教学,可以将知识点较形象、直观的展现,有助于促进学生对相关内容的理解和掌握。同时,课程教研组编写了与课堂教学进度配套的实验指导手册,针对每一部分教学内容,设计各自不同的实验任务,制定明确的目标要求和考核细则;在学生单独完成实验的过程中,教师通过观察和分析学生任务的解决情况,及时了解其任务进展,给予必要的指导。
从总体看,课程教学内容基本上符合本科生授课的特点和要求,教学效果较好。但是,C++程序设计技巧性强、实践性强,需要学生逐步建立起面向对象的编程思想。作为初学计算机的本科一年级学生,掌握这门课的难度较大。特别是在传统教材和教学方法中,通常强调知识讲解,忽略对学生思路的引导和对实验教学的重视,导致不能激发学生对编程技巧学习的兴趣和对实践动手能力训练的重视,教学效果很难保证。
近年来,尽管教研组通过不断摸索,在课程教学上取得了一些进步,但仍旧存在一些问题,具体表现在:
1.教学方法与教学手段相对单一。教学中主要是把学生集中起来, 以课堂讲授为主, 对启发式、讨论式的教学方法采用比较少。教学手段上仍采用传统的方式,虽采用多媒体教学、电子教案, 但完善的教学与实验平台尚没有建设。
2.学习内容理论化较强。教学内容与市场需求脱节,理论性较强,内容抽象,比较枯燥,不利于激发学生的学习兴趣。不容易调动课堂气氛,造成学生的适应能力不足,不利于培养社会需求的软件人才。
3.实践环节比较薄弱。除了课内安排的实验外,基本无其他实践机会, 学生难以接触到对实际操作能力考核的问题。限于课时要求,配套的实验与习题不多, 而且内容比较陈旧, 形式单一。
4.考核方式单一。目前学生学习的主要目的是通过期末考试或者计算机等级考试,“死记书本”的现象仍旧存在。
因此,有必要对课程进行教学建设与改革,让学生更积极、更有效地学好这门课。下面将从调整和优化教学内容、丰富和改进教学手段、突出实验环节设计等方面,分别探讨C++程序设计课程教学改革的方法。
二、调整与优化教学内容
(一)根据本课程的特点,进行知识点划分,构建知识点之间的关联
C++程序设计课程具有很强的技巧性,每一章的每一个问题都蕴含了相应的编程技巧和方法,用以解决相应的程序设计问题。认真划分各个知识点,找到每一个知识点的特征、要素、功能以及编程技巧,建立知识点之间的关联,构成本课程的知识体系。
(二)优化各个知识点中的内容和实例
针对每个知识点,删除课本上大幅出现的文字说明和大篇幅的程序,重新设计出短小的、具有针对性的例子。包括:用于启发学生了解当前知识点基本功能的例子;用于体现本知识点特征、要素、功能以及编程技巧的例子;用于针对当前知识点进行提问的、具有综合性和代表性的例子;具有总结性的、体现知识点之间关联的描述及实例。基于这些实例,让学生积极地、快速地获取当前知识点的特点和编程技巧,并把当前知识点融合到本课程的知识体系中。
(三)基于上述内容和思路,加强课件建设
加强课件建设,使课件尽可能清晰、严谨、完备地体现出教学思想,例如:通过动画清晰地描述程序行为和功能、通过动画逐步展现内容从而启发教学等等。
三、丰富与改进教学手段
采用启发式教学思想,即先引导、再举例、最后提问并总结的方式授课,提升教学质量。
(一)首先通过引导告知当前知识点的功能并激发学生求知欲望
C++程序设计本身比较有趣,但是学起来并不容易,原因是知识点比较分散,在学生建立程序设计的思维方式之前,十分不好理解。所以,对知识点进行讲解之前,须告知学生,本知识点有何功能,在知识体系中的位置和作用。从而激发学生对本知识点的学习欲望。
(二)通过实例详细介绍当前知识点的特点和相关技巧
在C++程序设计中,通过给出典型实例,基于实例的运行结果辨别其编程技巧和功能特点,是很好的教学手段。这样做可以让学生简单、直观地了解当前知识点的典型特征,对比出不同编写方法的运行结果,从而深刻地掌握编程技巧和方法。
(三)通过提问锻炼学生的解题能力并抓住学生的专注力
针对当前知识点,可选择一部分实例进行提问,并根据实例程序的运行结果进行讲解。通常,当前知识点还没有完全讲透,所以有的问题需要学生努力思考、联想,甚至是猜测,才能给出答案。这样做,一方面锻炼了学生的解题能力,另一方面也可以抓住学生的专注力,给学生留下深刻的记忆。
(四)最后通过总结让学生获得完整的知识,并把当前知识点融合到知识体系中
最终,对当前知识点进行总结和比较,给学生一个清晰全面的结论,并再次强调当前知识点在知识体系中的位置和作用。
四、突出实验环节重要性
突出实验环节的重要性,首先就要让学生认识到实践的重要性,亲身体验实践的必要性和实践的软件工程特性,然后在实践方面给予与书本学习同样的重视。
(一)强调实验的重要性,提高实践成绩在总成绩中的比重
课程的最终目标是学生能够设计程序以及编写程序,所以考核学生的实践编程和技巧是课程的最终目的。提高实践成绩在总成绩中的比重,可以使学生重视实践,在实践方面的投入更加突出。
(二)设计更加科学的题目
实践能力的培养离不开练习。课程的练习是学生在老师的指导下完成练习题目解决方案的设计和代码的编写。练习题目的设计是实践的开始环节,具有重要的意义,是学生掌握这门课的捷径。我们的练习题目是按照课堂教学的进度来设计的,并紧贴课堂内容。
首先,为每章进行小的题目设计,这些题目难度不是很高,学生只要努力就能够完成题目。题目具有实用性,让学生感受编程的快乐。但这些题目的设计不是独立的,而是相关的。这些题目都是一个大的系统的功能模块,学生在学完各章节之后,将编写的小的题目汇总,就能完成一个特定的系统。也就是说在题目设计时,是先按照软件工程的要求完成系统,然后分解系统为简单的功能模块,然后将功能模块编写成题目交给学生来完成,当学生完成所有的题目后,教师指导学生进行模块的合并,形成系统。这样学生既学习了程序设计的方法,又体验了软件工程的编程思想。设计实践题目与学生完成题目是一个可逆的过程。其次,设计一些难度较大的题目,对学生进行拔高训练,使他们更深层次理解程序设计和实现的算法和数据结构。
(三)实践时间的优化
实践时间与教学时间的配比从过去的教学时间占优调整到改革后的实践时间与课堂时间同等比重。实践时间要充分,但不宜过多。实践与课堂教学应该紧贴。如果实践时间过少,则实践与理论脱节,理论学习总是比实践的进度快,导致学生表面掌握理论,实际不具备实践能力。实践时间过多,则会产生实践进度快于理论,使得大部分同学在没有理论基础的前提下进行实践,效果不好,白白浪费时间。
(四)实践平台系统的引进与二次开发
目前国内的C++课程实训平台已经有部分产品比较成熟,可以考虑引进我校作为实验教学的基本环境。同时,结合针对性的实验任务设计、上机考试系统、竞赛挑战模式等,需要对平台功能进一步开发,以满足实际需求。
五、教、学、研互动
课程教研组的教师以中青年教师为主,虽然科研业务能力较强、软件开发经验较丰富,但在教学方法、教学技巧上仍有提升的空间。
(一)教学队伍建设与培养
在任课教师选择与安排上,学院挑选了中青年教师形成C++程序设计课程教研骨干。这些教师具有较丰富的软件开发经验和较扎实的科研经历,目前在科研工作中仍旧大量从事软件开发工作。因此,教师在授课时,可以将科研项目中研究性的内容融入到课堂和实验教学中,能够有效提升学生对程序设计的兴趣。同时,任课教师都担任了“大学生创新创业训练”、“挑战杯”、“ACM程序大赛”等活动的指导老师,进一步带动了学生的创新和开发积极性,非常有利于促进学生的学习。
(二)调研与跟踪企事业单位需求
课程建设的根本目标是培养学生的编程能力,而软件开发行业的企事业单位对人才的需求、对人才知识结构的要求是课程教学与实验改革的基础,指导着教学内容调整与优化的方向。培养上手快、能力强、素质高的程序设计人员,就需要在课程教学中瞄准市场的特点,开展应用导向型教学。考虑两种方式来实现,一是邀请优秀毕业生来宣讲;二是教师实地参观学习或短期参与企业的软件开发、设计。
(三)加强科研与教学互动过程
进一步鼓励学生参与到教师的科研任务、项目管理、应用开发等工作中来,通过参与科研提升学生的主动性、积极性和创造性;同时,组织软件开发兴趣小组,由教师辅导、能力较强的同学作为核心,将其优秀的创意、作品和成果推荐参加国家、自治区相关学生比赛,并在课堂上展示,发挥示范作用,带动更多同学加入,形成良好的竞争与协作氛围,促进教学活动的高效开展。(下转73页)
(上接69页)六、结语
对于发展较快的计算机程序设计课程,如何“教”与“学”一直是萦绕在教师脑海中的一个问题。在探索教学改革的道路上,针对计算机、软件等专业的C++程序设计课程而言,如何更好的提高教学质量也是在我校计算机教学工作中面临的主要问题之一。通过对教学活动的思考和实践经验的积累,在教学内容、教学方法、实验设计及教学队伍建设等方面做了尝试与改进,得到了学生的认可,取得了较好的教学效果。课程的改革方式值得推广,在以后的教学过程中将继续加以实践和应用。
论文相关的项目信息:内蒙古大学“卓越教学团队”建设项目(2013-05):数据结构与程序设计系列课程教学团队。
参考文献:
[1] 李骏扬,陈汉武. 工科专业C++语言教学目标与方法的探讨.计算机教育,2007(16)
[2]李玉霜,刘学超.论面向对象程序设计教学方法.教育与职业,2010(20)
[3]郭小燕.论《面向对象程序设计(C++)》课程的教学设计. 现代计算机(专业版),2011(18)
[4]朱月秀.基于ACM竞赛的C++程序设计课程教学改革.漳州师范学院学报(自然科学版),2012(01)
[5]李玉霜,刘学超.论面向对象程序设计教学方法.教育与职业,2010(20)
[6]刘群,李坚.“C++语言程序设计”实验教学的改革与实践.验室科学,2012(2)
[7]饶云波.软件院校C++课程的教学探讨.实验科学与技术,2012(6)