蔡丹琳,刘俊杰
(泉州师范学院,福建 泉州 362000)
《数据结构》课程教学改革与实践创新
蔡丹琳,刘俊杰
(泉州师范学院,福建 泉州 362000)
为了提高《数据结构》课程的教学质量,针对课程的特点,剖析教学中存在的问题,总结教学经验并提出具体教学改革方法和措施.经实践证明,本文提出的教学方法对教学质量的提升有明显效果.
数据结构;教学改革;ACM;实践教学
“数据结构”是计算机及其相关专业的核心课程之一,在计算机类的课程体系中起到承前继后的重要作用.通过本课程的学习,学生应学会分析要解决的问题,归纳计算机加工对象的特性,选择合适的数据结构和存储表示方法,及设计解决问题的实现算法.因此,在教学过程中不仅要重视数据结构的理论知识,提高学生抽象思维能力,更要注重培养学生的动手实践能力和研究创新能力.
然而,通过几年的数据结构课程教学及调研发现,我院不论是在计算机专业还是计算机相关专业,该课程的教学情况并不能让人满意.学生在学完该课程后只能记住“后进先出”、“先进先出”、“赫夫曼树”等几个名称.为了改变这一现状,笔者对该课程的教学进行一些改进,在教学过程中采用启发式教学方法,通过理论知识与实际案例相结合进行分析、讲解,并将ACM-ICPC Online Judge在线评测系统运用到数据结构课程的实践教学中,取得了显著效果.
随着计算机技术日益发展,其应用方向和应用领域已经不是局限于数值运算和科学研究,而是渗透到各个领域,更多的涉及到问题分析、数据结构的设计和复杂的非数值处理和操作.数据结构就是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科[1].然而,多年的教学实践中发现课堂上讲授的概念和基本知识学生普遍都认为不难,也都能掌握,可是一到课后需要自己解决实际问题时就不知从何下手了,实践课时要求用具体语言调试算法时更是举步维艰.是什么原因导致这种情况的发生?笔者认为主要是因为以下几个方面的问题.
数据结构(C语言版)课程最主要的先导课程当然就是C语言程序设计.学生在大一才刚接触计算机语言,对C语言的学习不够深入,理解也不够透彻.如指针、结构体部分作为数据结构中常用的基本知识,学生在学完C课程后还是一知半解,这一问题在实践课程中更为突出.
数据结构课程的另一门主要先导课程是离散数学.大多数高校的离散数学是在高等数学学完后开课,学生还没来得及学离散数学就开始学习数据结构,使学生缺少了数理逻辑的思想的训练,影响学生对数据结构课程中相关问题的理解.而离散数学中涉及的二元组,树和图等知识也是离散数学的教学内容,在数据结构课程中由于课时的原因只能进行简单介绍,这也在一定程度上影响了教学效果.
数据结构课程中涉及到较多概念、存储表示及算法操作.过去,在数据结构教学中,主要是针对某一知识点,从基本概念、类型定义开始,详细讲解存储表示方法、抽象算法和算法代码.学生的学习亦是从概念的理解入手,进而学习算法代码,将重点放在将课本中的算法转化为代码实现上,把数据结构课程当成C语言课程的延续,而没有认识到真正的数据结构意义,导致学生无法真正掌握解决问题的方法,创新能力弱.
数据结构是计算机程序设计的重要理论技术基础[1].该课程是一门重要的技术基础课,也是软件工程的先导课[2].多年来根据学生的具体情况和学科特点,已经过多次教学方法和举措的改革,学生对理论知识的掌握还算扎实,动手能力也有一定程度的提高.同时选用经典的理论教材也为学生掌握理论知识提供了很大的帮助,然而,很长一段时间我们一直都采用同一套教材,这样不管是学生还是老师对问题的理解往往会有一定的局限性和片面性.同时,大多数实验教材中的内容略显陈旧和过时与当前实际应用尚有有差距,与工程项目衔接不够紧密,严重影响学生的学习积极性.
数据结构课程不仅是软件工程的先导课,也是操作系统、数据库、编译原理、计算机图形学等课程的基础.因此,该课程在计算机学科的教学中起着举足轻重的作用.针对该课程存在的问题,笔者对教学进行以下几个方面的课程改革.
针对先导课程存在的问题我们采取了以下策略:首先,我们了增加C语言程序设计课程的学时,由原本大一下一学期5学时调整为大一上下两学期4+2学时.这样调整除了增加课内教学授课时间外,还同时增加了学生课外复习和实践训练时间,有利于学生更好地掌握C语言.其次,我们采用由同一位老师来担任C语言程序设计和数据结构课程的教学任务,任课老师在充分了解学生C语言掌握情况的前提下可以使两门课程得到更好的衔接.第三,我们将离散数学提前一学期和高等数学一起进行,让学生能够在掌握一些数理逻辑、树、图等知识后学习数据结构.通过这一系列的举措,已经逐步解决了2.1中所提到的由于先导课程的原因导致的问题,学生学习的效果得到了显著的提高.
3.2.1 实施启发式教学
启发式教学是指在教师的引导启发下,以师生互动的形式,鼓励学生主动思考、主动探索、共同参与的一种教学方法[7].多年的教学发现,课堂教学中,无论教案多么精美,语言多么生动都无法完全吸引学生的眼球,抓住学生的思想.只有采用启发式教学,创设问题,引导学生主动思考,实现教学互动,才能调动学生的学习积极性,活跃课堂,提高学生的创新思维能力.
在教学过程中,教师首先要善于从教学内容中挖掘问题,并分析问题涉及到的数据结构,创设问题,启发式地引导学生积极思考,充分调动学生主动思考问题、分析问题、解决问题的主动性,使学生能够主动掌握知识,而不只是被动地学知识.进而通过举例、对比、动态演示等手段深入详细地讲解知识和算法,将枯燥的理论知识与实际应用相结合,逐步培养学生发现问题、分析问题、并解决问题的能力.
3.2.2 采用案例教学
案例教学法是一种运用实证来引入情景,启发分析、演绎、推断、归纳和解决实际问题的方法[4],被广泛运用于许多课程中.数据结构课程包含较多的概念和理论知识.教师如果不结合实际,而只是根据教材中的内容来讲解概念和算法,将导致学生不知道所学的知识有什么用、怎么用,而很快将所学知识淡忘.而通过案例教学,将知识融入案例中,在案例分析过程中讲解概念、算法不仅能让学生更好地掌握理论知识,也能使理论和实际紧密结合,激发学生的学习兴趣.例如,在介绍栈的知识时,笔者就用“进制转换”,“火车调度”等作为引入知识案例.实践证明,通过案例教学,不但学生有较高的学习兴趣,而且对知识的掌握程度也明显提高.
案例教学还可以在章节结束后使用.在讲授完相关概念、理论知识后,准备一个综合并有贴近生活的案例,这样即达到复习作用,也可以让学生感到学有所用.例如在图的基本知识过后,引入“工程施工”,“通讯网络造价”等案例,既有真实性,又与实际生产生活相联系.
ACM/ICPC(ACM International Collegiate Programming Contest,国际大学生程序设计竞赛)是由国际计算机界历史悠久、颇具权威性的组织ACM(Association for Computing Machinery)主办的,是国际公认的规模最大、水平最高的国际大学生程序设计竞赛.其目的旨在使大学生运用计算机程序设计理论(包括数学、逻辑推理、程序设计语言、数据结构、算法等)来充分展示学生分析问题和解决问题的能力[5].中国高校从1996年开始组织参加,而我校2009年才开始进入这项比赛.
ACM竞赛设定了一套合理的竞赛排名、挑战规则,提供了一个学习和使用程序设计语言和算法的完整实践模式,让学生以精通编程为荣,形成一个积极向上的自主学习氛围[6].我们开发了ACM在线测评系统,并将其运用到数据结构课程的教学过程中,取得了显著的效果.
3.3.1 改革实践教学内容、考核模式
将实践内容分为:基本实验、设计型实验和创新实验项目.基本实验包括线性表、栈、队列、串、树、二叉树、图、排序等基本存储、基本操作、基本算法.设计型实验包括图书管理、迷宫求解、赫夫曼编码、简单排课系统等.创新型实验有数据结构算法演示系统、校园地理信息系统、基于RFID技术的无线自动讲解系统等.通过对实践内容的分级设立,在不同阶段让学生进行不同程度的练习,可以有效地提高学生对基本知识的掌握和综合能力、创新能力的提升.
对于数据结构的考核一般分为理论和实践考核.以往实践考核执行起来难度大,通常以平时实践教学时掌握的情况来评定,缺乏竞赛性和公平性.
针对ACM竞赛,笔者将实验内容改造为ACM试题模式并上传到ACM在线测评系统.要求学生在课内必须完成相应的基本实验内容,ACM在线测评系统将记录学生程序的提交次数及完成实验的时间,并评定出成绩,以此作为课程的平时成绩.让学生在课外分组完成设计型实验.选择成绩较好的学生组队进行创新型实验设计.在学期结束时,利用ACM系统进行考核,要求每个学生在规定时间内独立完成规定题目.考核过程中学生可以实时地看到所有同学的完成情况和排名次序.这就极大地提高了实践考核的挑战性和公平性.而且引入竞争机制后,学生们学习的积极性也大大提高.
3.3.2 实践教学改革成效
ACM竞赛以解决问题为目标,通过具体问题的描述给出题目,让学生自主选择恰当的数据结构,设计准确高效的算法.经过几轮的实践证明,基于ACM模式的数据结构实践课程可以很大程度上提高了学生的编程能力,算法设计能力和创新思维能力.为参加ACM大赛、软件工程的学习和实际项目的开发打下了坚实的基础.
通过课程的教学改革,学生对数据结构、算法设计和ACM竞赛产生了浓厚的兴趣.托尔斯泰曾说:“成功的教学所需要的不是强制,而是激发学生的兴趣”.可见,兴趣是学习的主动力,只有主动学习才能学得更好,学得更多[3].只有充分思考不断改革,加强教师自身修养,才能达到理想的教学效果.
〔1〕严蔚敏,吴伟民.数据结构(C 语言版)[M].北京:清华大学出版社,1997:前言.
〔2〕王淮亭.《数据结构》实践教学探讨与实践[J].计算机教育,2009(12):133-134.
〔3〕王秀清.教学关键——提高学生学习兴趣[J].价值工程,2010(20):209.
〔4〕罗淇方.浅谈案例教学在数据结构课程中的实践应用[J].中国科技信息,2010(19):251.
〔5〕Han J,Kamber M,范明,孟小峰,等.数据挖掘概念与技术(原书第二版)[M].机械工业出版社,2007.
〔6〕武建华.基于ACM模式的数据结构实践教学改革与探索[J].计算机教育,2007(12):114.
〔7〕王志军.启发式教学——启发学生的创新思维[J].实验技术与管理,2008(12):17.
G642
A
1673-260X(2011)10-0253-02