1、传统教学方法存在的问题
1.1教学目标不明确
“C”是很多高校普遍开设的一门课程,大部分学校教学方法大同小异:课堂讲授+上机实验,教学目标也集中于让学生掌握C的各种重难点,比如数组、函数、指针等。其实不同专业人才培养目标中本课程的作用差异较大,采用模式化的教学方法和雷同的教学目标是不合理的。此外很多教学方法忽略了编程思想锻炼,局限于讲授语言本身,变成了教“语言”而不是“程序设计”。
1.2学生动手应用能力较弱
多年来,大部分学生学习完本课程后,仍难以针对一个简单应用编制程序,此问题十分普遍。一般C语言教材,都是先介绍程序设计基础知识,然后介绍各种数据类型和输入输出等语句,由于内容枯燥,因此学生逐渐丧失了学习兴趣,甚至不愿上机,浪费了宝贵的实验机会。此外各种例题、习题也是数学性较强或者演示性质较强,比如牛顿迭代、水仙花数、10整数排序等,这些内容和实际应用关系相去甚远。
1.3未体现卓越工程师培养特色
如前所述,卓越工程师培养的不仅是一个程序员,更重要的是培养学生具有扎实的理论基础和创新能力,为进一步从事设计、架构规划打基础。由于课时所限,计算机专业的一些理论课程如自动机、组合数学等一般未纳入软件工程的'培养方案,但对于卓越工程师而言,初步学习这些内容是必要的。此时如果在相关课程中融合部分上述知识将大有益处。
1.4没有为后续课程打下良好基础
一方面由于例题和习题所限,在学习“C语言”时学生未能充分理解软件工程的一些重要思想如模块化等,导致编程时思路混乱、僵硬。另外由于课时所限,结构、文件等章节经常被略讲甚至不讲,导致学生在后续课程学习时基础薄弱。
2、教学改革措施
针对上述问题,结合软件工程卓越工程师培养目标,在近年来的教学实践中我们采取了如下教学改革措施:
2.1实验室授课
对于程序设计课程,学生在课堂听讲时,是一种静态的信息接收过程。当讲到各种知识点时,如果能够即时编程验证,将成倍地提高学生对信息的吸收消化效果。基于此,近年来我们努力实现了全程在实验室机房授课,学生可以实时动手分析,教师也可以从讲台主机远程指导、控制学生设备,效果良好。
2.2采用国外教材及引入软件工程思想
“C”的国内教材大都偏向初学者,存在细节被过度简化的问题,不利于实现培养面向实践的工程师的目标。为此我们采用国外知名教材进行授课。该教材的最大特色是面向应用,对C语言的应用特征、程序设计的特色描述详尽,例题及习题应用性很强,并且可结合软件工程的基本思想进行讲解,例如商品条码校验位计算、扑克牌发放及手牌比较、零件数据管理等。学生学习后,在后续应用性课程中能够很快上手并进行拓展。
2.3编程思维训练
我院“C”课程开设在大一上期,其目的是引导学生进入编程领域。因此在教学时,我们避免拘泥于C本身的语法细节,而是淡化其语言色彩,偏重讲述如何利用程序语言来处理问题。在此列举一例:很多C课程都会讲授如何编程打印一个由星号组成的菱形。某些教材上给出的解法是将菱形分为上半部和下半部分,用两个循环来打印,这种方法对学生思维训练无太大帮助。笔者在授课时,采用了如下思路:将菱形放入一个二维坐标系(原点在左上角),画出菱形所在区域边界,由此写出区域的解析表达式|x-3|+|y+3|≤3,从而得到程序循环中的核心判断语句.
2.4有机引入计算机理论课程知识
如前所述,软件工程专业一般不开设有限状态机等理论课程,但是作为卓越工程师,掌握这些知识是必要的。为此我们在课程中有意识地引入了这方面的知识,给学生提供初步认知,为有意自学者提供基础。例如,一直以来学生在学习“计算一个句子中单词个数”这一经典程序时,总是不明所以。为此我们另辟蹊径,采用如下方法讲授。首先抽取问题核心:把句子看成是由字母序列和空格序列(单词间可能有多个空格)交替组成的一个字符串。程序处理的方式,是对句子中的所有字符进行逐一扫描,然后在这个过程中判定单词的出现,如出现则把计数变量加1。其次将问题抽象化:用有限状态机来描述上述过程。其中“1”代表当前扫描字符“位于字母串中”这一状态,“0”代表当前扫描字符“位于空格串中”这一状态。当“扫描到字母”事件或者“扫描到空格”事件发生时,扫描器的状会被改变,如图箭头所示。我们关心的是当处于状态0时,“扫描到字母”事件发生的情况。此时意味着之前扫描到的是空格,现在是字母,即到了一个单词起始处,故此时计数变量加1。然后引导学生将问题转化为表格描述,(第一行表示事件,第一列表示状态,中间单元格表示某事件发生后,应进行的状态转换及其他操作),进一步地可以精炼为(b)。由此可得到示流程图。在此基础上学生很容易写出程序。这种教学法十分透彻,为学生今后自学相关知识打开了一扇大门。
2.5作业批改及考试规范化
为了避免传统教学中学生作业及考试批改过程低效,分析困难,且难以发现问题的缺陷的情况,我们开发了一套C语言作业及考试批改系统,该系统通过代码分析及用例执行等方式,客观地对学生程序进行判定,一方面提高了教学效率,另一方面更重要的是促使学生养成良好的编程习惯,改变了以往在纸面上写代码的随意性,从而培养起作为一个软件工程卓越工程师必备的素质。
3、结语
培养合格的软件工程卓越工程师是一个系统工程,而专业基础课建设是其中的基石之一。就“C”课程而言,目前我们的课程改革和建设已经取得了初步成果。未来我们将在加强编程基础培育,设计更灵活和细粒度的自动程序评分系统,以及多课程联合教学等方面做出进一步尝试和努力。