1. 程序设计课程的教学和学习现状
C语言是计算机类、信息科学类、电气类等相关专业的基础课程,对数据结构、单片机、微机原理等后续相关课程的学习起着非常重要的作用。然而,在C语言乃至所有程序设计类课程的教学过程中,许多学生由于缺乏必要的程序设计思维能力,对程序设计类课程缺乏兴趣,甚至有些同学在课程结束后,也写不出一个像模像样的程序。程序设计课程的教学似乎陷入了一个误区。本文首先以C语言的教学为例,分析现阶段程序设计类课程教学过程中存在的相关问题。
(1)学生对课程的认识不够。现在高校为了压缩教学时间,通常将C语言安排在大一上学期开设,课时通常在48课时至64课时。从开设时间上看,有些仓促。学生处于大学刚入学的阶段,对大学阶段的学习、生活都有一个磨合的过程。同时,摆脱了高中那种紧张而又枯燥的学习阶段,对大学中的一切感觉新鲜和好奇。许多学生对大学的学习还停留在“60分万岁”的那种认知上,或者从高年级学生得到的许多错误的认识,这些错误的认识导致了许多同学对程序设计课程的认识和重视程度不够,许多学生仍然坚持高中的学习方法,或者幻想着采取考前突击的方法通过考核。如果授课教师在授课过程中再不注意教学方法,将会导致学生的发展离大学的培养目标愈来愈远。
(2)许多教师不注重教学方法和教学手段。现在大学的许多课程采取多媒体教学,C语言的教学也不例外。利用多媒体手段进行教学,本意是为学生提供图、文、声并茂的多媒体资源,促进课程的教学。然而,现在许多教师以课时不足或者科研压力大为借口,备课投入的精力不足,或者根本不重视课程的教学工作。在授课过程中过度地依赖制作的课件,甚至个别老师的课件都是从其他教师那里拷贝过来直接使用,上课经常出现卡壳的现象,根本不在意学生的感受。许多教师在授课过程中,照本宣科,过于强调程序设计语言的语法,忽略了对学生程序设计能力的培养。
(3)对实践教学的重视程度不够。C语言是一门实践性很强的课程,需要学生通过大量的编程练习掌握程序设计的基本思路。然而,许多教师在实践教学过程中放取“放羊”的教学方法,布置几个题目,让学生自由练习,导致学生对实践能力的锻炼非常盲目,对编程完全失去了兴趣,达不到课程制定的实践教学目标。
2. 对理论教学模式的改革与探索
针对程序设计类课程中出现的相关问题,作者所在的软件工程系在学院领导的大力支持下,有效利用现有的教学资源,对程序设计课程的理论教学模式进行了改革,并将其付诸实践,在软件工程系的程序设计类课程的教学中,取得了较好的效果。
(1)采取教学团队制。软件工程系集中优秀教师,成立了程序设计核心课程教学团队,负责所在学院程序设计类课程的建设。团队负责人组织教师集体备课、听课,共同设计教学案例、组织教学。考虑到程序设计的课程具有较强的实践性,不同的教师在教学过程中会设计不同的教学案例,采取不同的教学方法,因而团队定期组织相关教师进行集体备课,设计更好的案例、设计更好的教学方法。在集体备课中,大家各抒己见,对如何讲授相关的知识点进行深入的探讨,共同设计合理的教学案例。同时,组织相关教师集体听课,学习有丰富教学经验老教师的教学方法,帮助年轻教师尽快提高,从而提升整个教学团队的教学质量。
(2)除Java、C#等面向对象的程序设计课程外,取消C语言等其他程序设计课程的多媒体授课,将教学重心从语法知识的讲授转移到程序设计能力的培养。这样处理有两种考虑:考虑到现有的以多媒体为主的教学方法容易让教师陷入讲授语法知识的误区,忽视对学生程序设计能力的培养,采取板书授课,可以让教师按照认知的规律从事教学,培养学生的逻辑思维能力和程序设计能力。同时,可以督促教师把更多的精力投入到教学中,精心设计和组织教学案例,改进和提高教学方法,努力提高自身的教学水平。
(3)采取项目引领式教学,精心组织教学案例,提高学生的学习兴趣。许多同学感觉C语言很枯燥,不知道学习C语言后有什么用,可以解决什么样的问题。甚至有的同学在学习完C语言后,也不知道这门课程到底有什么用处。有的学生甚至认为,程序设计的有些题目利用基本的数学知识就可以解决,根本不需要编程实现。针对这种情况,课程教学团队采取了项目引领的教学模式,通过从实际的项目中、或者相关的程序设计大赛中抽出一些典型的问题,或者直接面向具体的应用问题,要求学生编程解决。例如,在程序的三种基本结构中,设计了如下的基本问题,要求学生通过编程实现。
小明的爷爷很怀旧,冬天来了他还是要自己做煤球。并且爷爷把煤球堆放得十分整齐有规律:最上边一层只有1个煤球。第二层4个煤球摆成正方形,再下面9个煤球也是摆成正方形。总之,第 n 层就是边长为 n 的正方形。这样的结构既通风又稳固。小明数了数,一共有30层,请你帮助计算一下,一共有多少个煤球?
通过在教学中引入这样的实际问题,可以进一步提高学生的兴趣,也必将提高学生分析问题和解决问题的能力。
(4)模块化教学、阶段性考核。按照C语言的知识体系,将C语言的教学分成了六个基本模块,并在相应的模块结束后进行阶段性的考核,检验教学成果。本文对C语言的知识体系划分以及不同阶段考核的要求如表1所示。通常在模块化教学前,首先布置阶段性考核的综合性题目,要求学生独立完成。在阶段性考核的过程中,首先通过两三个小程序对本模块的知识点进行巩固,并对综合性题目采取小组答辩的方式进行,重点考察学生程序设计的思维能力和解决实际问题的能力。
表1. C语言的六个知识模块以及阶段性教学目标 模块主要内容 考核要求 C语言基本知识 掌握C语言的基本知识,可以编写简单的程序,掌握程序的调试方法。 三种基本结构 掌握顺序、选择和循环等三种程序设计的基本结构,可以运用这三种结构分析并解决简单的问题。 数组与字符串 掌握基本的数组应用,可以利用数组和字符串编写简单的程序。 函数与模块化设计 理解并掌握模块化程序设计的基本思想,掌握函数间的参数传递方法。 指 针 理解指针,可以应用指针编写程序。理解指针与数组、指针与函数、指针与字符串之间的处理方式。 结构体与文件 理解并掌握结构体、文件的定义,学会用结构体和文件编写小型的管理信息系统。
3. 对实践教学模式的改革和探索
为了切实提高学生的编程能力,作者所有的程序设计教学团队要求抛弃以前的实践教学模式,在实践教学中切实发挥教师的主导作用,采取“学—练—赛”的模式,通过兴趣小组、组织学生参加竞赛等方式,真正训练学生的程序设计思维,切实提高学生的编程能力。具体做法总结如下。