李素萍
(山西工程技术学院信息系,山西 阳泉 045000)
数据结构是一门非常重要的课程,但是其内容较为抽象,学生在学习数据结构时往往会感到困难,这对教师的教学提出了较高的要求。而采用工程的方法,可以帮助学生更好的理解相关的理论知识,同时还可以提高学生个人能力、人际团队能力和工程系统能力[1]。
CDIO工程教育模式是近年来国际工程教育改革的最新成果。自2000年起,麻省理工学院和瑞典皇家工学院等四所大学组成的跨国研究组织,经过四年的探索研究,创立了 CDIO 工程教育理念,并成立了以 CDIO命名的国际合作组织。CDIO 代表构思(Conceive)、设计(Design)、实现(Implement)和运作(Operate),它以产品研发到运行的生命周期为载体,让学生以主动的、实践的、课程之间有机联系的方式学习工程的理论、技术与经验[2-3]。CDIO培养大纲将毕业生的能力分为工程基础知识、个人能力、人际团队能力和工程系统能力四个层面,使学生在这四个层面达到预定目标[4-5]。
数据结构课程教学现状:教学中以教师讲授为主,学生被动学习,主动参与性弱;理论与实际脱节,理论教学注重算法介绍和描述,学生难于变成程序代码,实践教学侧重于算法的简单验证(设计能力弱,应用能力差),与实际应用脱节;考核方式以试卷成绩为主等等。鉴于此以简单选择排序为例基于CDIO设计如下教学模式。
构思是一个呈现着系统性的、有中心及层次的、物化的整体性思维活动。任何问题的解决都离不开构思,这是解决问题的第一步,也是非常重要(万事开头难)的一步。
这里要解决的问题是对若干个数排序。我们可以这样构思:在之前学过的计算机语言中有两个数排序的例子(从小到大),基本思路为:比较两个数a和b,若第一个数a大于第二个数b,则a,b交换(a中存放小的数,b中存放大的数)后输出,否则直接输出;由此可以推及三个数排序的思路:若第一个数a大于第二个数b,则a和b交换,以确保a是两个数中的小的数,然后再由a和c比较交换,确保a是三个数中最小的数,最后b和c比较交换确保b是两个数中小的数,这样三个数就排序完成,以此类推四个数、五个数排序均可用上述思路,其核心思想就是比较交换。在实际中,排序的应用非常广泛,因此数据结构课程讲到很多种排序算法,简单选择排序是其中的一种排序法,由上述排序思路的启发,当有n(假定n=100)个数需要排序,显然要做两个突破:数据定义(如何定义100个变量)和排序方法(对100个数排序)的突破,数据定义可以用计算机语言中的数组(大量同类型数据)知识解决,排序方法可以用计算机语言中的循环结构(大量重复动作)知识解决,于是,该问题实现思想为:如果有n个元素需要排序,那么首先从n个元素中找到最小的那个元素与第0位置上的元素交换,然后再从剩下的n-1个元素中找到最小的元素与第1位置上的元素交换,之后再从剩下的n-2个元素中找到最小的元素与第2位置上的元素交换,……直到所有元素都排序好(共n-1次即可)为止。也即,对于具有n个元素的无序表遍历n-1次,第i次从无序表中第i(i>=0)个元素开始,找出所有元素中最小的元素,然后与第i的位置元素交换,这样,n个数据排序完成。
鉴于本题目的限制(选择排序为例),这里构思更侧重于实现(计算机),事实上还应从性能(时间、空间、安全性等)、可靠性可用性等用户需求方面多方位考虑构思。
有了构思是否就可以直接写出代码供计算机运行,有计算机语言基础的读者明白对于简单(顺序结构、二分支结构)的规模小的问题可以,而对于复杂(多分支结构、循环结构及其嵌套)的大规模的问题的话需要经过设计阶段用模型准确、清晰地描述解决问题的思路。模型是为了更好地理解事物对事物作出的一种抽象,是对事物的无歧义的书面描述,由一组图形符号和规则构成。设计阶段的主要任务就是要用模型精确地描述构思,以便于实现阶段直接将该描述翻译成程序由计算机执行。
由于该例(排序)功能的单一性,故只涉及到详细设计(大规模问题还需要先经历概要设计阶段)内容。
详细设计阶段可以用图形(程序流程图、盒图等)、表格等工具精确描述构思,鉴于该例的需要只涉及到图形工具,并且为了呈现结构化技术(自顶向下,逐步求精),采用了盒图描述上述构思.
实现即编码,编码就是将设计阶段的结果翻译成计算机语言书写的程序,是设计阶段的具体化,没有实现阶段,计算机无法帮人类解决问题,再好的构思与设计也只是纸上谈兵,也即程序设计语言是人和计算机通信的基本工具,是数据结构课程的基础,更是实现阶段的保证,数据结构理论课偏于构思,实践课偏于实现,在CDIO理念指导下将数据结构理论和实践有机结合起来才得以完整地完成该课程任务,也正是工程综合性(实践中的综合)的体现。
学过C语言的读者根据上述设计结果自然就能翻译成如下代码:
上机运行后排序完成。但从工程角度看,这样的代码还不够好,因为从工程产出的质量和效率要求,程序不仅要由计算机运行,测试和维护时容易阅读和理解(可读性)势必成为衡量程序好坏的重要标准,也即程序的读者有两个,既要由计算机运行还要由人阅读,软件测试是保证软件质量的重要环节,那么,测试中发现错误必须诊断并改正错误,这个过程称之为调试,从工程角度讲,写出程序并不代表软件开发工作已经完成,测试调试工作大约还需同样多工作量完成,也就是说,实现阶段包含两个内容:编写代码和测试(鉴于题目的限制,在此对测试内容不论述),代码可读性是调试工作以及软件交由用户使用过程中出现问题需要维护时强有力的保证,故此提出了编码风格作为评价程序性能的指标,它对程序可靠性可读性可测试性和可维护性产生深远的影响。其具体规则为:程序内部应有好的文档(恰当标识符,适当注解,良好的视觉组织),数据说明易于理解便于查阅,语句构造尽可能简单直观,输入输出风格遵守人机界面设计原则,数据输入安全方便,信息输出清晰易懂,效率能满足用户需求即可,不要牺牲程序清晰性和可读性追求不必要的高效率。
经过上述阶段,开发工作就完成了,作为数据结构课程学习者会认为程序调试成功了,也就至此结束了,这里提出作业作品产品概念以论证运行维护阶段必要性。做作业是学生学习生活的常态,如果能把做作业引向个性化表达,并逐步用兴趣度、审美观、合理化、用户需求等来引领,那么学生很容易创作出有思想、有创意、有成就感的作品产品,学习过程也会因此而变得更加有趣和更有意义。
总之,将工程理念方法技术应用到数据结构课程教学中,通过引导学生走向展赛活动(用课题要求替代作业的练习要求),使得习作成为具有创意的综合性作品,辅以校企合作(面向市场、引领教学、产教接轨的人才培养平台)将数据结构内容和其他基础知识、专业知识应用到实际工程项目中助推作品成产品,学生既轻松掌握了知识,还具备了解决实际问题的能力,使学生愉悦轻松接受社会迎接社会,充分发挥主观能动性,为社会做出贡献。