周长兵 季晓慧 王振华
摘要:针对数据结构课程教学过程中面临的问题和学生的学习状态,依据数据结构课程特点,结合教学中的实际经验,提出了对课程教学方法的改进措施。在强化理论基础的同时,加强上机实践,引导学生自主学习,敢于并勇于质疑,培养学生分析问题和解决问题的能力。
关键词:数据结构;问题驱动教学方法;差异教学;课程实践;算法效率
中图分类号:G642.0 文献标识码:A 文章编号:1009-3044(2014)22-5277-03
1 概述
数据结构是计算机及其相关专业中最重要的基础课程之一,它不仅是计算机专业的核心基础课程,也是非计算机专业的选修或必修课程。该课程不仅对学习计算机相关领域的知识有巨大帮助,而且对软件设计或项目开发等都具有重要作用。其研究思想和研究方法在计算机及其相关领域的科学研究中,都已经得到广泛深入的应用。同时,数据结构还是《算法设计与分析》与《数据库原理》等课程的先行基础课程,只有学好了数据结构,才能更好地掌握计算机其它专业课程,才能深刻理解并灵活运用计算机及相关专业知识。
数据结构主要研究数据在计算机中的表示、组织和处理,以及在相应结构上的算法设计和初步的算法性能分析技术[1,5]。通俗来讲,数据结构是计算机中存储、组织和管理数据的方式。如何选取合适的数据结构是算法效率优化的重要因素之一。本课程要求学生能分析计算机中各种数据结构的特性,初步掌握算法的时间和空间分析技术,通过选取合适的数据结构来优化不同类型的程序设计。在实际应用中,分析不同数据结构和程序的特点,结合时间和空间方面的考虑,选择适当的数据存储结构和逻辑结构,优化算法,进行程序设计。
该课程理论性较强,具有一定的抽象性,学生理解起来具有一定的难度,容易造成教学效率低和学时膨胀。同时,理论与实践并行,容易造成学生学习任务过重,难以消化,致使动手能力较差,不能灵活应对实际生活中某些应用场景下的数据结构设计和算法优化,在整个教学过程中存在多种不同的问题。为此,该论文首先分析我们在课程教学过程中遇到的各类问题并分析其成因,结合实际教学经验,给出相关的建议和改进措施,来达到该课程的教学目的,使学生掌握最常用的数据结构,理解不同数据结构的特点、优缺点、适用场景、内在联系与异同点,能够灵活运用这些数据结构,选择合适的数据结构并优化算法效率。同时,注重培养学生发现问题、分析问题、解决问题能力,不断改进教学方法,探索新的教学模式。
2 教学中存在的问题及其成因分析
2.1 传统教学方法的不足
传统的教学方法是教师用粉笔在黑板上进行板书,辅以口头讲授。然而单纯的口头和书面授课方式较枯燥,加上数据结构理论性较强,有一定的深度和抽象性,学生难以理解,容易使学生对该门课程失去兴趣,甚至厌学。
在课程结束时,学生通过学习往往能够掌握数据结构中的一些基本概念,对一些基本操作也有理论性的了解。但由于缺乏思考和对不同数据结构之间内在关系的深刻认识,不仅对该课程的意义不甚理解,还往往造成眼高手低,仅具有理论知识,在实践过程中却不知道该如何灵活应用,难以真正地进行数据存储结构的编程实现,以至于一到解决具体问题时就感到无从下手。因此,不仅该课程的教学没有达到预期效果,学生们对该课程也只觉得枯燥和复杂,并未能找到学习的乐趣。同时,随着新技术的不断涌现,教师教学的方式也应有所变化,例如准备精美的PPT课件、Flash动画等等,这些技术简单易学,不但可以节省教师板书的时间,而且在讲解知识点时也会更加的有条理性,更能调动学生学习的积极性和兴趣。
2.2 教学内容繁杂抽象
数据结构中定义了多种结构形式,比如线性结构、树形结构和图形结构等,教材中为了不受编程语言的限制,通常都用抽象数据类型来进行描述,代码也均为伪代码。内容多,并且抽象复杂,让学生难以理解透彻。
在讲解数据结构时,教师通常将算法附带着进行讲解,例如一些简单的排序算法、查找算法等,也会有一些应用方面的例子,例如栈、图、树等数据结构的综合应用等。这些算法涉及的内容较宽泛,且都是理论上的、算法思想层面的讲解,不易理解。编程语言基础不好的学生在学习的过程中尤会感到困难,因为算法的实现必须要有编程语言的设计。所以,在学习这些章节时,有相当多的学生会感到有比较大的难度,从而容易造成学生学习兴趣不高,学习动力不足,致使教学达不到预期的效果。
2.3 缺乏实践
数据结构应是一门理论与实践并重的课程。如果只重视理论教学,容易造成学生实践能力差,只有在经过上机实践了之后,学生们才会对该课程有深入地理解。
因此,在整个教学过程中,开设实践课时并辅以程序实现,加深学生对数据结构和算法的理解。同时,大部分教材为使学生学习数据结构时将主要精力放在掌握数据结构的特点和算法思想上,而不限于具体语言的实现上,都选用伪代码(类语言)来描述算法。但这对一些前导课程(例如程序设计语言课程)的基础不够扎实的学生来说,难以将伪代码具体运用到编程语言实现中,导致学生理解得不够透彻,动手能力较差,解决问题时没有思路。
总的来讲,该门课程首先要求学生掌握不同数据结构的特性,深入理解并分析其优缺点。其次,在遇到实际问题时能够动手灵活运用,根据应用场景和程序设计选择最佳的数据结构和优化算法。最后,训练学生进行复杂程序设计的技能和养成良好程序设计的习惯。因此在教中,实践课时的设计是一个非常重要的组成部分。
3 改进教学方法
针对上文所提到的问题,在教学中我们采用了如下方法来改进教学质量。
3.1 注重概述
“兴趣是最好的老师”,概述部分对于提高学生的学习兴趣至关重要[2],一个好的概述不仅可使学生认识到该门课程的重要性,还可使学生对该门课程产生浓厚的兴趣与学习动力。在教学过程中,老师应该充分认识到概述部分的重要性,它不仅是新知识的一个统领性的介绍,更是让学生从宏观上了解该门课程体系结构的一个重要环节。
在概述部分可适当添加一些数据结构有趣的应用实例来进行辅助说明,引起学生的学习兴趣,让学生主动地去探索这些问题,寻求解决方案,激发学生自主性的学习,并引导学生从宏观上了解日常生活中数据结构的应用,思考如何创新运用数据结构等。例如,在介绍新的知识点时,可从学生身边的一些有趣的数据结构的实际应用入手,比如,在设计一个游戏时,计算机是如何应对不同变化情况,给出相应策略并实现灵活对弈等。用同学们所熟悉的、贴近生活的问题来激发同学们去探索问题的解决方法,激发同学们渴望掌握相应的数据结构知识的欲望等。让学生们带着兴趣和思考去学习数据结构,才是最好的教学方式。
同时,为了培养学生们独立思考的能力,可以在讲授某个知识点之后,引出下一知识点,鼓励学生课下进行思考,做一些准备和预习工作,再在下一堂课的概述部分进行讨论。
3.2 问题驱动课堂教学
传统教学都是先学习理论知识,再解决实际问题,这样的一种学习方法容易造成学生学习的惰性和被动性。在学习过程中,多数同学可以从教材中掌握数据结构的相关理论知识,并能读懂书本上的算法。但是往往在遇到实际问题时,例如应对一个题目需要设计一个算法时,就感到无从下手,其最主要的原因就是教学时偏重于理论,致使学生没有将理论知识与实际应用结合起来。教师是教学中的引导者,学生是学习的主体,为此有人提出了问题驱动教学方法,也就是以各种思考问题为学习起点,在问题的基础上进行学习内容的规划,让学生围绕问题寻求解决方案。
实践表明,问题驱动教学法能够提高学生学习的主动性,调动学习的积极性,容易激起学生的求知欲,活跃思维。所以,在讲述数据结构的每一个知识点前,例如某种基本的数据结构时,可相应地准备一些实际应用的例子,让学生一边逐步学习理论知识,一边思考如何应用,将理论真正应用到实践当中,联系到实际的应用场景中。如此进行课堂教学的实践已经取得了较好的效果。比如在学习栈之前,举几个常用的线性表的应用实例,让学生带着问题去学习,不仅极大地提高了学生的学习热情,并且可提高课堂师生的互动。基于问题的教学方法可使学生思维高速运转,主动的融入到教学中,与教师形成互动。极大地强化了学生的学习动力,激发了学生的探求欲望和学习兴趣,使学生进入一个积极思考的状态[3]。
同时,在教学过程中可采用“3W”的教学理念,调动学生的学习积极性。“3W”即What, How和Why,What是让学生明确学些什么,带着明确的学习目标进行有针对性的学习,以拓展学生的知识面为辅。How就是如何做的意思,加强学生的动手能力,将理论应用到实践当中。Why是让学生能够知道为什么要这样做,不仅知其所以然,还要知其为何所以然。
3.3 差异化教学
在课堂讲授中教师应起到提纲挈领和引导的作用,对易懂的内容可以点到为止,重点难点精讲细讲,用最少的时间将课堂效率最大化。
重点内容是指数据结构中的重要概念、重要算法思想及其应用,对这些内容,应结合多种教学方式和手段去讲深讲透,引导学生理解概念的真正含义,掌握算法的实质,在此基础上,寻找解决问题的方法。难点是认知到学生不易理解和容易出错的地方,可通过教学经验或者与学生进行交流得知。同时,在教学的过程中也要注意学生易于忽视的细节。对待难点要分析究竟难在何处,在知道难点的所在之处之后,再对症下药进行重点讲解。
课堂讲解也应该是由易到难、由简到繁、由浅至深、循序渐进的过程。授课的过程中,对于抽象的东西应该形象化、直观化地进行讲解,对于复杂的知识点应注重讲解的条理性和上下文逻辑性,对于易于混淆的内容宜尽量采用对比法加于区别,例如通过图表进行分项比较,做到化难为易,化繁为简,化抽象为具体。
因为每一个学生的学习程度可能都不一样,对于一个问题的理解方式和速度等也都会有所差异,所以教学不能讲的太快,致使理解慢的学生跟不上节奏;同时也不能讲的过慢,致使学时膨胀。最好的方式是因材施教,使学生知学、好学、乐学,以此达到课程教学的目的。备课时教师就要分析每节课的教学内容,确保通过本节课的学习,每一个学生都能够理解应该掌握的内容,然后确定本节内容的扩展部分,为一些学有余力的学生提供发展的思考空间;而对于基础较差的学生则应鼓励性的分步进行教学,注重多重练习,调动他们的学习积极性,增强自信心,并使其尽快达到基础标准。
3.4 加强实践环节
欧洲和北美教育的成功的一个主要因素在于非常重视学生的动手能力和实践,而这点很值得我们学习。在欧洲和北美国家的教学中,几乎每一门课程都会有大量的课程设计,这不仅需要授课老师具有扎实的理论基础,同时要求老师花费大量的时间去备课。
数据结构该门课程本身就是一个理论和实践并行重要的课程,设计一个好的实践课也将会对学生动手能力的提高具有非常大的意义。课程的理论教学需以教师为主学生为辅,老师起到引导作用,实践教学需要以学生为主教师为辅,学生应主动进行自我动手的学习。国内目前已有部分教师采取分小组的方法来进行实践考察,例如,在进行期末课程测试设计时,要求学生自行分成若干小组,根据难度系数的不同来分别设计一些综合性的应用问题,每一小组可为3到5个人不等,根据难度系数随机分配题目,组内成员分工合作完成分析设计和实现,最后提交规范的课程设计报告,并上台进行讲解,进行分享,使得所有同学都能学习到更多的实践经验。教师除了给出难度适宜、结合实际的题目外,还需要引导学生在分析问题时的方法和角度,对学生不明白的地方适当给予提示与引导,使学生积极参与,调动学生的主动性,并激发学生的创造力,不断培养学生发现问题、分析问题和解决问题的能力。
在制定期末成绩考核机制时,也可适当加大实践教学中考核成绩的权重,让学生重视实践课,注重自身动手能力的培养,同时,提高学生运用理论知识灵活解决实际问题的能力。
3.5 敢于质疑
由于受我国传统教育和社会因素的影响,绝大多数学生对书本、教师、权威专家所说的话基本上是绝对性的服从,总以为书本上知识是绝对正确的,教师讲的都是真理,即使学生有所疑问,也不敢对书本和老师等提出半点怀疑。但这一点恰恰严重阻碍了学生进行独立思考和创新思维的发展。只有在质疑的过程中,学生才能够更深刻地理解每一个知识点的来龙去脉,并能有自己独立思考和想法的空间和机会。
为此,教师可以尝试在授课的过程中,在提出一个应用问题后,鼓励学生采用不同的数据结构和不同的算法解决问题。不同的解决方案,性能不同,在问题功能实现后,让学生比较不同解决方案的性能,找出其中的原因,然后鼓励学生发现其中的问题,让学生通过自己的思考来发现问题。不是把学生放在一个被动式的状态中学习,而是不断地进行反思和质疑,敢于质疑任何问题,独立思考,提出自己的见解,即使有所不对,但也可以将学生逐渐从传统的“迷信”思维中解脱出来,让学生发散思维方式,勇于质疑,勤于思考[4]。使学生明白在学习过程中不能只是接受式的学习,同时需要不断的思考与质疑,“读书无疑者,须教有疑,有疑者都要无疑,到这里方是长进”。
4 结论
数据结构是计算机及其相关专业重要的核心基础课程之一,该课程的理论性和实践性都较强。为此,教师在讲解的过程中,更应当化抽象为具体,化难为易,化繁为简。不仅要使学生掌握该门课程基础理论知识,并要学会灵活运用,更要着力培养学生敏捷的抽象思维能力和严谨的逻辑思维能力,充分调动学生自主学习的积极性、独立性、主动性和创造性,培养和提高学生的自学能力,以及发现问题、分析问题、解决问题的能力[5]。
同时,教师应不断完善自己的教学方法和教学模式,尤其是加强实践教学环节,勤于与其他老师交流心得,与学生交流得知教学效果,并抱着“好则加冕,无则改之”的心态不断地探索最佳教学方式,以达到更优的教学质量。培养学生创新思维和创新能力,将有利于学生个性和才能的全面发展,对社会也将培养出理论知识扎实、动手能力强、具有发散性思维和创新能力的新型人才。
参考文献:
[1] 严蔚敏,吴伟民. 数据结构[M]. 北京: 清华大学出版社, 2007.
[2] 黄德玲,汪林林. 数据结构课程教学方法的探讨[J]. 中外教育研究, 2009(3).
[3] 鹿旸. 数据结构与算法课程教学方法的思考[J]. 计算机教育, 2010(5).
[4] 余腊生,石献. 基于创新理念的数据结构教学方法探讨[J]. 计算机与信息技术, 2006(11).
[5] 季晓慧,王群,管建和. “数据结构"课程教学初探[J]. 中国地质教育, 2009(1).