APP下载

基于CDIO数据结构课程教学思考与改革*

2016-03-19陈静张达敏刘国敏贵州大学大数据与信息学院贵州贵阳550025

高教学刊 2016年1期
关键词:做中学实践能力

陈静 张达敏 刘国敏(贵州大学大数据与信息学院,贵州贵阳550025)



基于CDIO数据结构课程教学思考与改革*

陈静张达敏刘国敏
(贵州大学大数据与信息学院,贵州贵阳550025)

摘要:《数据结构》课程是计算机专业及其相关专业的核心课程,是一门注重知识思想学习和实践性很强的课程。传统的教学注重理论知识的讲解,对动手实践能力的培养较弱,导致学生对知识的运用能力较弱。该文章将CDIO的教育模式引入到数据结构的教学中,并采取一系列的教学改革措施,以达到知识片段系统化,以“小设计”、“大设计”和“作品”三个层次的程序设计实践能力,以循序渐近地方式培养不同层次的学生。

关键词:CDIO数据结构;实践能力;做中学

*1.贵州省省级本科教学工程项目:“通信工程”专业综合改革试点(黔教高发[2014]378号)

2.贵州省研究生教育教学改革重点课题:研究生教育质量保证和监督体系示范点建设(黔教研合JG字[2014]004)

Abstract:"Data structure" course is the core course of computer science and other related majors, and it focuses on learning of knowledge and thought and practical ability. The traditional teaching pays great attention to the theoretical knowledge while the cultivation of the practical ability is weak, which leads to students' poor ability of using knowledge. In the article, the CDIO education model is introduced into the teaching of data structure, and a series of measures of teaching reform are taken in order to make knowledge fragment integrate systematically. The article recommends cultivating students of different levels in a step-by-step manner by three levels of program practice ability: "small design", "major design," and "works".

Keywords:CDIO data structure; practical ability; study in practice

《数据结构》课程是计算机专业及其相关专业的核心课程,是一门注重知识思想学习和实践性很强的课程。该门课程要求学生先掌握一门程序设计语言,在此基础上学习数据结构的相关知识。由于数据结构知识的特殊性,要求学生掌握的是知识的思想,以便可以用任意一种程序设计语言来描述它。该课程的目标是在程序设计中能运用数据结构的相关知识,编写出执行效率较高的程序代码,提高解决实际问题的能力。

一、CDIO工程教育模式简介

CDIO是一种新型的工程教育模式,它由麻省理工学院和瑞典皇家工学院等四所大学经过四年的探索研究,创立了CDIO工程教育理念,并成立了以CDIO命名的国际合作组织。CDIO工程教育模式中C代表构思(Conceive)、D代表设计(Design)、I代表实现(Implement)、O代表运作(Operate)[1]。该模式让学生将课程理论知识与动手实践相结合参与产品研发到产品运行的每一个环节,学生以主动的、实践的、课程之间有机联系的方式学习工程。CDIO工程教育理念注重培养学生的基础知识学习能力、动手能力、团队协作能力。

CDIO教育模式为学生提供一种强调工程基础的、建立在真实世界的产品和系统的构思-设计-实现-运行(CDIO)过程的背景环境基础上的工程教育。它的大纲首次将工程师必须具备的工程基础知识、个人能力、人际团队能力和整个CDIO全过程能力以逐级细化的方式表达出来,使工程教育改革具有更加明确的方向性、系统性。CDIO体现了系统性、科学性和先进性的统一,代表了当代工程教育的发展趋势。

CDIO教育模式抛开了以往教育中注重理论知识轻视实践的观念,以工程项目为载体,强调“做中学”,在项目的实施过程中,使学生的知识和动手能力得到不断的积累和锻炼。截至目前,已有几十所世界著名大学加入了CDIO组织,其机械系和航空航天系全面采用CDIO工程教育理念和教学大纲,取得了良好效果,按CDIO模式培养的学生深受社会与企业欢迎。

二、《数据结构》课程的特点及教学现状

《数据结构》是计算机专业的核心课程。数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。数据结构这一门课的内容不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。

《数据结构》课程在以往的教学中通常是对基础知识进行教学,选择学生熟悉的程序设计语言对各种数据结构及基本操作进行描述。在此教学过程中,学生在学完《数据结构》课程后,并没有清楚的了解《数据结构》这门课程在程序设计中的作用,及如何使用数据结构知识使算法效率更高及解决生活中的常见问题。导致了学生在学习中逐渐丧失了学习兴趣,将知识的学习与知识学习的目的分离开来,最后只是学习了知识,而不知道该知识在什么时候用,可以怎么用。同时,由于数据结构知识的特殊性,它的学习注重知识思想性的学习,学习了思想就可以用任何一种程序设计语言对数据结构思想进行描述,导致了学生在学习的过程中,使用的是哪种程序设计语言进行教学,就只会用该程序设计语言描述数据结构,换一种程序设计语言描述就感觉非常困难,学生的动手实践能力和解决问题的能力较弱,知识的掌握度不够高,运用不够熟练。

针对数据结构课程中出现的问题,目前也进行了大量的课程改革,主要体现在针对课堂教学中使用多媒体教学方式改善传统教学方式所带来的抽象,不易理解的问题,通过多媒体课件的制作,使得学生能够了解当代码执行时数据变化情况,数据变化细节展现在学生的面前,对知识的理解起到了很好的作用。另一方面,同时也加强了对实践的要求,在实验中不仅要求能把问题解决,还要求能进一步求出问题的最优解,提高了学生的学习主动性。

三、基于CDIO的《数据结构》课程教学改革措施

根据CDIO的教育理念,以培养学生的动手能力、团队协作能力、工程能力为目的。需在学生学习数据结构课程之前学习某种程序设计语言。在基础知识的教学过程当中,将生活中常见的待解决的问题引入到教学过程中,运用数据结构知识进行解决,使学生在理解基础知识的基础上,更能感性认识数据结构这门课程的作用,从而提高学生的学习兴趣。

“做中学”是CDIO的核心思想之一,该思想的目的是激发学生的学习兴趣。为了更好的提高学生的学习兴趣,可以将教学与学习的重心从课堂转移到实验室机房。让学生在实践操作中掌握知识,体会知识是如何解决问题的。

数据结构改革的主要措施如下:

(一)课堂教学改革

在传统教学方式下,更多的采用启发式的教学。

由于学生的学习水平参差不齐,因此在教学过程中仍然主要采取传统的教学方式,要求学生在教学前预习讲授的知识,课堂教学过程中教师对于基础知识进行详细的讲解,确保学生能准确的掌握这部分知识。在对基础知识进行算法描述和灵活运用时,教师采用启发式的教学。教师对这部分知识设计问题,使学生在问题的思考与回答中将该部分知识掌握,提高学生的逻辑思考能力,同时也提高了学生的自主学习能力。

例如在讲解堆栈知识时,可以对学生在讲授了堆栈的基本知识概念后,让学生对比堆栈和线性表这两种数据结构的异同之处,使学生能更好的理解堆栈的基本知识概念,加深知识印象。同时可以针对这部分的知识设计问题,如老鼠迷宫的问题。该问题要求学生深入掌握堆栈知识,同时能理解深度优先搜索算法。该问题用二维数组表示迷宫,一只老鼠从迷宫的左上角进入迷宫,编写算法,寻找一条从迷宫右下角出去的路径。由于学生只是学习了堆栈的基本知识,要解决这样的问题对大多数学生来说比较困难,因此老师在课堂上可以对该问题给出部分解决思路,用一个m×n的二维数组来表示地图,有墙的格子用1表示,没有墙的格子用0表示。为了让老鼠走路,我们可以假设老鼠只能依次按照东、南、西、北四个方向行走。老鼠很聪明,总是先判断东方是否有路,如果有,则向东走;如果东方没有路,才接着判断南方……南方有路,则走南方,以此类推。由于老鼠已走过的格子不能重复走,因此对于已走过的格子,我们可以放一个“脚印”在上面,即把相应的格子设置为2就行了。这样的格子表明已走过,不能再走[15]。当老师的解决思路告诉学生时,剩下的问题要求学生自己思考该如何运用堆栈知识解决。

我们可以设置栈S来保存老鼠走过的所有格子,最近走过的格子总是放在栈顶,当与“栈顶”格子p相邻的格子(东、南、西、北)在地图网格(二维数组)中的值不为0时,则表示再往下走已无路可走。此时,我们可以从S中出栈一个位置,并设该位置(格子)对应的值为3,表明该格子已无路可走。接下来以新的栈顶元素为当前位置(回溯),依次从东、南、西、北四个方向寻找可以走的位置,找到某位置后,把该位置入栈,表明走入该位置。继续寻找下一个位置,直到某位置为end位置或者找不到合适的路径,即栈为空时算法结束。主要解决方法如下[15]:

Position Cur,offset [4]={{0,1},{1,0},{0,-1},{-1,0}}; /*某格的相

邻单元格的坐标偏移*/

int **M;

int i;

M=(int **)map;

Push(S,(ElemType*)&begin); /*起始结点入栈*/

M[begin.x][begin.y]=2; /*置一个脚印*/

while(!StackEmpty(S)){

StackTop(S,(ElemType*)&Cur); /*取栈顶元素(坐标)*/

if(Cur.x==end.x&&Cur.y==end.y)/*找到,直接退出即可*/

break;

for(i=0;i<4;i++)/*检查相邻可走坐标*/{

if(M[Cur.x+offset[i].x][Cur.y+offset[i].y]==0)/*这一格可以走的*/{

Cur.x=offset[i].x+Cur.x; Cur.y=offset[i].y+Cur.y; M[Cur.x][Cur.y]=2; /*留一个脚印,有兴趣的还可以加上方向*/

Push(S,(ElemType*)&Cur);

break; /*退出循环*/

}

} /*for*/

if(i==4)/*四个方向都走遍无路可走,回溯*/{

M[Cur.x][Cur.y]=3; /*曾经走过的脚印,但走不通后往回走的脚印*/

Pop(S,(ElemType*)&Cur); /*栈顶位置退出路径*/

}

} /*while*/

在这一部分的训练中可以让学生问题的解决思路用伪代码或自然语言的形式写下来,并不强求学生一定要用程序设计语言描述该问题,并把代码调试成功。让学生在解决问题的过程中掌握知识,并能运用知识解决问题。使学生明白数据结构的知识并不是抽象无用的,而是能实实在在的解决我们生活中的某些问题的。

(二)程序设计改革

在掌握了基础知识的基础上,鼓励学生采用任意一种程序设计语言来描述算法。

由于数据结构知识可以用任意一种程序设计语言来进行描述。因此,在教学过程和实验过程中,鼓励学生使用多种程序设计语言来描述算法。该项改革的目的在于使学生能以自己所熟悉的学习方式来掌握该课程的知识。并能更加熟练的掌握一门程序设计语言。

目前在大多数教学中,采用的数据结构教材的描述语言方式都是C语言。导致了学生在学习完数据结构课程后只能运用C语言来描述数据结构,当要求用其他程序设计语言来描述各种数据结构时,就显得束手无策了。因此在学生编写程序时,可以要求学生在看懂,调试通过教材或老师要求的代码时,鼓励学生用其他的程序设计语言如JAVA把同样的问题再描述一遍,以此来加深知识的掌握,增加学生的成就感,提高学生的学习兴趣。

(三)数据结构实验改革

在对每一个数据结构知识点设计实验时,实验的难度由浅到深,每一个实验都是在前一个实验完成的基础上增加新的问题和难度,对于同一个问题使用不同的数据结构来实现,最终完成该知识点实验后,学生可以得到一个对该知识点的系统掌握和理解。

例如,在队列数据结构中,让学生先完成循环队列的基本操作实验,如循环队列的入队、出队、队满和队空等基本操作的实现,这一类的实验对于学生来说都可以算做验证性的实验,较为简单,只要掌握了基础知识就可以完成,可以算做常说的由浅入深中的“浅”了。当学生完成了这样的实验后,可以要求学生在此基础上做较深的综合设计性的实验了。当然这样的实验要求学生用到前一个实验的内容,如电路布线问题,在布线区域叠一个网格,该网格把布线区域划分成n×m个方格,就像迷宫一样,当从一个方格A的中心点连接到另一个方格B的中心点时,转弯处必须采用直角。如果已经有某条线路经过一个方格,则封锁该方格。使用A和B之间的最短路径来作为布线路径,以便减少信号的延迟。为了找到网格中位置A和B之间的最短路径,先从位置A开始搜索,把A可到达的相邻方格都标记为1(表示到达A的距离为1),然后把标号为1的方格可到达的相邻方格都标记为2(表示到达A的距离为2),继续进行下去,直到到达B或者找不到可到达的相邻方格为止[15]。

在解决该问题的过程中就需要用到循环队列的基本操作。这样的问题可以算做是由浅入深中的“深”了。要解决这样的问题必须深入理解队列知识和广度优先搜索算法原理。这种难度问题的解决对于现在的大多数学生要独立解决还是很困难的,因此可以建议学生以分组的方式来协作完成。学生可以3-4人组建为团队完成任务。按照CDIO模式,团队成员确定任务和设计方案,完成成员分工,制定问题解决计划,然后解决该问题,最后提交任务解决报告。通过这样的综合设计性任务的锻炼,使学生从任务的分析,任务的解决,计算机模拟,团队合作,动手能力各方面都得到一次全面的训练。

实验环节是知识掌握中最重要的环节。所有知识的掌握最终都要在实验中进行实践和验证。因此数据结构实验的设计就尤为重要。在实验内容设计上由浅入深,先进行基础知识的实验,使得学生能更好的理解课堂理论知识,并能完整的写出可运行的算法。在基础实验内容完成后,所设计的实验项目为生活中较为常见的问题或小游戏问题的解决,适当给出问题解决的提示以及代码片段,鼓励学生独立思考,完成整个算法。根据算法的实现,设计不同的实验数据时得到的结果有何变化以及原因所在,培养学生深入思考能力。

以上三项改革措施实际上也是一个相辅相成,循序渐进的过程。学生在学习的初始阶段主要集中在知识的理解和掌握,在此基础上能用不同的程序设计语言描述算法,达到知识的熟练掌握,再后便是对知识的灵活运用,主要体现在实验阶段,通过教师对实验项目的设计,使学生能系统掌握知识,并能解决生活中较为常见的小问题。它解决学生在学习该课程后,所学的知识片段系统化,最终以“小设计”、“大设计”和“作品”三个层次的程序设计实践能力,以循序渐近地方式培养不同层次的学生。以“项目和任务驱动”为主线,结合“案例教学”、“研究式教学”手段,把理论教学和实践教学进行无缝连接,以期获得比传统实践方法更好的效果[15]。

四、结束语

本文针对数据结构教学过程中出现的问题进行了讨论和改革,并提出了三个方面的改革措施,并运用在教学中,取得了良好的效果。在以后的教学过程中,利用CDIO教育创新模式,在《数据结构》这门课程中培养学生具有扎实的专业技术知识,通过项目驱动学习,在做中学,使得知识的理解更加牢固,同时知识与现实生活也充分结合。在未来的教学中,我们希望在《数据结构》课程中利用CDIO的工程教学理念,以任务为目的,基础知识学习为基础,验证性实验为核心,以“滚雪球”方式,将每一个实验都逐渐“滚”成一个任务,以此达到真正学会知识,会用知识的目的。

参考文献

[1]陈芳,王旭.基于CDIO的C语言教学改革[J].科技视界,2015 (2):96.

[2]王向辉,崔巍,徐俊丽.基于CDIO的数据库课程教学改革方案研究[J].计算机教育,2011(2):38-41

[3]王艳玲,李秀媛.基于CDIO模式的单片机课程教学方法探讨[J].计算机光盘软件与应用,2014(15).

[4]郝宗波.数据结构课程教学改革探讨[J].计算机教育,2011 (3):78-80.

[5]宋桂娟,杨勇虎,王文生.基于CDIO的数据结构课程教学改革与研究[J].电脑知识与技术,2010,6(3):755-756.

[6]杨蒙召,顾泽元,刘文强.CDIO理念在数据结构课程中的探索与实践[J].计算机教育,2010(12):124-126.

[7]齐会娟,李德雄,刘丽娜.基于CDIO理念的“数据结构”课程改革与研究[J].石家庄铁路职业技术学院学报,2011,10(2).

[8]曾晓辉,文展,付琳.CDIO模式下的数据结构教学体系探索[J].计算机教育,2015(2).

[9]曹海燕.基于CDIO模式的数据结构与算法教学改革研究[J].江苏第二师范学院学报,2014(4):21-23.

[10]胡瑞娟.CDIO理念在数据结构课程教学中的实践[J].电脑知识与技术,2014(1).

[11]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出

版社,2012.

[12]刘晓静,黄维通,王晓英.西部地区CDIO理念下的数据结构与算法课程建设[J].计算机教育,2013(17).

[13]任雪萍,王立波,赵葆华.融入PIC-CDIO理念的“数据结构”课程教学改革[J].计算机教育,2012(12):29-32.

[14]于波,郭红,李鹏.CDIO工程教育模式在数据结构与算法教学中的应用[J].黑龙江教育,2014(12).

[15]王力,陈静.新编数据结构实验指导——基于CDIO实训[M].贵州:贵州大学出版社,2013.

作者简介:陈静(1981,4-),女,回族,贵州省贵阳市白云区,研究生,讲师,教师,研究方向:计算机软件应用。

中图分类号:G642

文献标志码:A

文章编号:2096-000X(2016)01-0109-04

猜你喜欢

做中学实践能力
技校“项目教学法”的讨论
“做中学”教育思想的核心理念分析
关于幼师立体几何教学与幼儿园教育衔接的教学案例
遵循“做中学”理念,提高学生的地理实践力
基于科研思维和实践能力培养的生物技术制药教学改革研究
高校单片机课程设计教学方法探讨
刍议大学生实践创新训练计划项目
品德教学利用微课开展预学的实践研究
“创新人才培养模式”下的实验教学改革探索
“做中学”和“做中教”中的“学”“思”研究