软件工程优秀工程师培养中专业基础课构建探讨

软件工程优秀工程师培养中专业基础课构建探讨

来源:www.51fabiao.org作者:jinhju发布时间:2015-06-21 18:43
本文为工程师论文,笔者以C语言程序设计课程为例,分析了在卓越工程师培养目标下,软件工程专业基础课中应用传统教学方法存在的问题,结合实例阐述了相关的改革措施,并提出了未来的发展方向
为了培养具有创新和实践能力的高质量工程技术人才,教育部于2010年启动了卓越工程师培养计划。软件工程是实施卓越工程师计划的典型专业,主要培养多层次应用型软件技术、软件工程与管理的高级人才,培养学生在掌握计算机基础理论与技术知识的基础上,进一步熟悉软件开发过程(软件工程),掌握软件开发的基本方法、技术与工具,熟悉软件开发环境,成为具有团队合作意识,具有国际交流(语言)能力,拥有熟练技能的软件开发人员,在计算机系统与分析、软件工程设计等方面成为核心技术人才。
分析可见,卓越工程师的“卓越”二字,从技术角度包含两层含义:首先是要有扎实的理论基础和创新能力,其次是要具有软件开发的总体把握能力和良好的全局观,能够进行架构设计或者具备此潜力。“C语言程序设计”(以下简称“C”)是软件工程专业的一门专业基础课,本文将以其为例,对上述问题进行探讨。

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课程都会讲授如何编程打印一个由星号组成的菱形,如图1(a)所示。某些教材上给出的解法是将菱形分为上半部和下半部分,用两个循环来打印,这种方法对学生思维训练无太大帮助。笔者在授课时,采用了如下思路:将菱形放入一个二维坐标系(原点在左上角),画出菱形所在区域边界,如图1(b)所示,由此写出区域的解析表达式|x-3|+|y+3|≤3,从而得到程序循环中的核心判断语句此例充分将数学建模的思想融入程序设计,引导学生将基础课程的知识融入专业课程中。

2.4有机引入计算机理论课程知识
如前所述,软件工程专业一般不开设有限状态机等理论课程,但是作为卓越工程师,掌握这些知识是必要的。为此我们在课程中有意识地引入了这方面的知识,给学生提供初步认知,为有意自学者提供基础。例如,一直以来学生在学习“计算一个句子中单词个数”这一经典程序时,总是不明所以。为此我们另辟蹊径,采用如下方法讲授。
首先抽取问题核心:把句子看成是由字母序列和空格序列(单词间可能有多个空格)交替组成的一个字符串。程序处理的方式,是对句子中的所有字符进行逐一扫描,然后在这个过程中判定单词的出现,如出现则把计数变量加1。其次将问题抽象化:用有限状态机来描述上述过程,如图2所示。
其中“1”代表当前扫描字符“位于字母串中”这一状态,“0”代表当前扫描字符“位于空格串中”这一状态。当“扫描到字母”事件或者“扫描到空格”事件发生时,扫描器的状态会被改变,如图箭头所示。我们关心的是当处于状态0时,“扫描到字母”事件发生的情况。此时意味着之前扫描到的是空格,现在是字母,即到了一个单词起始处,故此时计数变量加1。然后引导学生将问题转化为表格描述,如表1(a)所示(第一行表示事件,第一列表示状态,中间单元格表示某事件发生后,应进行的状态转换及其他操作),进一步地可以精炼为(b)。
由此可得到如图3所示流程图。在此基础上学生很容易写出程序。这种教学法十分透彻,为学生今后自学相关知识打开了一扇大门。

2.5作业批改及考试规范化
为了避免传统教学中学生作业及考试批改过程低效,分析困难,且难以发现问题的缺陷的情况,我们开发了一套C语言作业及考试批改系统,该系统通过代码分析及用例执行等方式,客观地对学生程序进行判定,一方面提高了教学效率,另一方面更重要的是促使学生养成良好的编程习惯,改变了以往在纸面上写代码的随意性,从而培养起作为一个软件工程卓越工程师必备的素质。

3结语

专业基础课建设是培养合格的软件工程专业卓越工程师的基石之一。目前我们的课程改革和建设已经取得了初步成果。培养合格的软件工程卓越工程师是一个系统工程,而专业基础课建设是其中的基石之一。就“C”课程而言,未来我们将在加强编程基础培育,设计更灵活和细粒度的自动程序评分系统,以及多课程联合教学等方面做出进一步尝试和努力。

参考文献(略)