摘 要:本文从教学过程中出现的问题出发,针对女生智力结构以及数据结构课程较强的理论性、实践性、逻辑性的特点分析了问题出现的原因,指出了教师要在教学过程中结合女生的特点和实际情况,优化教学内容和方式,深入浅出,采用直观形象、形式多样的教学方法和手段,充分重视实践教学的重要性,同时在教学过程中给予学生适当的压力来激发学习的动力,让学生在问题求解的过程中体验学习的乐趣并获得心理上的成就感,进而激发学习热情,提高教学质量。
关键词:数据结构;教学方法;实践教学
1 探讨数据结构教学方法和手段的必要性和重要性
数据结构是计算机学科的一门综合性的专业基础课,也是计算机学科的核心课程,在整个学科知识体系中占据非常重要的地位。通过该课程的学习,不仅为后续课程打好理论基础,而且进一步提高数据抽象能力和程序设计能力。数据结构课程内容多、概念多、方法多、高度抽象、逻辑性强、技巧性强、实践性强,这些特点决定了教与学的难度较大,但其教学水平和效果又将直接影响后续课程的学习以及学生程序设计实践能力的提高。同时高校教学改革,课程学时压缩,这更增加了教学的难度。
另外我们授课的对象全是女生,研究表明:女性的智力与男性在总体上基本相同。只是在智力结构上有些差异:在思维方面,女生长于形象思维而弱于抽象思维;在感知方面,女性要比男生敏感、知觉速度也比男生快,而反应速度则比男生慢。男女的智力各有所长,各有所短,这就要求教师了解男女智力结构的差异,有针对性地给予女生适当的教育、指导和帮助,促使她们取长补短,不仅要注意知识的传授,更要注意方法的指导和能力的培养。wWW.133229.Com另外计算机系大约40%的学生是从我院文科专业调剂进来的,这就更需要教师有针对性地进行引导。
考虑到数据结构课程和女性思维的特点以及我院计算机系生源情况,为了保证和提高数据结构的教学水平和教学质量,我认为很有必要分析教学中存在的问题,并进一步探讨更适用于具体教学对象的教学方法和手段。
2 教与学的过程中存在的问题以及相应的解决措施
下面从教与学双方在课程教学过程中存在的问题出发,分析其原因并寻找解决这些问题的思路,以期提高教学水平、改善教学效果,达到该课程的教学目标。
常见问题有:
(1) 不是自己报考的第一志愿,首先心理上不喜欢,有畏惧感,觉得难学;
(2) 觉得算法理论太抽象,逻辑性太强,难理解,难掌握;
(3) 上课算法理论听得懂,上机实验实现算法时觉得无从下手,当编程解决实际问题就感觉更难了;
(4) 内容多,概念多,学习中难以把握整体内容,学完后不知道到底学了些什么;感觉在课堂上思路跟不上,难以消化;
(5) 不知道学习算法在实际中有什么用,逐渐失去了学习兴趣;
(6) 教材上的算法多,难以全部上机实现;
(7) 不重视上机实验,觉得能读懂算法和书面编写算法就可以了;等等。
中华女子学院重点教改立项 女性计算机应用型人才的实践教学研究(2006-2007)
对上述问题总结分析后,笔者觉得可以从以下几个方面来改善数据结构课程的教学方式和效果。
2.1 分析实际情况,有针对性地开展教学
(1) 教师要了解学生的前导课程“程序设计基础与c语言”的学习掌握情况。“程序设计基础与c语言”是数据结构的前导课程之一,学生对c语言程序设计的掌握程度直接关系到数据结构课程的课堂授课和上机实验的教学效果。“程序设计基础与c语言”是学生接触到的第一门编程语言,教与学的难度都很大,学生仅仅通过一学期的学习难以熟练掌握融会贯通并具有较高的编程能力。尤其,指针、结构体和函数等知识点是“程序设计基础与c语言”中的教学难点,学生普遍理解不深,难以在编程中灵活应用,但这些知识点在数据结构课程中频繁应用。对这些知识点的熟练掌握是在数据结构课程中理解理论算法和完成上机实验的重要保证。为此,我在教学中注意做到以下三点:
●与“程序设计基础与c语言”的授课教师做好教学的沟通工作,做好课程之间的衔接,将数据结构课程中经常用到的知识点重点讲授并加强上机实践。
●在讲数据结构算法之前复习剖析c语言中的指针、结构体和函数等知识点。具体形式可以是在课堂上以程序实例的形式对这些知识点进行复习,尤其指出学生难理解、容易混淆和犯错误的地方;布置涉及这些知识点的课外编程作业,通过作业批改发现学生存在的问题然后集体重点讲解;在教学中强调指针、结构体和函数等在数据结构课程中的重要性,让学生课外重点复习等等。
●灵活使用教材[1]。基于c语言的数据结构教材中大部分使用类c语言描述算法,而学生在上学期刚学完c语言程序设计而且实际编程经验少,难以应用自如,因此,类c语言与c语言程序之间的转换成为不少学生听课和上机实践的一道障碍,甚至在学习开始就打击了不少学生的学习信心和积极性。在教学中我注意采取措施来缩短学生实际情况和教材之间的差距:比如,前几周的授课和上机实验中,可以给出算法的完整源程序并详细讲解,这样为学生实现类c语言算法描述和c语言源程序的转换提供范例,降低学生进入数据结构课程的难度,避免学生因此产生畏难情绪而失去兴趣和信心;对于基本操作比较多的数据结构类型,在实践教学中可以给出部分源代码,让学生编写主要的操作函数,然后直接嵌入源代码中进行调试,用来降低难度并提高上机实验的效率;提醒学生充分利用教材随带的光盘资料,如程序源码和算法演示软件等。
(2) 考虑到女性思维的特点,可以充分利用多媒体技术,采取直观形象的教学方式。数据结构课程抽象、逻辑性强,而女性思维长于形象思维而弱于抽象思维,为此我尽量采取直观形象的教学。例如利用多媒体课件动态演示在单链表中插入、删除结点的过程等,演示形象生动加深了学生对算法的理解;尽量对照现实生活中的例子来引入知识点,例如通过在食堂就餐时取、放餐盘的例子引入对栈逻辑特点的讲解,用取款排队的例子引入对队列逻辑特点的讲解,激发学生对“计算机程序如何实现”的好奇心,调动学生的学习积极性。
(3) 考虑到不同学生的不同情况,采取分层次教学方式。分层次教学方式的目标是让每个学生都能在学习过程中获得尽量大的成就感,最大程度地调动学生学习的积极性。
2.2 优化教学内容与方式
(1) 教师要分析清楚数据结构的知识体系结构,把课程的整体框架提供给学生。课程内容主要包括线性表、树、图三大类数据结构和查找、排序两大类算法,其中栈和队列是线性表的两个特例,线性表是树的特例,树是图的特例,查找和排序是实施在三大类数据结构上的操作,由线性到非线性,由简单到复杂,这样有机联系地组成数据结构的整体框架。
(2) 贯穿三点一线原则。讲授过程中贯穿一条主线即从线性到非线性由简单到复杂的三大类数据结构,而每类数据结构包括逻辑结构、存储结构和基本操作的实现。
(3) 把握重点。把握数据结构的整体框架,贯穿三点一线原则讲授内容,同时要把握好重点,有选择有层次地教学。例如,线性表是最常用且最简单的一种数据结构,栈和队列是操作受限的线性表,树和图往往要做线性化处理,因此要把线性表作为重中之重的内容进行透彻的剖析。对于线性表的两种存储结构顺序表和单链表,把单链表作为重点和难点来讲授和上机实验,把单链表中的插入、删除、查找等基本操作作为重点。再如,二叉树的遍历操作作为重点来讲授和上机实验,而哈夫曼算法作为可选的上机实验内容。查找和排序算法中选择折半查找、二叉排序树查找、哈希查找、直接插入排序、冒泡排序、快速排序作为教学和实验的重点内容。
2.3 理论联系实际,激发学习兴趣
兴趣是最好的老师,教学过程中要注意采取多种手段激发学生的学习兴趣。
首先,良好的开端是成功的一半,为了不让学生从一开始就产生畏难情绪,上好第一堂课非常关键。第一堂课不能直接进入概念、术语和算法的学习,可以先介绍与数据结构相关的现实生活中的例子来激发学生的好奇心和学习兴趣,例如图书馆的书目检索系统、人机对弈问题等等。另外可结合考研、就业以及后续课程的学习等介绍数据结构课程的地位和作用。接着引入学生所熟悉的农夫过河问题(农夫、狼、羊、白菜),先让学生思考并给出答案,然后介绍用计算机程序解决该问题的思路和步骤,从而让学生对于数据结构课程学什么以及怎么用等有个概括的印象。
其次,在接下来的教学过程中注意理论联系实际,通过生活实例来引入数据结构及算法,注意介绍算法的背景知识和能解决的问题等。例如,通过现实中的排队现象引入队列的概念并介绍队列可以解决的问题如打印机作业排队问题,另外,充分利用多媒体教案和课件的直观形象以及动态性也可以提高学生的学习兴趣。
2.4 加强实践教学改革[2]
数据结构是一门实践性很强的课程,不仅要学习理论知识,更要注重上机实践。通过上机实践来验证理论内容并加深对各种算法的透彻理解,同时在实践中不断尝试,不断地积累经验,逐步养成良好的程序编写风格,提高程序调试能力以及解决实际应用问题的能力。结合教学的实际情况,我认为可以从以下几个方面来加强和改进实践教学。
(1) 开始两周内可以给出适当的上机实验题目复习c程序语言中的指针、结构体和函数等知识点,并根据上机实验的情况对数据结构中常用及易出错的地方进行集体重点讲解,为后面算法的上机实验打好编程语言基础。另外,为了打消学生的畏难情绪,数据结构算法的前两次上机实验时教师可以先给出完整的源程序,让学生在主函数中添加语句来体验数据结构的基本操作的执行,再逐步过渡到自己编写完整的源程序。
(2) 加强程序调试能力的教学和实验。通过一学期的编程语言学习,学生掌握了基本知识点,但是程序调试能力还有待于提高。程序调试能力不强是严重影响学生上机实验效果的,也很大程度上打击学生实验积极性和学习兴趣的一个因素。但调试程序实践性很强,而刚学完c语言程序设计的学生面对错误提示时往往不知道发生了什么错误及如何改正。针对这种情况可以采取以下措施来逐步培养和提高学生的程序调试能力:
●整理历届学生在上机实验过程中易出现的错误,给出错误信息与错误原因的对应关系,让学生在上机的过程中对照查找自己程序中的错误。
●提醒学生养成良好的习惯,每次数据结构上机实验调试程序时要记录英文错误提示信息和解决该错误的方法,不断积累程序调试经验,避免再犯同样的错误,并建议学生通过网络共享各自的调试经验。
●要加强实验准备、过程和结果的教学管理。要求学生在上机实验前必须书面编好源程序并且进行了初步的语法和逻辑检查,上机实验课上集中精力去调试程序,才能保证充分利用上机实验课时间、教师辅导的机会和与同学交流的机会,最大程度上发挥实验课的作用。教师对实验准备、过程和结果的评价都要在实验成绩中体现出来。
(3) 培养良好的程序编写习惯[3]
数据结构课程的学习过程也是复杂程序设计的训练过程,程序除了能调试通过外,还要求学生编写的程序结构清楚和正确易读,符合软件工程的规范。良好的编程习惯需要在不断的实践中逐渐养成,而且很大程度上影响学生的上机实验效果。因此,教师可以在以下几个方面注意引导学生培养良好的编程风格:
●良好的代码书写格式。采用良好的书写格式使代码可读性强,便于调试和交流,但一些学生觉得麻烦、没必要,这需要教师在教学和实践过程中强调和引导学生认识到书写格式的重要性,并逐步形成良好的代码格式书写习惯。
●良好的注释习惯。注释是程序的一个重要组成部分,它可以使代码更容易理解。而很多学生认为没有必要写注释或者程序调试完后再象征性地补加注释,教师要强调注释的重要性,引导学生逐步养成良好的注释习惯。
●标识符合理命名。教师要强调标识符命名规范的重要性,标识符命名要清晰、明了,有明确含义。
●重视实验报告的书写。实验报告除了实验目的、实验内容、实验步骤和算法分析等常规内容外,需要重视实验中出现的问题、解决的办法、实验改进的想法这三项内容的书写,这样可以培养学生实验后总结积累经验的习惯,提高学生分析、改进算法的能力。
(4) 在实践教学中要注意进行分层次的个性化教学。从不同学生的实际专业水平、基础出发,来设计不同难度的实验题目,给出不同的实验条件和要求,尽量让所有学生通过自己的努力获得实验的成功并掌握基本知识,在解决问题的过程中体验学习的乐趣和成就感,从而最大程度地提高学生实验的积极性。例如,对堆栈可以设计基本操作实验(建栈、出栈、入栈、销毁栈等)和后缀表达式求值实验,学生可以根据自己的实际情况来选择完成。另外对于难度小的实验要求每个学生独立完成,而对实验难度稍大的允许以2到3人的小组形式完成或给出部分代码或提示。在实践教学中对不同水平的学生给予不同的辅导方式,例如,对水平偏低的学生需要在实验课中给予重点面对面的辅导,而对于水平较高的学生可以在网络教学系统中重点辅导。另外为了保证上机实验课的顺利进行,在条件允许的情况下应多安排1到2名辅导老师,或者选择大三、大四学生中学习成绩优秀、实践能力强的来承担一部分辅导任务,不仅弥补了辅导教师少的不足,而且促使这些学生更深入地进行学习。
(5) 充分利用网络辅助教学。通过使用清华大学的数据结构网络练习系统,学生可以课外上网编写算法并编译、提交,教师可以在网上查看学生的作业情况并随时回复、辅导学生,完全不受时空限制。通过教学ftp和博客等网络方式师生可以互动交流,资料共享等。网络可以拓展学生学习的空间、时间和方式,有助于提高教学效果。
(6) 改革考核方式,引导学生加强实践。数据结构是一门理论和实践性都很强的课程,理论指导实践,也只有通过实践才能加深对理论的理解和掌握。考核方式和内容引导学生的学习方向,因此要提高数据结构的教学质量,把好考核这一关也非常重要。数据结构的考核可以结合使用多种考核方式,考核成绩的组成可以包括平时成绩、期末笔试成绩、期末上机考试成绩以及课程设计成绩,其中平时成绩要综合考虑实验准备、过程和结果情况,以及上课回答或提出问题等情况,课程设计也可以考虑采取小组形式完成并结合答辩情况给出成绩。
(7) 施加适当的压力督促学生积极配合教学并体验学习,进而获得成就感,提高学习兴趣[4]。
教师的教学过程和学生的学习过程是两个既有联系又有区别的过程。从学生的学习过程来说,学生是受教育的主体,是学好的内因。教育者是客体,是学生学好的外因。内因是事物发展的根本原因,外因只有通过内因起作用。教育“以爱动其心,以严导其行”,启发、诱导、影响学生内在的积极性、主动性,但这种启发、诱导能不能发生作用归根到底还决定于学生内在矛盾因素。
因此,教师除了从自身教学过程的角度出发努力采取各种措施来提高学生学习的兴趣和热情外,还需要从学生学习过程的角度出发来分析解决问题。学习的兴趣和积极性的培养效果最终取决于学生这一内因,必须采取措施督促和保证学生最大程度地投入到学习中,在学习过程中真正体验到学习的乐趣,进而激发内因的变化。比如,在考核方式中加大平时上机实验和课程设计部分的成绩比重,并采取严格的考核方式(比如课程设计逐人答辩形式等) “以严导其行”。压力产生动力,学生不管兴趣是否浓厚都需要达到基本的要求,在完成任务的过程中学生可以实实在在地体验学习,才有可能逐步提高学习的兴趣和积极性。
另外针对我院计算机系生源的实际情况,也需要全体教职工努力做好部分学生的思想工作:提醒学生不要首先在心理上不停地暗示“不喜欢”和抵触专业学习;明确自己四年的任务“我选择,我喜欢,至少我要努力尝试喜欢”;鼓励学生勇敢面对自己的选择并尽自己最大的努力学好;从学生就业、考研和未来发展的角度帮学生分析利害关系,督促学生进一步端正学习态度等。
3 结论
数据结构课程在整个计算机学科的知识体系中具有非常重要的地位和作用,而数据结构的理论性、实践性、逻辑性都很强。教师只有在教学过程中结合学生的实际情况,优化教学内容和方式,采用直观形象、形式多样的教学方法和手段,充分重视实践教学的重要性,理论联系实际充分调动学生学习的积极性,使学生较好地掌握各种数据结构和算法并提高分析解决实际问题的能力,切实提高教学的质量,才能发挥数据结构在计算机学科知识体系中应有的作用。
参考文献:
[1] 严蔚敏,吴伟民. 数据结构(c语言版)[m]. 北京:清华大学出版社,1997.
[2] 顾翔. 数据结构实践教学探讨[j]. 信息技术,2005,(30):110-112.
[3] 蒋宗礼. 实施创新教育 培养创新人才[j]. 计算机教育,2008,(3).