李长荣 吴 迪
摘要:程序设计基础是软件工程专业的一门重要的专业基础课程。为提升教学和实践质量,本文从课堂教学、实践教学等方面展开讨论,介绍了一些成功的经验,最后提出了应进一步探究的问题。
关键词:软件工程;程序设计;课堂教学;实践
中图分类号: G642文献标识码:A
1绪论
程序设计基础是软件工程专业学生必修的一门很重要的专业基础课程,如何让学生较好地掌握程序设计的思路和方法,尤其是面向对象的比较抽象的分析方法和编程技术,是程序设计课程必须解决的问题。
笔者结合多年来从事程序设计教学的经验与体会,对软件工程专业的程序设计基础课程教学方式和方法做了一定程度的研究,在安排教学进程、课堂教学和实践教学中进行了实验探索,以求推动教学改革,提高教学质量。
2合理安排教学进程
程序设计基础这门课程从知识体系来讲,包括结构化程序设计、面向对象程序设计和算法三大块。这些内容如果全部讲授完成需要一百多个课时,但考虑到课程安排、教学资源等因素该课程的课时缩减到56学时,在有限的学时内,如何在完成教学内容的同时又保证教学质量成为教师棘手的问题。
针对程序设计基础课程内容多的特性,第一学期开设了计算机导论和C语言等先修课程,第二学期开设的程序设计基础课程的重点是面向对象编程和逻辑思维的培养,第三学期的后续课程安排了数据结构与算法(C++语言描述),这样学生们能在掌握编程基础的情况下集中学习数据结构和算法的设计与实现。这样,课程体系连贯性较强,每门课程也能突出自己的重点内容,程序设计基础课程也能在有限的时间内实现最理想的教学效果。学生们经过由浅入深、逐层递进的学习,既能保持学习兴趣,又为下门课程的学习打下坚实的基础。
为了增强学生学习的兴趣,程序设计基础课程教学内容上还增加了6学时的可视化编程初步知识,引导学生更好地掌握一到二种集成开发环境的使用,激发学生课余时间学习的热情。但界面设计内容不宜过多,以免分散学生们对程序设计的注意力。
3课堂教学
针对齐齐哈尔大学软件工程专业学生们的特点,在课堂教学中,我们采用以下创新的教学模式,培养学生认知能力和创新能力。
3.1学生们自由发挥模式
传统课堂经常出现教师满堂灌,听话的学生被动记笔记,不听话的学生睡觉、聊天的现象。为了让学生们在教学中处于中心地位,主动积极的吸收知识,笔者通过精心备课,充分准备问题。首先,在第一课时,主要讲解编程原理和方法,通过启发式提问的方式,引导学生积极参与到课堂中来;第二课时,讲解案例源码,引导学生分组讨论源码的实现方法和改进方案,然后,给学生们自由提问和表达思想的时间,教师最后予以点评和总结。
这种教学模式要求教师首先记住所有学生们的姓名和听课习惯,这样才能因材施教。然后教师需要精心准备教学内容,并有能力对课堂上的突发情况予以处理,因为学生们理解问题的角度可能和教师不同,自由提问和表述,容易打乱教师的正常教学思维。最后教师要对学生们错误的观点予以改正,正确的观点予以鼓励和肯定。例如,有的学生提出的问题过于简单,是不需要解释的,教师也要注意表达方式,不要挫伤学生们的积极性和进取精神。
3.2有趣的案例驱动教学模式
针对应用型课程的特点,每一堂课都通过若干问题引导,然后通过生动有趣的案例介绍解决问题的方法,最后归纳出一般规律或概念。经实践证明这种方法行之有效,减少了学生们在学习上的困难。
例如,在类和对象这一章中,提问数据成员和成员函数如何根据实际情况确定,构造函数的用法,对象如何生成等问题。接着,针对常用的学生成绩统计表,编写计算学生单科成绩、平均成绩、最高分等的程序,来介绍解决上面问题的方法。通过分析考试科目、学生姓名、学号等确定数据成员,分析成绩统计功能确定成员函数,哪些成绩需要保存、返回和处理。根据不同班级人数确定动态指针对象数组。这些为类的实现和封装做好了准备。同样,扩展开来,学生们也可以按照学生成绩统计的分析方法实现类似的教师工资统计、公司员工绩效考核系统。
3.3多媒体、板书和运行程序结合模式
首先,抽象的概念和理论采用多媒体演示。在程序设计基础教学中,当涉及到较多抽象的概念理论,例如指针值的动态变化,只有通过多媒体演示,使学生直观形象地看到了内存中变量动态变化的过程,才能感觉指针也不难理解。
接着,涉及到编程教学时,教师需要在黑板上板书程序,按步骤讲解程序设计的思路和过程,重点强调逻辑性、条理性。程序如果多媒体演示程序的话,速度较快,学生的思路跟不上,效果不好。
最后,程序结果是否正确,必须运行程序来证实。这样,把多媒体、板书和程序运行有机结合起来,收到了很好的效果,吸引了更多的学生们认真听课,为上机实验打下了基础。所以,整个课堂教学有效的模式是:多媒体、板书和程序运行的有机结合。
3.4学科渗透模式
笔者在教学过程中发现学生们对数学、英语的重要性认识程度不够,如何让他们认识到数学、英语等对程序设计的思维方式和编程能力培养的重要性,是亟待解决的问题。
例如,学生们数学课上学习了矩阵的基本运算,都是在草纸上运算完成向量和矩阵作业。笔者通过课堂上矩阵相乘的实例,引导他们使用编程解决矩阵运算问题。同样,笔者在课堂上讲解了加密和解密,从文件中读取一篇英文课文,加密后,再写入文件。这样,计算机与学生们正在学习的数学、英语课程相结合,大大提高了学生的学习编程、英语和数学热情,培养了他们的创新能力,符合“一专多能”的培养模式,有利于他们的就业。对教师来说,也积累了宝贵的学科渗透教学经验,有利于教学科研的同步提高。
4实践教学
实践教学是培养软件工程专业学生实践能力、科研能力、综合素质的重要实践教学环节。
实验教学、课外小组和课程设计是重要的实践教学环节,和课堂教学质量相互影响。课堂上听懂的内容,迫切需要在实践中加以验证和提高,而实践教学,让学生在实践中理解和巩固课堂知识,在实践中培养实际动手能力,改掉了很多大学生眼高手低的毛病。实践性教学在本课程中主要体现为上机实验、课程设计和课下小组三个部分。
4.1上机实验
上机实验作为最基础的部分,在课堂教学中需要按照进程穿插进行,根据教学内容将实验内容分两部分:基础性实验和设计性实验。每一部分的实验都有明确的实验要求、实验目的、设计思路、操作步骤等内容。实验题目具有代表性和典型性。
基础性实验主要是巩固学生的基本知识、训练学生的编程基本技能和培养学生基本的程序设计能力。实验题目如熟悉开发平台,函数调用、动态指针、简单的类声明和使用、对象等实验。基础性实验一般安排10学时。
设计性实验是学生根据已经掌握的基本知识、基本理论、基本技能,按照实验教师给出的实验题目和要求,运用类的继承、类的封装、类的多态性等核心机制来解决特定问题的程序设计实验,并分析实验结果,撰写实验报告。实验题目如学生成绩管理系统,电子通信录等,要求综合运用类和对象、封装、继承和多态性的思想来设计和实现,安排6学时。
针对学生多,实验教师少的情况,笔者开发了B/S架构的c++实验在线帮助系统,学生们在实验室中,可以以聊天问答的形式,对调试过程中遇到的问题,得到电子教师的帮助意见。该系统关键在于知识库的建立和根据关键词检索答案算法设计。该系统将老师们从相似问题重复回答的囚笼中解脱出来,从而专注于编程思路和方法的讲解,不仅降低了教师们的劳动强度,也提升了学生们的学习效率。自试用以来,虽然该系统有时答非所问,但这种在线答疑形式受到了学生们的普遍欢迎。
4.2课下学习小组
课下学习小组就是优秀或有兴趣的学生组成小团队,参与到教师所负责的科研、教研项目中,学有所用。教师们也可以根据他们的特长和兴趣爱好,有针对性的因材施教,从而进一步提高他们的实际应用能力。例如有的学生特别热衷于网络游戏,笔者引导有游戏爱好的学生们组合在一起,研究游戏外挂,这个小组志同道合,研究热情高涨,不仅平时和教师积极交流,而且在网络上和其他游戏外挂制作者交流,从而认识到编程在游戏外挂中重要作用,增强了他们学习程序设计基础的兴趣和努力程度。
4.3课程设计
课程设计是实践教学的重要组成部分,上机实验大多是消化上课内容,学生们模仿多于创新,不利于培养学生们的启发式思维和实际解决问题的能力。所以,课程设计是在基本教学内容完成之后的综合练习,一般三个星期内完成。课题强调具有实用性、技术先进性和创新性,有一定规模和功能相对完整的软件系统,例如有的学生做的NBA球员管理系统,建立了球员类,火箭队继承了这个球员类,还利用文件读写数据,软件即具有一定的规模,。学生们通过集中时间的强化学习和训练,能更好的贯穿和总结软件开发思想和技术,锻炼了分析、修改和设计程序的动手能力。
教师需要提供课程设计的样例及上几届学生们的优秀作品,供学生们参考和下载。学生们分组阅读分析相关的小规模或大规模软件的源代码及结构并讨论,然后合作进行开发,此时教师可就具体问题对各个组的学生进行指导。课程设计完成后,学生们要参加答辩,演示程序,上交源代码和课程设计报告。
5仍存在的问题
程序设计基础课程在软件工程专业中经过几年的建设,在教学、科研、师资、实验室建设等方面取得了可喜的成绩,教学效果良好,学生的上课和实验的积极性得到提高,并且得到其他兄弟院校同行的认可。但本课程也还存在一些不足之处,主要体现在:
(1) 对学生成绩评价体系还有待完善,例如如何避免“一考定终身”,需要根据上面提到的各个方面对该生进行量化评分。
(2) 对新教师的培养还需进一步加强,新教师普遍思路活跃,与学生们交互好,但课堂的组织教学能力和创新教学能力需要进一步提高。
(3) 完善教学网站和实验辅助教学网站的建设,改变传统的课堂交互,让学生们随时、随地和教师交流。这需要教师改变教学观念,由课堂灌输式教学、课下放羊教学改为课堂引导教学、课下指导教学。
6结论
软件工程专业的程序设计基础课程教学主要讲述面向对象的基本概念、思想和实现方法。本文结合笔者的教学经验和软件开发实践经验,根据一般院校的软件工程学生们的共性,在教学的创新模式、实践教学的内容体系等方面提出了一些观点和建议,希望能让学生们有扎实的编程基础,能更好地掌握软件系统开发的相关技能,为他们在软件行业的就业奠定基础。
参考文献:
[1] 骆斌,王浩然. 软件工程专业程序设计类课程的设计[J]. 吉林大学学报,2005,(23).
[2] 张冬云. 《程序设计语言》教学与专业课结合,培养学生计算机应用能力[J]. 广西大学学报,2001,(23).
[3] 吴文虎. 程序设计基础(第二版)[M]. 北京:清华大学出版社,2007.
[4] 化志章,揭安全,甘登文. 计算机与现代化[J]. 2002(12).
[5] 张丽梅. 案例教学法的研究与教学实践[J]. 黑龙江教育,2006(3).
[6] 侯丽敏. 基于网络的智能答疑系统的研究与实现[D]. 河南大学,2005.
Research on Programming Design Course Teaching for Software Engineering Major
LI Chang-rong, WU Di
(College of computer and control engineer, Qiqihaer University, Qiqihaer 161006, China)
Abstract: Programming design is an important professional basic course of software engineering major. In order to improve the teaching and practical quality, this paper discusses the classroom teaching and practical teaching, introduces the successful experience, and future research content.
Key words: software engineering; programming design; classroom teaching; practice