陈姝颖 陈雷 石艳荣 赵小芳
摘 要:数据结构是计算机学科的核心课程,该课程的理论性和实践性都很强,为了更好地达到应用型本科教育的目的,文章针对山东工商学院的具体情况,从加强实践方面分析了教学中存在的问题,并给出了相应的改进对策。
关键词:应用型本科;数据结构;实践改革
中图分类号:G642 文献标志码:A 文章编号:2096-000X(2017)12-0099-03
Abstract: Data structure is a core course of computer science, which is both theoretical and practical. In order to achieve the purpose of application-oriented regular college course education, this paper analyzes the problems existing in the teaching, and gives the corresponding countermeasures.
Keywords: application-oriented regular college course; data structure; practice reform
一、概述
随着高等教育从精英教育转为大众教育,高考的录取率逐年上升,但是高校毕业生的就业情况却并不乐观,平均每年约有20%的毕业生不能实现充分就业[1]。表面看来,是因为毕业生供需矛盾造成的,但从实际调研结果来看,这种局面只是一种表面的相对“过剩”,造成这种情况的根本原因是学生的实际水平不能满足企事业单位的实际需要,即现在很多的大学并没有在本科教育阶段实施应用型本科教育,尤其是在工科专业中。工科专业本科阶段本身就是面向应用的,着重强调通过对具体情况的分析,找出合适的方案,解决实际问题。而在现阶段的很多本科院校,很多工科專业依然采用传统的以讲授为主的教育模式,这种模式以教师为主体,学生被动听课,学生的参与度很低,尤其是对于工科的知识的应用,缺乏实际应用的环境,已经完全不能满足实际需求。这种供需矛盾,最终体现在毕业就业方面,就是如前所述的相对“过剩”。与应用型本科教育相对的是理论型本科教育,应用型本科教育是培养知识、能力和素质全面协调发展的应用型人才,面向生产、建设、管理、服务一线的高级应用型人才为目标定位的高等教育。应用型本科教育强调“理论够用,注重实践”的特点,突出了应用的实用导向。就计算机专业来说,目标是培养既懂得计算机专业的理论知识,又掌握计算机应用技能的高级应用人才,能针对具体问题,提出解决问题的方案,并能利用具体的技术手段给予实现。如何在诸如数据结构这种理论和实践并重的课程讲授中,强化应用,提高学生解决实际问题的能力,达到应用型人才培养目标,是一个亟待解决的课题。
下面,我们以数据结构课程为例,分析实践过程中存在的问题。
二、数据结构课程实践过程中存在的问题
(一)课程本身难度大
数据结构课程内容丰富,学习量大,知识抽象难以理解,这给学生的学习造成一定的困难。学生往往容易理解线性结构,对于树形结构、图及网状结构上的操作掌握不够理想。
(二)学生对程序设计语言掌握得不好,影响数据结构的实现
该课程以高级语言程序设计和离散数学为前导课程,所以这两门课程的学习情况直接制约和影响着数据结构的学习。数据结构课程是程序设计课程的延续,但与程序设计课程又有很大的不同。该课程强调的是数据的表示、存储及操作,实验要求学生首先要对提出的问题进行分析,得出问题的需求,然后找到问题的数学模型,最后找到合适的存储结构,并在该存储结构上进一步解决具体的实际问题。而在数据结构课程的课本中,关于数据结构的描述都采用了抽象数据类型的方式,这种描述方式很抽象,学生学习后,不能很好理解数据结构对应的抽象数据类型在计算机中如何进行的存储;而且抽象数据类型不能直接使用,需要转化为可以使用的代码。如果学生在理论课的学习过程中对数据类型没有很好的理解,就会导致学生上机时,不能把书上的描述落实到程序代码。数据结构中的算法都是由类PASCAL、C或C++等语言描述[2],要求学生能够使用某种程序设计语言对算法进行程序设计,并且上机调试通过。由于学生对于前导课程高级程序设计语言掌握的程度不同,并且,高级程序设计语言重点要求掌握的是对基本问题的求解,而数据结构中处理的问题相对比较复杂,这就造成对于一些基础较差的学生,在实验课上不会编写程序或者写出来的程序错误百出,阻碍了他们对相关知识点的理解和应用,使教学目标难以实现。
(三)实验项目单一,实验内容陈旧,不能与时俱进
以往在数据结构实验项目的设置中,只注重了单个实验的设置,实验与实验之间是独立割裂的,忽略了学生对基础知识的验证,以及学生解决创新性和实际问题能力的培养。造成学生即使能完成基础实验,但是遇到具体问题仍不能解决。没有达到本课程的教学效果。并且部分高校的数据结构实验内容一直采用多年前的设置内容,而这些实验在网络上已有答案,造成学生不主动积极思考,很多同学只是把现有的程序拷贝到环境中,草草了事[3]。没有达到充分利用实验,巩固课堂教学的目的。
(四)实验课时不足
现有大部分学校数据结构课程实验的设置,一般为16学时或者24学时。学生在有限的时间内,只能完成基本实验。这种固定实验学时的模式,没有突破开展实验的时间和空间限制,无法让学生把实验室中没有完成的实验进行延续。造成遇到的问题不能得到很好的解决,对问题一知半解,甚至有部分学生都没有找到合适的解决问题的方案就已经下课,达不到课程实验的目的。
三、加强应用型本科教育的数据结构课程实践教学改革措施
考虑到该课程实践教学中存在的诸多问题,有必要对该课程原有实践教学进行改革,建立与理论教学紧密结合的分层次、开放性、多渠道交流的实验教学模式,提高实验课程的利用率,充分达到应用型本科教育的目的[4]。
(一)从基础做起,抓住本质
大部分课本对于抽象数据类型的描述包含三部分:数据、数据关系和操作。但是这里提到的操作,只是操作的要求及功能的描述,这种描述往往过长,造成上课时,大部分讲授枯燥、流于形式,老师上课对着PPT念一遍,学生完全没有印象。为了改变这种情况,在讲述数据结构的抽象数据类型时,重点强调数据对象及其上关系的理解,体现出数据结构的本质特点,对于操作部分不展开讲述,只是简单描述该数据类型所能完成的操作。将操作放在选定某种存储结构以后,采用具体代码描述的方式,让学生能够看到数据关系如何体现在内部存储中,使学生更好的理解该数据结构。例如:对于线性表的动态分配顺序存储结构,课本上的描述方式为[5]:
在这里,对于ElemType没有具体说明,由于学生在学习高级程序设计时,一般涉及到的是具体的变量类型,很难理解ElemType到底是怎样的变量类型,甚至出现了上机时,直接使用ElemType作为新的数据类型的情况。为了改变这种情况,我们可以根据具体问题预先设置具体数据类型,比如先预定义ElemType就是int型的变量,这样学生更容易理解。我们对于书上不明确说明的数据类型全部显式给出,这样可以使学生慢慢过渡到数据结构的使用,加深了对抽象类型的理解,解决了面对抽象类型无从下手的问题。
(二)自由选择编程工具,采用实用为主的编程原则
对于数据结构的算法描述,课本上采用了类c的伪代码描述方式,这些代码不能直接运行,但是伪代码描述的算法的核心思想是固定的,只要掌握了算法的思想,即可以转化为任意语言描述的程序。我们针对学生语言掌握程度不同的情况,提出让学生选择自己掌握较好的语言来实现,同时强调,对于实现来说,语言只是工具,不要拘泥于语法上的技巧。例如为了实现递增,可以使用i++这样的自增语句,但是如果学生没有较好的语言基础,出错几率较大,为了达到实践的目的,建议学生尽量使用i=i+1这种易于理解的语句,虽然从表面看,程序可能更长一些,但并没有增加算法的复杂度。对于使用易出错的指针等,建议学生可以使用引用的方式,减少程序出错的几率。
(三)分层次设计上机题目,使学生学有所得
由于学生对知识的掌握程度不同,相应的对于实验课程内容的设置也应该不同。为了满足不同层次学生的要求,我们采用分层次、多题目的实验设置方式。对于每一个数据结构的实验都分成基础演示型、综合型、设计研究型和创新提高型等四种类型,在每个类型里面又具体设置多个设计题目。题目设置由易到难,对基础知识掌握较为薄弱的学生引导他们完成基础演示型实验,以达到通过实验,掌握数据结构最基本的知识的目的;大部分学生可以完成综合型和设计研究型的问题,达到能够解决相应数据结构基本问题的目的;对于小部分知识掌握牢固、求知欲强的学生,给他们设置创新提高型的问题,引导他们进一步开阔思维,能够解决较为复杂的数据结构的工程问题或者实际问题。例如:对于线性表数据结构上机题目设置如表1所示。
以上四个层次的实验,从基础演示到设计创新,能充分满足不同层次的学生。在整个过程中,学生首先从抽象数据类型的实现着手,把抽象数据类型转化为具体语言环境下的类型,完成从抽象到具体的转化,从而加深对抽象数据类型的理解。然后在综合型实验中完成对抽象数据类型操作的具体实现,从而为设计研究型问题的求解搭建好了程序模块;在设计研究型问题求解的过程中,通过调用在综合型实验中完成了的基本操作的实现,用来解决简单问题。通过这样的过程,让学生学以致用,体会到数据结构的逐层深入的过程。第四个层次是创新提高,通过对设置的日常生活中的实际问题或者工程问题的分析,得出数据的逻辑关系,确定出数据结构,通过数据的操作进一步加深对基本操作的认识和数据结构的理解。四个层面由浅入深,由表及里,让学生充分认识和体会到所学知识能够解决的实际问题。同时通过上机过程的练习,又进一步提高了学生的编程能力,加强了对程序设计的认识。为了保证题目的新颖性,可以借鉴和结合ACM大赛和齐鲁软件大赛等比赛的题目,进一步拓宽学生的视野,提高学生对所学知识的理解。
(四)通过成立兴趣小组,多种形式交流,进行课下延伸学习
数据结构课程较为抽象,要充分掌握数据结构这门课程需要投入大量的时间进行上机练习。但是,学校课程的上机安排时间有限,为了进一步巩固讲授的知识,需要学生充分利用课余的时间,同时为了配合学生的学习,学校可以开放实验室,方便学生灵活选择学习时机。另外,可以成立兴趣小组,不同层次的学生结对子,小组内覆盖不同层次的学生,这样让不同层次的学生可以相互学习,共同提高;为了增加趣味性,小组和小组之间展开比赛,进行期中、期末两次考核,进一步激发学生的学习兴趣。为了加强教师的指导作用,教师可以通过微信、qq、博客等多种渠道与学生展开交流,把教学从课堂延伸到课外,更加便捷和高效的与学生进行沟通,及时解决学生学习过程中遇到的问题,做到问题不过夜。
(五)鼓励学生参加计算机相关的竞赛,以赛促学,激发学生的学习兴趣
数据结构课程的应用很广,一般的计算机相关的竞赛都会用到数据结构的知识。为了进一步激发学生学习的积极性,教师要多鼓励学生参加相关的竞赛,以赛促学,激发学生的学习兴趣,增强学生学习的成就感。竞赛是综合知识的运用,同时也会考验团队的合作能力和创新能力,通过参加竞赛,能提高学生解决创新实践问题的能力。为了更好的配合学生参加比赛,我校成立了创新实验室,每年一次面向全体学生纳新。创新实验室全天开放,并且配备了指导老师,学生在实验室有问题随时有指导老师解决。另外,通过多级学生的传帮带,形成了良好的学习氛围,为学习程度较好的学生提供了更多的学习实践机会。同时通过大赛,老师的实战能力也得到了提高,为更好的教学实践提供了素材。
四、结束语
实践证明,我们所采用的实践教学改革措施较为实用。不仅使学生掌握了数据结构的知识,而且充分调动了学生学习的积极性,学生的动手能力大为提高,多次在软件大赛中取得优异成绩,就业率也稳步提升,达到了应用型本科教育的目的。
参考文献
[1]夏建国,刘晓保.应用型本科教育——背景与实质[J].高等工程教育研究,2007(3):92.
[2]张红霞,盘丽丽.《数据结构》课程教学改革研究与探讨[J].现代计算机,2009(06):79-81.
[3]宁正元,王秀丽,钟一文,等.应用型本科“数据结构”课程教学改革的研究与实践[J].计算机教育,2009(07):119-121.
[4]赵玉兰.“数据结构”课程实验环节教学的改革与实践[J].计算机教育,2010(01):70-72.
[5]嚴蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,2003.