张安勤,叶文珺,田秀霞,彭源
摘 要:数据结构是软件设计的重要理论和实践基础,数据结构设计和算法设计是软件系统设计的基础和核心。本文分析了目前数据结构教学中存在的主要问题,提出了教学前开发数据结构类库,课堂教学中采用项目驱动的方法,实验环节中使用结对编程的教学改革方案。在学校相关专业实施后的效果表明,我们的教学改革方案提高了学生学习数据结构的兴趣、积极性,提升了学生算法设计和算法实现的能力,增强了学生的合作能力和责任心。
关键词:类库;项目驱动;结对编程
中图分类号:TP311 文献标识码:A
The Teaching Reform Scheme and Application Effect of Data Structure
ZHANG Anqin,YE Wenjun,TIAN Xiuxia,PENG Yuan
(School of Computer Science and Technology,Shanghai University of Electric Power,Shanghai 200090,China)
Abstract:Data structure is an important theoretical and practical basis for software design.Data structure design and the algorithm design are the basis and core of software system design.This paper analyzes the main problems existing in the teaching of data structure at present,and puts forward the teaching reform scheme of the development of the data structure class library before teaching,the project driven method used in classroom teaching,and the pair programming used in practice teaching.The implementation effect in the relevant majors in the authors school shows that the teaching reform scheme proposed in this paper promotes the students' interest and enthusiasm in learning data structure,improves the ability of algorithm design and algorithm implementation,and enhances the students' ability of cooperation and responsibility.
Keywords:class library;project driven;pair programming
1 引言(Introduction)
數据结构是软件设计的重要理论和实践基础。数据结构课程讨论的知识内容是软件设计的理论基础,介绍的技术方法是软件设计中使用的基本方法[1]。
数据结构课程主要是培养学生程序设计的逻辑思维和数据抽象能力。在课程教学中需要让学生深刻理解相同的数据对象,使用的数据结构不同,效率差别很大。高效的程序设计不仅要进行充分的算法设计,还要选择合适的数据结构[2]。
数据结构课程内容多,概念抽象,理论深奥,部分算法难度大,是计算机专业最难学的课程之一。
2 数据结构教学中存在的问题(Problems existing in
the teaching of Data Structure)
(1)学生的编程基础差,容易陷入编程的具体实现细节
目前数据结构教学中主要采用的是基于面向对象的程序设计语言的数据结构教学,例如C++和Java。代码复用是面向对象编程的优点之一,但是在数据结构课程教学中没有充分体现或很少体现这一优点。学生在编程时很少考虑或涉及代码的复用[3]。这样不仅编程的效率低下,很容易陷入编程的具体实现细节,不容易充分理解算法的思想,而且由于程序细节中存在问题,程序不能成功运行也会挫败学生的学习积极性。
(2)学生编程能力参差不齐
数据结构课程一般安排在第二学年。在前一学年中,学生只学过一门编程语言,编程训练时间短,缺乏编程经验。每个同学的编程水平差别较大,有的同学编程能力很强,有的不会编程,甚至写不出一个完整的main函数。
(3)教学内容抽象,难度较大,教学方法单一
数据结构课程难度较大,内容比较抽象,学生理解困难。在过去的教学过程中,主要以教师的课堂讲授、学生听记为主。课程教学内容和现实应用脱节,这种“填鸭式”教学方法,不能有效调动学生的学习主动性和积极性。
3 《数据结构》教学改革方案(The teaching reform
scheme of data structure)
我们的教学改革方案主要有三个方面:课外老师提前开发基本数据结构的类库,课堂教学采用项目驱动的方法,实验教学环节中使用敏捷开发方法中的结对编程方法。图1是教学改革方案的框架图。
(1)开发基本数据结构的类库
在数据结构教材和教学中,数据的结构和算法采用伪代码表示。伪代码的可操作性差,学生需要进行调整和修改才能运行。编程基础差的同学,很难在短时间内调试和修改成功,因此容易给学生带来消极心理[4]。为了提高学生的学习积极性,防止学生因为挫败感带来的消极影响,团队老师开发了基本数据结构的类库。endprint
对于基于C++的数据结构课程,团队老师开发常用的基本数据结构的类库,例如顺序表类、单链表类、顺序栈类、链栈类、循环队列类、链队列、二叉树的二叉链表类,图的邻接矩阵类和邻接表类[5]。对于基于Java的数据结构课程,在课程中相应章节中,介绍Java语言所提供的类库[1]。在此基础上,设计和实现一个面向C++和面向Java的数据结构实验教学系统,让基于C++的数据结构课程学生和基于Java的数据结构课程的学生学会理解、选择和使用合适的数据结构进行软件开发。该数据结构实验教学系统的用户分为普通用户和高级用户。对普通用户,可以运行课内实验,观察实验运行的结果,系统提供实验的所有类及主函数的代码。对于高级用户,需要编写主函数来调用系统提供的类库。这样可以为不同编程水平的用户提供一个实验平台,提高代码的复用性和实验的效率。
(2)项目驱动的教学方法
项目驱动的教学方法,主要就是在讲授理论知识之前,教师首先给出一个具体项目,然后引导学生思考应用以前所学的知识能不能解决问题,以前的方法存在什么问题。最后运用数据结构中的逻辑结构、物理结构和相关算法来解决问题。让学生在具体项目中体会数据结构课程中选择合适的数据结构和算法设计的重要性,以及如何把所学的课程内容应用到实际项目中。
例如,对于图数据结构的教学,笔者在具体教学过程中首先给出了一个项目:基于图结构的社会网络分析系统。要求同学思考如何从Email数据中提取出社会网络中的个体信息和个体间的关系信息,以及如何把这些信息存储到计算机中去,如何设计算法求出社会网络中的核心人物、活跃人物和小团体等功能。
和实际生活相联系的项目[6]充分调动了学生思考的积极性,并对如何应用图的方法解决所提出的问题充满了期待。学习完图的相关内容后,绝大部分的同学已经能够在团队合作的情况下,完成这个项目。图2是学生完成的项目运行结果截图。
项目驱动方法使得学习、思考和动手相结合,老师引导学生边学边做,实现“学中做”“做中学”,使学生不会觉得所学知识枯燥无味,还能更好地理解一些复杂的问题,让学生真正掌握知识和相应技能[7]。
(3)结对编程实验教学方法
结对编程技术是指两位同学坐在同一台电脑前开发软件。结对编程是敏捷开发方法中一种提高程序质量和效率的常用方法之一。由于简单易行,效果明显,受到业界的推崇。
结对编程在具体操作过程中有如下好处[8]:
①可以提高学生的合作和交流能力,与别人合作会增加责任感和纪律性。
②两个学生同时有相同的盲点的可能性比较小,结对编程可以给出更好的解决方案。
③另外在结对编程过程中,一位同学编写代码,另一位同学边看边思考,给出设计思想,而且容易观察出代码是否有问题,结构是否有问题。代码编写后,相当于已经完成了一遍代码评审,这样大大提高了代码的质量。
④两个同学一起编程时,水平较差的同学会潜移默化地受水平略好的同学影响,学到一些新的东西。而水平好的同学同样因为不断地把自己的想法说出来而整理了自己的思路。
4 《数据结构》教学成效(Reform effects of the
teaching of data structure)
在计算机科学技术学院的软件工程专业、计算机卓越工程师班、计算机创新创业班和信息安全专业四个班级通过实施一年开发基本数据结构类库,在课堂教学中采用项目驱动的教学方法,以及在实验中采用结对编程的方法后,取得了显著效果。学生的学习积极性和主动性得到了提高,不同层次的同学都找到了自己合适的学习渠道。学生可以自主学习,又可和结对的同学互相合作讨论,每个同学既是老师也是学生,提高了学生合作能力和责任心。学生的课堂学习和实验效果有了很大提高。
表1是计算机专业2014—2015、2015—2016、2016—2017三个年度数据结构卷面成绩分析对比表。从表1可以看出课程的合格率和优秀率也有了明显提高。
5 结论(Conclusion)
我们通过采用课外老师提前开发基本数据结构类库,课堂教学采用项目驱动的方法,实验教学环节中使用敏捷开发方法中的结对编程方法,提高了学生的学习数据结构的兴趣、积极性和编程能力,增强了学生的合作能力和责任心。但我们的解决方案还需要不断改进,例如项目驱动方法中的项目必须是新颖的,能够引起学生兴趣,能调动学生积极性,因此项目的选择必须不断更新。另外结对的同学不能固定不变,需要定期进行调整,以便同学之间更充分的交流和合作。
参考文献(References)
[1] 叶核亚.数据结构(Java版)(第4版)[M].北京:电子工业出版社,2015(7):1.
[2] 陈宏.数据结构的选择与算法效率[EB/OL].http://blog.csdn.net/u011345136/article/details/23966739,2014-04-17.
[3] 楊晓波,陈邦泽.“数据结构”教学平台建设方案及应用效果[J].实验室研究与探索,2014(10):162-165.
[4] 卓明敏,黄正亮,廖小于.数据结构活代码教学实践[J].福建电脑,2010(4):207-208.
[5] 李春葆.数据结构教程(C++语言描述)[M].北京:清华大学出版社,2014:44-52;90-96;113-118;199-249.
[6]霍玲玲,王智,孙江.数据结构教学方法的研究[J].计算机教育,2015(2):73-76.
[7] 汪赫瑜.基于项目的教学方法在数据结构教学中的应用[J].教育教学论坛,2016(19):147-148.
[8] 张伟华,李立,王海英.结对编程在数据结构教学中的应用[J].福建电脑,2012(3):195-196.
作者简介:
张安勤(1974-),女,博士,副教授.研究领域:数据挖掘.
叶文珺(1966-),女,硕士,副教授.研究领域:图像处理.
田秀霞(1976-),女,博士,教授.研究领域:信息安全.
彭 源(1981-),女,博士,副教授.研究领域:图像处理.endprint