内外兼修
2011-01-01段明秀陈国平何迎生
计算机教育 2011年4期
摘要:通过分析数据结构课程的特点,提出在保证课堂教学质量的前提下,充分利用课内实验和课外实践环节来巩固课堂知识,实现知识向能力的转化,最终实现改善教学效果的新思路。
关键词:课程主线;情景式教学;科学素养;数据结构
数据结构是计算机学科的核心课程,是计算机专业后续课程的基础,主要用于处理非数值计算问题。学习数据结构就是要让学生掌握数据在计算机中的表示、组织和相应结构上的算法设计,以便学生在软件开发的过程中能选择适当的逻辑结构、存储结构,高效的设计算法,并初步掌握算法的时间和空间分析技术。
然而,由于课程内容繁多、理论抽象、逻辑性强、难以理解,几乎所有的算法都没有源程序实现,这给学生理解带来了很大的难度。因此,学生上课听不懂、上机实践动手能力差、课程难教难学的现象普遍存在。
结合多年教学,笔者总结出以下几点经验,希望这些经验能有助于学生学好数据结构、提高分析和解决问题的能力。
1 采取多种手段改善课堂教学效果
1.1 紧扣课程主线,把握知识要点
数据结构课程内容比较繁杂,但总体来说主要介绍线性结构和非线性结构这两大基本结构类型,线性结构部分包括线性表,栈和队列,串,数组和广义表,非线性结构包括树和图。
在线性结构中,线性表是最基本、最简单的一种结构,属于课程最基础的内容,如果学生掌握了它的存储结构及其基本操作,其他线性结构的教学就不难了,因此,在教学过程中加强对线性表部分的讲解十分重要,应将其作为课程教学的主线。其他的线性结构都是在线性表这个基本结构的基础上作某些限制后的特殊线性结构,如栈和队列是对插入、删除操作做限定的线性表,串是对线性表的数据对象做限定的线性表,广义表是元素的值可分解为原子或列表的线性表。
非线性结构的典型代表是树和图,主要涉及存储结构、基本操作及其在实际中的应用,在这些存储结构下,树和图的各种操作几乎都是以遍历为基础的,因此,对于非线性结构,以结构的遍历为主线进行展开是合适的。例如,二叉树是树这一部分的重点,因为树和森林的各种操作可以转换为二叉树来实现,而二叉树的各种操作都是以遍历为前提的,因此,掌握了二叉树的遍历,也就掌握了树及森林的遍历,从而达到快速掌握其他相关操作的目的。对于图,虽然算法较多,相对难于理解,但通过分析这些算法,我们发现其本质都是在图的遍历基础上加以一定的约束来实现的,因此,掌握了图的遍历,对图的其他各算法的理解就简单了。
查找和排序是对上述两大基本结构的应用,主要侧重于算法思想的介绍,在后续课程(如算法设计与分析)中会有更深入的介绍,因此,可以不作为本课程的重点。
1.2 采用情景式教学方法,使抽象的内容生动化,具体化
情境式教学方法是一种充分利用形象创设典型场景、激起学生学习情绪,把认知活动和情感活动结合起来的教学模式。在教学中,学生经常反映听不懂,算法理解有困难,独立解决问题时无从下手,其主要原因在于很多课程知识比较抽象,常规教学方法不利于学生理解和应用。为了使抽象内容变得生动具体,学生易于理解和掌握,在教学中,我们应尽量采用情境式教学方法。引入的问题可以从学生生活中熟悉的情景、实物、实事入手,这样学生容易接受,并能自然而然地进入学习求知状态。用降低思维门槛、激发学生兴趣、增强学习趣味性的方式引导学生思考,激发学生的探索欲望,并为问题的解决提供动力。
在讲解某种数据结构前,教师可以设置问题情景,提出一个与其相关的案例问题,使学生带着疑问和思考进行学习。例如在讲解堆栈时,我们可以拿现实生活中的洗碗来类比,碗摞在一起就是一种线性关系,洗的过程就是入栈出栈操作,随着碗的叠放和取出,最上面碗的位置在动态变化,因此,需设置一个top指针。同时,你不能一直取下去,因此,还要设置一个bottom指针,这一比喻使学生对堆栈的存储结构和逻辑结构有了较具体的认识。又如,我们可以利用“在座位上插入一个新同学”的问题来让学生理解“线性表的插入”、利用“排队买票”来理解“队列”等。借助此类形象的实例,我们可以集中体现教学内容,学生从中也可以推导出结论且更易于理解和记忆。
1.3 充分利用现代教学手段,改善教学效果
数据结构课程内容多,大部分都很抽象,用传统的方法来讲解该课程非常枯燥,为了改善这种状况,我们可以借助现代教学手段,除了把教学内容做成多媒体课件外,还可以把适合动画演示的内容,通过多媒体技术直观地展示出来。
HANOI问题是程序设计中的经典递归问题,掌握算法的执行过程,对深入理解和灵活运用递归有重要意义。该算法用高级语言描述只有几行语句,但由于递归算法中有两次递归调用,程序执行过程复杂,学生很难理解。在实际教学中,为了把这个过程讲明白,教师可以利用Flash设计一个动画,形象地描述运作过程和堆栈的变化状态,从而帮助学生理解递归调用及递归过程,加深其对知识的理解。类似的问题还有很多,如串的模式匹配、二叉树的遍历、图的遍历等都可以借助动画演示来加深理解,改善教学效果。
另外,随着校园网络的发展,利用网络课堂辅助教学对改善教学效果十分有益。借助网络课堂的发布功能,我们可以把电子教案、多媒体课件、参考资料、课后习题等各种课程资源提供给学生,学生可以在课后慢慢消化课堂上没有消化的知识;网络课堂的论坛和答疑系统为学生和老师提供了一个交流平台,学生可以随时向同学或老师提问,任课老师也可以与学生充分交流,及时掌握学生的学习动态,调整教学方法。
2 通过实验巩固课内知识
2.1 实验环节的重要性
首先,数据结构课程有别于其他专业课程,它主要讨论数据在计算机内的逻辑结构、存储结构及相关操作的算法,并在理论上有所抽象和提炼,因此课程高度抽象。而抽象的知识往往是难于为人理解的,学生经过课堂教学,只是对这些知识有了一种感性认识,离深刻理解还有较大差距,在实验中,学生通过把这些抽象知识直接转化为熟知的程序代码,经过调试和运行,得到能真正看得见的运行结果,这无疑加深了学生对知识的理解,实现了知识从感性认识到理性认识的转化。
其次,在课堂教学中,尽管我们一再强调以学生为主体,但起主导作用的仍是老师,教学仍采用老师讲学生听的基本模式,学生总是被动地接受知识,缺乏自己动手的过程,而实验环节正好弥补了这个缺陷,因此,课程实验对帮助学生巩固和加深对课程内容的理解至关重要。
2.2 实验内容的科学性
科学合理的实验内容设计对实验效果和促进学生对知识的掌握和理解起至关重要的作用。在平常的教学实践中,实验内容的设计往往是对课堂教学内容的简单验证,学生只会依葫芦画瓢,知其然而不知其所以然,不能充分理解和掌握所学内容,实验达不到其应有的作用。另外,实验内容互不相关、相百脱节,缺乏系统性和延续性,当遇到类似的、需要知识综合的问题时,学生缺乏从全局的角度分析和解决问题的能力,这不利于学生知识应用能力的培养。
为了改变这种状况,我们在实验项目的设置上作了相应调整。首先,在实验类型上我们把实验项目分为3大类,即验证型、综合型、设计型。验证型实验以验证教材介绍的算法为主,实验指导书提供了这些算法的详细案例代码,学生可以先从读懂代码来体会数据结构的精髓,加深对基础知识的理解。综合型实验注重相关知识的融合,通过设计合理的实验内容强化知识间的联系,锻炼学生的综合实践能力。设计型实验的目标是让学生利用所学课程知识去解决具体问题,训练学生灵活运用所学知识进行复杂程序设计的技能,提高学生面对实际问题选择合适数据结构和算法进行程序设计的能力。其次,在实验内容的设计上,为了确保实验效果,促进学生对理论知识的理解和应用,在内容的选择上必须兼顾广度、深度和梯度。广度即实验内容应该涵盖课程的所有知识点;深度即对实验题目进行精心设计,而不是简单的照搬教材上的实例,最好选择一些带有趣味性的现实问题;梯度即实验题目有难有易,既有对基础知识进行巩固的较简单问题,也有相对较难的让学生有所提高的隐蔽性问题,避免学生出现“眼高于低”的情况,切实改善实验效果。
2.3 实验过程的规范性
尽管科学合理的实验项目设计是实验教学的基础,但作为教学主体,学生的主观能动性在整个教学过程中是至关重要的,因为只有学生的积极参与才能让我们的教学工作落到实处。为了达到这个目标,我们必须及时掌握学生的学习动态、了解学生对知识的掌握程度,而这些信息只能借助规范的实验过程来获取。
为了规范实验过程,我们在实验教学过程中要坚持做到有计划、有指导、有报告、有总结,随时掌握学生动态,根据实际情况调整实施过程,兼顾整体进度和个体差异,尽量做到因材施教。首先,我们把实验划分为课内实验和课程设计两大部分,课内实验主要涉及验证型和综合型实验,设计型实验体现为课程设计,课内实验部分在任课教师的指导下由学生在实验课内完成,课程设计在课程组教师的集体指导下由学生在课后完成。
为了规范管理,实验开设前由任课教师制定详细的实验计划,对每个实验项目确定基本目标和要获得的具体结果,指导后期的实验过程;为了保证实验质量,严格控制课内实验师生比,保证每一位学生都能得到及时的指导;要求学生每次实验必须随堂提交实验报告,任课教师通过批改实验报告了解学生对相关知识的掌握程度,及时调整教学策略:新课教学完成后,我们给学生两周时间完成课程设计,根据学生动手能力不同对学生进行分组,为每组分配不同的题目,要求学生独立完成前期的问题分析、算法设计、数据结构设计以及后期的编码和文档编写,而且要做到分上明确,这样既可以让他们学会交流与协作,又可以提高动手能力差的学生的学习兴趣,为学生将来走上工作岗位打下坚实的基础。
3 课外学习强化所学知识
传统教学以章节为主讲授课程知识,讲授过程缺乏连贯性和系统性,教师往往是向学生抽象地介绍一些常用的数据结构,这些数据结构在哪些方面或哪些领域如何应用却没有涉及,这导致了理论与实践严重脱节,因此,学生对“数据结构”潜在的应用价值缺乏深刻的认识。为了改变这种状况,我们通过设置一些课外学习环节来引导学生把课内知识转化为应用能力。
3.1 借助ACM程序设计大赛平台培养学生创新能力
ACM国际大学生程序设计竞赛作为一项世界性的竞赛活动,在信息技术界具有超凡的影响力,许多赛题是实际工程应用中所遇到的问题,解决这些问题需要应用数据结构的基本知识,这有利于学生提高分析问题和解决问题的能力,全面提升编程能力。通用在线测评系统既可以作为学生程序设计竞赛的平台,也可以用于数据结构的实验教学。借助平台的开放性,将精心设计的基础实验和算法设计实验题改编为适合于在线测评系统的题目,学生可以以个人或团队的形式在任何可以访问该平台的地方随时完成问题的分析与求解,这样,学生提交的不再是简单的实验报告,而是具体任务的程序实现。通过分析代码,教师还可以发现问题,及时掌握学生对课堂知识的理解和掌握程度。同时,学生也能相互查看各自的实验完成情况,在无形中形成了一种相互竞争的状态,它可以激发学生继续努力,逐渐形成积极向上的自主学习氛围。
3.2 鼓励学生积极参与各种科研项目培养学生的科学素养
高校是创新型人才培养的摇篮,学生能参与各种科研项目,数据结构课程介绍的结构和算法还有改进和优化的余地。学生思维活跃,但由于缺乏正确的引导,很多有价值的想法都被埋没了,在教师的正确指导下,如果学生能够针对某个问题展开系统的研究,他们就可以实现对已掌握知识的巩固,又可以实现对知识运用能力的考查,同时,这种正确的指导还可以帮助学生拓展知识面、获取新知识、提高认知水平。
学校每年都资助大量学生科研项目,用于培养学生的科学探索精神和发散性思维,培养学生发现问题、分析问题和解决问题的能力。任课老师可以有计划、有目的的组织学生申报与课程知识相关的科研项目,这样既可以提高学生的学习兴趣,引导学生关注最新的科研成果,又可以让学生将所学的知识深入贯彻到具体研究领域,从而达到理论联系实际,学以致用,深刻领悟数据结构精髓的目的。
4 结语
作为计算机专业的核心课程,在数据结构的教学过程中,我们一定要把握课程的特殊性,在保证理论教学质量的前提下,充分重视实践教学环节,通过扎实的课内实验和丰富的课外实践实现学生知识向能力的转化,从而达到改善教学效果的基本目标。
(编辑:郭小