金 豪 肖梦琼 刘晓华
(1.武汉工程大学计算机科学与工程学院 武汉湖北 430205;2.中国地质大学教务处 武汉湖北 430074)
浅论基于CDIO理念的程序设计课程教学改革
金 豪1肖梦琼2刘晓华1
(1.武汉工程大学计算机科学与工程学院 武汉湖北 430205;2.中国地质大学教务处 武汉湖北 430074)
本文主要探讨今年来国际上通行的CDIO教育理念在高校程序设计基础课程中的引入和实践,通过分析传统教学方法的利弊和针对学生工程能力的培养目标,探讨了以项目和任务驱动为核心的一系列教改措施,使学生能通过一系列专业实践更好地掌握和应用程序设计的一般方法学。
CDIO 程序设计 工程能力 项目驱动 评价体系
IT业一直是国家优先发展的重点行业,也是国内人才需求量最大的行业之一,而软件开发在其中占据了相当大的比例。客观来说,高等教育在计算机专业传统的教育理论型、研究型人才培养上有较大的优势,但在应用型人才的培养上存在层次单一,理论与实践脱节的情况,使得不少毕业生理论有余,而在专业应用和编程综合能力方面存在着明显不足。[1]
CDIO工程教育模式是由麻省理工学院和瑞典皇家工学院等大学通过多年研究、探索与教学实践建立起的一种基于工程教育的先进教学模式[2,3],其核心理念是以“做中学”和“基于项目的学习”为基础的教学模式。笔者在多年教学实践和分析本校程序设计基础课教学现状的基础上,结合CDIO教学理念和工程教育标准,以培养学生的编程综合能力为目标,探讨了一种针对程序设计基础课的教学改革方案。
程序设计综合能力的评判并没有统一的评判标准。一般认为以下几种能力是必须的:①自顶向下分析问题的能力;②编码实现问题求解的能力;③良好的代码编写习惯;④调试错误的能力;⑤阅读、理解和优化别人代码的能力。
这些能力的培养需要经过大量的编程和项目开发实践,是一个需要长期投入时间和精力的过程。目前一般高校的培养计划中对于低年级本科生编程能力的培养主要是通过开设一两门C语言相关课程。这些课程的开设对于引导学生进入程序设计这种领域和培养基本的编程技能是必要的,但传统的“课堂+实验”教学中也存在不少问题:[2]
1.C语言本身的特点是比较灵活,相关知识点比较多。部分学生只是机械地学习语法,对很多知识点的掌握采取死记硬背的方法,缺乏对程序设计基本思想方法的理解和掌握。
2.一些教师的理论教学采用填鸭式教学方法,依次讲解教材中的知识点,实验课上让学生按照实验教材进行实践。导致的一个典型问题是学生听课时往往觉得枯燥。
3.学生忽视对于一些重要的基础性算法的理解和掌握,而这些算法是编写更复杂程序的一个基础,也是学习《数据结构》、《算法分析》等后续课程的基础。
4.做习题的方式对于加深局部知识点的理解和掌握是必要的,但对于程序设计整体思维和综合能力的培养是不够的。不少同学仅仅满足于掌握作业中的习题,忽视自己在编程实践方面的训练,导致的一个严重问题是笔试往往能通过甚至得高分,但实际编程能力很弱,尤其是对于应用型问题的处理,反映出对于程序设计一般方法学尚未掌握。这样培养出的学生往往会考试不会编程。
综合上述情况,可以知道传统的课堂教学对于学生程序设计综合能力的培养是有所欠缺的。这其中最主要的原因是学生在“分析问题→构思→设计→编码实现”这整个环节上的训练不够。
针对现有教学方式对学生编程综合能力的培养效果不明显的情况,我们结合CDIO工程教育模式 “做中学”和“基于项目的学习”两个核心理念,施行了一系列教改措施。其目的是进一步增强学生编程综合能力的培养,而不仅仅满足于语法和知识点的讲授。具体课程的培养能力指标结合CDIO工程模式和理念对已有的教学大纲进行了修改,围绕学生工程能力的培养,给出了各项能力培养指标。
1.项目驱动的教学方式
在课程的设计中强调以项目为导向的方式。在课堂教学方面,主要围绕程序设计方法学讲授最基本的知识点,淡化一些应用场合不多又较为细枝末节的知识点;在实验教学方面,以一个个具体的小型项目为依托来强化从问题分析到编码实现这个过程中的程序思维培养,并在其中融入相关的重要知识点。在整个教学过程中,学生通过项目开发将各项琐碎的知识点串联起来来深化理解和应用。
2.多维度评价体系
在课程成绩评定上,采用多维度考核的方式:
(1)传统的笔试成绩仅占据40%。这部分主要考核学生对于基本语法和各项重要的局部知识点的掌握情况。
(2)实验方面采用项目考核的方式,占40%。在课程结束之际,由教师给出一系列难度适中的小型项目由学生选题进行设计开发,最终以小组答辩的形式来进行考核。教师会综合以下几方面来进行评判给分:①设计构思的可行性;②代码风格和友好性;③运行结果的正确性;④代码健壮性;⑤算法的效率。
(3)平时成绩占20%,主要由两部分组成:①平时的作业情况;②学生对案例项目的分析讲解,教师以分组形式组织学生讨论并发言。
3.教学效果的延续性
以往的教学计划编排,课程与课程之间独立性较强,导致很多同学学完程序设计课程后就再不接触编程相关的内容。这带来的问题是课堂教学效果再好,课程后续的加强、巩固和深入仍然远远不够,使得四年期间的整体培养效果大打折扣。
因此,将相关性较强的多门讲授和实践类课程组成相互关联的课程群,从整体上考虑课程的后继学习,以保证教学效果有较好的延续性。例如,本专业学生在《程序设计基础》课程之后设置有“基础软件综合设计”和“网络应用软件综合设计”两个课程设计。这两个课程设计围绕C语言程序设计的教学,在项目内容的深度和广度上加以一定的扩展,要求学生自己查阅相关文献资料和教师讲解所需专业知识的基础上,自己从零开始进行整个项目的规划、构思、设计和实现,从而对所学内容进行巩固加强,并进一步激发课余编程的兴趣。
[1]顾佩华,沈民奋,陆小华,译. 重新认识工程教育—国际CDIO 培养模式与方法[M].北京:高等教育出版社,2009.
[2]顾佩华,沈民奋,李升平等.从CDIO到EIP-CDIO汕头大学工程教育与人才培养模式探索[J]. 高等工程教育研究,2008( 1) : 12-20.