绪论:写作既是个人情感的抒发,也是对学术真理的探索,欢迎阅读由发表云整理的11篇数据结构实验报告范文,希望它们能为您的写作提供参考和启发。
随着计算机处理的数据量越来越大,数据之间的关系也越来越复杂。“数据结构”这门课介绍最常用的数据结构,阐明数据结构的内在逻辑关系,讨论它们在计算机中的存储表示,并结合各种典型应用,说明它们在进行各种运算时的动态性质及实际的执行算法。“数据结构”的研究不仅涉及到计算机硬件,还和计算机软件密切相关。计算机科学各领域及有关的应用软件都要用到数据结构[1]。
1实验教学在“数据结构”教学中的地位
“数据结构”的前导课是高等数学、高级语言程序设计、离散数学;它又是操作系统、编译原理、数据库原理、算法分析、人工智能、图像处理等专业课程的前导课,具有承上启下的作用。在计算机硕士研究生入学考试中都设有这门课,并且分值最高,所以该课被我校选入第一批重点建设课。它又是一门实验性很强的课程,CC2001对该课程及相关内容和相关度进行了明确的描述。“数据结构”课程要让学生掌握计算机处理非数值运算问题时的一般原理和方法,熟悉解决各种问题的基本模型,培养学生运用已有的算法语言编写准确、清晰程序的能力。另外,通过本课程理论体系的学习,学生在设计软件系统时应学会合理选择数据结构,并能对所选模型进行初步评价,学生通过学习,能够设计一个“好”的程序[2]。
实验是学生检验所学理论知识是否牢固,并探索和运用知识的过程。通过实验,学生不仅可以进一步理解数据结构的基本知识,通过对不同存储结构和相应算法的对比及上机编程练习,提高根据求解问题性质选择合理的数据结构并控制求解算法的时间、空间复杂度的能力,而且能进一步提高软件设计和编程水平,提高学习的积极性和主动性,形成科学的思维方法和严谨的科学态度[3-4],因此“数据结构”的实验十分重要。
2 “数据结构”实验教学的改革和实践
2.1更新教材和实验报告
要推进实验教学的改革,首先要改革现有教材,应重视学生实验能力的培养,体现以学科为基础的学科特色。在“数据结构”教学中,重点是让学生通过实验环节学习数据结构,让学生明白哪些知识是基本点,哪些是难点和重点,明确学习目的和作用。在这样的指导思想下,我们在2005年组织课题组成员,按照CC2001的要求,结合我国计算机的发展和2009年考研大纲,编写了C++描述的《数据结构与算法》教材,于2008年秋季开始使用,效果良好。每过一学期,我们都根据当前情况和学生意见及时更新实验报告。比如最初的实验报告有一道字符串的实验题,随着计算机的发展,不论是C++语言还是Java语言,已经有现成的字符串库函数,学生只要会使用库函数即可,不需自己编写,而且考研大纲也不作要求,所以我们及时更新了教学内容和实验内容,并在实验题目中增加了ACM大赛的实验题,为学生参加程序设计大赛打下良好的基础。
2.2设计合理的实验题目
实验报告是“数据结构”实验环节的重要内容,题目的选取要符合学生的实际水平,而且要有跨度,否则会白白浪费学习时间。2001年,我们调研了清华、北大等各院校的教学改革情况,并征求了毕业生和已学过这门课的在校生意见,发现我们的教学没有从学生的实际情况出发,很难调动学生的学习兴趣。为此,我们从2002年开始编写实验报告,把实验题分成三个层次,有验证(改进)型、综合型和设计型题目。验证型题目是对教科书上典型算法的实现,也有验证改进型的,即是对书上算法稍加修改,这就要求学生必须事先看懂书上的算法才能修改;综合型题目是将不同的实验进行组合,综合解决较复杂的问题,要求学生利用各种知识解决新的问题;设计型题目是教师提出实验目的和要求,学生自行设计,完成实验内容,要求学生的基础比较好,一般安排在课外进行,极大丰富了第二课堂。学生可根据自己的能力选择不同层次的实验题目,大大提高了学习积极性。
我们还鼓励学生对教材中的遗留问题进行自行设计,也鼓励学生根据自己的爱好做一些小的系统实验。这不但使学生的基本知识和实验技能得到巩固,还可以提高学生的创新能力。实验报告的每道实验题都有明确的“对问题的描述”、“实验目的”、“实验内容及要求”、“测试数据”和“思考”,学生每做一道题,都明白实验的目的和要求,完成后,教师还要根据“思考”题目及时向学生提出问题,学生可以自行设计实验方法来解决,教师也可以引导学生设计疑问,主动将教材上的验证性实验转变为设计性实验,教会他们举一反三,促进学生的思维向新和深的层次发展,加深他们对所学知识的理解。
实验题目还要新颖、有趣。比如我们的实验报告有猴子选大王、迷宫等问题,学生可以使用动态规划、回溯法、分支限界法等算法,将几个算法的实际执行时间进行比较,从实验结果证明理论分析的正确性。
2.3建立“以老带新,青年为主”的教学梯队
我们的教学梯队平均年龄35岁,教授、副教授占40%,讲师占40%,助教占20%。青年教师中有硕士和博士研究生,他们接受新鲜事物快,精力充沛且动手能力强,但缺乏教学经验,所以我们要求青年教师至少带两年的实验辅导和习题课,在第一次主讲之前至少要听有经验教师一学期的课,而有经验的教师还要不断试听青年教师的课,指出不足之处,帮助他们尽快提高教学水平。经过几年的锻炼,青年教师陆续登上讲台,共有3人在内蒙古大学“青年教学技艺大赛”中获得了1个一等奖和2个二等奖,其中1人获得高等院校第四届青年教师课题教学技能大赛理科组一等奖,成为这门课的骨干教师。
2.4加强上机辅导和课后辅导
编程是高强度的脑力劳动,不是听会的,也不是看会的,而是自己练会的。刚开始,大部分学生上机前没有编好程序,而是上机时现编程序,白白浪费宝贵的上机时间;有些教师辅导时发现学生的程序有错,就动手帮助调试,而不是给学生指出错误的原因,让学生明白后自己修改。结果虽然程序调试好了,但学生不知道是什么原因,以后再有错误时就依赖教师修改,辅导教师很累,而教学效果并不好,学生和教师都有怨言。针对这些情况,我们要求每个学生上机之前就把程序编好,上机调试过程中有问题要及时问老师,最大限度地利用上机时间;教师辅导时既要认真负责,又要讲究方式方法,学生有问题,教师要指出错误所在,让学生明白错误的原因,然后让学生自己改。这样既可以提高学生的编程能力,又使每个学生的问题都能及时解决。
每做一道实验题前,教师都会大致解释题目的含义、用到的知识模块,有的还要引导学生查阅一些参考资料。每当一个模块结束后(以一个逻辑结构为一个模块),我们都要把几个班的学生组织在一起(平时上课是小班),对已经验收过的较好程序和普遍存在的问题进行统一讲解和总结。通过总结,学生加深对实验的理解,知其然,也知其所以然。通过融会贯通已完成的各部分实验,自然引出下一模块的实验。
由于现在学生都没有固定教室,教师没有辅导的固定地点,我们每周一至周四下午安排一名教师在办公室答疑,哪个班的学生都可以到指定办公室问问题,值班教师在办公室的机器上修改学生的程序,这样比在教室里单纯讲解理论的效果要好得多。
2.5加大对实验环节的考核力度
学计算机的,不动手是学不会编程的,学不会编程也就等于没有学会计算机,所以要提高学生的编程能力,就要加大对学生实验环节的考核力度。在“数据结构”课程考核中,平时成绩、实验成绩和理论考试成绩比例为1∶4∶5。为了杜绝考前突击复习的现象,我们在第一节课就讲清要求,让学生从上课的第一天起就重视这门课,真正掌握这门课。在实验环节的考核中,验证型题目一般要求1周内完成,综合型题目一般要求2~3周内完成,对于综合型题目,学生先按2~3人分成一组,每人完成一个模块,通过接口的调用组成一个完整的程序,最后随机抽取小组中的一名代表讲解编程的设计思路,演示程序执行情况,辅导教师根据完成情况给出一个代表小组的分数。学生要在规定的时间请辅导教师验收实验题,过期不验收,视为自动放弃,本次实验题没有成绩。
经过七年实验教学的改革与实践,我们取得了明显效果。2007年6月,在哈尔滨工业大学举行的“东软杯”ACM/ICPC中国•东北地区首届大学生程序设计竞赛中,我院选派了3支代表队,结果分获一、二、三等奖;2007年11月,在计算机学会、高等学校计算机教育专业委员会主办,内蒙古大学承办的第二届ACM/ICPC
大学生程序设计竞赛中,我院分获团体、一、二、三等奖;2008年,在ACM程序设计相关比赛中,我院获自治区级一等奖、2个二等奖,获东北赛区1个三等奖、2个优秀奖。
实践证明,这样教学改革不仅能激发学生学习的积极性,还能锻炼他们的团队精神,让他们学会软件开发的整个过程,为他们编程能力的提高、毕业论文设计和走向工作岗位打下良好基础。
3结束语
从2009年开始,计算机硕士研究生入学考试采取全国统考的方式,“数据结构”是必考科目,而且占分值最大,这更能说明这门课在计算机专业中的重要性。这些年来,我们一直致力于这门课的建设,从教材选用、课程体系建设、师资队伍、课程教学、实验教学等各个环节进行了不断的实践和探索[5]。我们相信,通过加大对“数据结构”教学,特别是实验环节的改革和实践,一定能进一步调动起学生学习这门课的积极性,激励他们热爱计算机,热爱科学,成为IT业的优秀人才。
参考文献:
[1] 殷人昆. 数据结构[M]. 北京:清华大学出版社,2007.
[2] 王昭荣,曾卫东,鲁兴萌. 改革实验教学及管理模式,培养创新型本科人才[J]. 高等理科教育,2007(1):63-65.
[3] 汪沁. 基于“数据结构”实验的探讨和研究[J]. 中国教育信息化,2007(4):17-19.
[4] 徐大华. 程序设计语言教学方法探讨[J]. 高等理科教育,2007(1):36-38.
[5] 赵艳红,邵定宏.“数据结构”教学的探索与研究[J]. 计算机教育,2008(9):131-132.
Reform and Practice in Data Structure Course’s Experimental Aspects
ZHAO Yu-lan
中图分类号:G642文献标识码:A文章编号:1009-3044(2007)12-21712-01
Research on the Practice Teaching of Data Structure
CHEN Lan, GU Xiang
(School of Computer Science and Technology, Nantong University, Nantong 226019, China)
Abstract: The data structure is one of the most important core courses in computer science and technology. It is also a difficult course for a student to study. Aimed at the characteristics of data structure, such as strong logic, higher degree abstract etc., problems in practice teaching are set out. And the corresponding solved scheme is also discussed.
Key words: Data structure; Practice teaching; Teaching Method
1 引言
数据结构作为计算机学科中一门核心专业课程,综合了数学、计算机程序设计、软件开发等课程的众多知识,该课程为理解、应用和开发计算机应用程序提供了技术和方法支持,是计算机软件开发的基础。实践教学对于数据结构这门课程,有着十分突出的意义和价值。只有在实践的过程中,才能使学生的编程能力得到切实锻炼,让他们在不断的练习与尝试中,把理论运用于实践,设计编写出结构清晰明了、可读性强、高质量、高效率的计算机程序。最终使学生在用计算机解决实际问题时能有效地组织、存储和处理数据,为后续课程打下良好的理论基础和实践基础。然而,在实际教学中,学生对该门课程的掌握并不理想,实践环节不到位是其中一个重要的原因。
2 实践教学中的问题
分析起来,在课程实践教学中的问题可以归纳为教材、教师教学方法和学生这三个方面。
2.1 教材方面的问题
数据结构实践教学的教材较少,现有的一些实验教材所设计选取的实验题目难度较大,不适合学生使用。因为对于大多数刚刚学过一门程序设计语言的学生来说,将教材中用伪码书写的算法转换成完整无错的可以运行的程序代码,都是一件相当困难的事情,更不用说自己设计数据结构和算法去解决实际问题了。因此上机实验的失败便比比皆是,几次实验课下来,学生就会对这门课程的学习失去了兴趣和信心,从而严重影响了教学效果。
2.2 教师的教学方法
一些教师在教学过程中,由于各种主客观原因,往往会高估学生的高级语言程序设计的基础。在大多数高等学校的教学计划中,学生一般是在学完C语言(C++语言)后的学期里接着学习数据结构的,他们的语言基础并不牢靠。倘若仅按照教材而不顾及学生的现实水平,只会使学生越学越枯燥。
另外由于高校扩招,学生规模很大,一个教师同时上四个班(120人左右)的课是很常见的事情,这也使得实验课中教师指导作用弱化,学生遇到问题不能及时得到解决。实践教学的效果便也受到直接影响。
2.3 学生方面的问题
学生在学习数据结构时,先修课程――程序设计语言的基础相对薄弱。对C(C++)语言中的难点,如结构体(类)、指针、函数(方法)等等内容,理解不透彻,掌握不充分。而这些内容恰恰是数据结构的基础。
其次,学生的编程能力与经验不足。多数学生仅仅学习过一门程序设计语言,并且也没有很多的实际编写程序的机会。他们没有能够很好的理解、掌握程序设计的方法和理论。
再有,学习上的困难导致学习热情的缺乏。数据结构这门课程理论性强,内容枯燥,不大好学。学生学了不知道有什么用、怎么用。这样,学习时间越久,越觉得辛苦,逐渐磨灭了学习兴趣。
3 数据结构实践教学题目的设计要点
针对上面所提出的问题,在现有条件下,只有通过精心设计、选取实践教学题目,编写能够针对所教学生特点、适合他们自学、使用的实验指导讲义,才能在一定程度上弥补教材、教师教学和学生学习三个方面的缺陷,提高数据结构的教学效果。
我们通过实际教学的不断尝试,逐步总结了在设计实践教学题目时应该注意的几个要点,简要说明如下:
3.1 选择典型算法,做到以点带面
在选择实践教学题目时,应该尽量选择一些典型算法。这些典型算法应该具有一定的代表性,能够系统的体现某个数据结构的基本特征;难度应该适中,能被绝大多数学生理解和掌握;还要有一定的综合性,具备一定的理论深度,通过算法的实现,不仅能帮助学生更好的学习和掌握数据结构,还能提高学生编写程序的水平。表1中,给出了对应于某种数据结构的一些可以选用的典型算法。
表1 数据结构课程中的典型算法
3.2 注重示例程序,起好示范作用
把实验中每种数据结构的第一个算法的源程序提供给学生,使得他们能对该种数据结构的实现有更好的理解,同时还有一个可以参考模仿的范本。实践表明,这样做能够极大地提高程序的成功率,增强学生的学习信心,提高了实验效率。
3.3 与现实相结合,提高学生学习兴趣
在设计实验题目时,应力求与相关课程、实际生活相联系。把理论和实际联系起来,使得实验题目生动、接近学习和生活实际,学生容易接受和理解,容易调动学习积极性。
比如消防武警选址实例:给定5个县之间的交通网,现要在5个县中选择一个县建一个消防武警中队,使得离消防队最远的县到消防队之间的路程最短。问这个消防队应建在哪个县?实际上,这个问题就是从5个县中选出一个县,使得它到其他4个县的最短距离的最大值最小,而问题的关键就是顶点与顶点之间的最短路径问题。解决该问题的经典算法是弗洛伊德算法。
3.4 与学生实际水平相结合,设计不同层次的实验题目
在设计实验的过程之中,需要考虑学生的专业水平以及编程功底。由于不同的人对新知识的接受能力和认知能力存在差异,所以不可能用一两个实验就要学生们在对知识的了解程度上达到相同的层次。一个有效的办法是,在一个实验题目中,提出不同层次的任务要求,难度由低到高。这样可以充分的调动所有同学的积极性,使得不同层次的学生可以在各自的层次上进行思考,并获得收获,提高学生的学习兴趣并增强自己对学习这门课程的信心。
例如在堆栈这一实验中,按照难易程度从低到高,可以设计出堆栈的实现(构建堆栈、入栈操作、出栈操作)、使用堆栈模拟停车场、使用堆栈模拟铁路调度站、算术表达式求值等四个难度不同的题目,供学生选用。
3.5 设计综合实验(课程设计),提高学生对所学知识的灵活掌握程度
综合实验的设计是将书本中多个知识点整合在一个实验中,是对学生能力水平上的一种较高层次上的要求。学生在课程设计中,综合的运用自己所学过的基础知识,使用软件工程的方法指导和要求整个实验过程。在整个过程中,学生可以以两到三个人为一个开发小组共同进行实验。使得学生在相互学习相互促进中进一步掌握数据结构的应用,提高学生分析问题,组织数据,组织编程解决实际问题的能力。并在次过程中可以提高团队意思,培养协作精神。当然,在题目的选取上,也可以设计难度层次不同的实验,以适合不同需要的小组或个人。例如迷宫问题,教学计划,校园导游咨询等。
4 数据结构实践教学的实施
实践教学题目设计完成以后,教学的组织实施是下一个重要的环节。在实施的各个阶段,都必须向学生提出明确的要求,并进行必要的检查。否则,依然会达不到预期的效果。
4.1 实验预习
学生在上机实验时临时现编代码是常见的事情。为此,在预习阶段,就应该要求学生根据自己的情况,选择一个适合的题目,并对完成此题目的算法进行较为透彻的研究:设计出算法所必需的数据结构,给出具体的函数声明(如果是C++,则应给出类的定义)及函数实现流程。对于掌握得较差的学生,还应要求他们事先编写好源程序。所有这些内容构成预习报告。
在实验开始时,教师应该对学生的预习情况进行检查,对于没有很好完成实验预习的学生,要直接取消其实验资格,实验成绩记零。课程开始时,学生可能会不适应,但当养成习惯以后,他们就会深刻体会到预习工作的重要。
为了更好的调动学生的积极性,作为鼓励,前次实验完成得较好的学生,可以不作预习检查。
4.2 实验实施
教师在实验进行中,所扮演的角色不应当是程序调试者,而应当是引导者。当学生在代码执行中发生错误而向教师求助时,教师只需指出可能导致此问题的原因即可,更多的工作应该留给学生自己去完成。这样一方面可以节约教师的时间,从而能为更多的学生解决问题;另一方面也可以解除学生的依赖思想,锻炼他们的代码调试能力。
教师在实验进行中的另一项重要工作,是观察并提示学生的代码书写是否规范。从某种意义上说,代码的规范比编程技巧更为重要。在课程前期,这将是教师在指导实验时工作量最大的工作。
4.3 实验报告
实验完成后,学生必须撰写实验报告,实验报告应附预习报告。实验报告一般包含的内容是[放参考文献]:实验题目、实验目的、实验任务和要求、实验步骤(源程序)、实验总结。
特别要强调的是实验总结,必须讨论在实验中遇到的问题以及是如何解决的,即使是语法错误也应该报告。这样可以促使学生对错误不断反思,从而逐步提高编程能力。可以明确告诉学生,这部分将是成绩评定时最重要的考察因素。
4.4 成绩评定
成绩评定以鼓励为主,只要学生确实付出了努力(这从实验报告的实验总结中可以看出),那就可以适当给以高分。另一个要考虑的因素是学生所选题目的难度,但这不应该是主要的。
5 结束语
文中所讨论的是我们在数据结构课程实践教学中的一些成功经验的总结。实践表明,这些经验对于提高实践教学的效果是有益的,这也进一步促进了课程的理论教学。当然,这些经验还是初步的和粗浅的,还需要在实际教学中作进一步的研究。
参考文献:
[1] 严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,1997.
[2] 陈宇文. 注重源程序在《数据结构》课程中的重要性[J]. 高教论坛,2004.(1):73-75.
关键词:研究型教学;实验教学;智力能力培养;教学方法;数据结构
社会的发展对当前我国高等教育提出了具体的要求,所培养的学生必须具备全面发展的素质,包括掌握科学的学习方法和具有会学习的本领,具备积极创新的能力和生动活泼的特征。这一特征,使得高校教育改革应该不断地向更高、更深刻、更全面的层次上发展。教学改革是教育改革中最为重要的一部分。如何创造良好的学习环境和条件,革新教学手段和方法,全方位地培养学生的智力和能力,关键是要转变教育观念,改革人才培养模式,改进教师的教学方式,增强学生学生的学习的主观能动性,积极采取启发式、研讨式等研究型教学方式。
但是在高等教育过程中对研究型教学的认识程度还不够高,开展的深度与广度都还不够,从而成为制约教学质量进一步提高的一个瓶颈而引起了各高校的普遍关注。本文结合我们开展研究型教学的实践,对《数据结构》课程的实验教学改革进行了一定的尝试,取得了初步的教学效果。
一、研究型课程教学的基本理念
国内研究型教学的实践,一方面是对国外先进教育方式的借鉴,另一方面也是对国内实施已久的高校学习与科技兴趣小组活动乃至启发式、讨论式、发现法教学方式等经验的系统提升。
1、赫尔巴特“主知主义”课程理论。赫尔巴特的课程理论被称为“主知主义”,它是以知识作用为本位的课程论,同时还明确主张学生从总体上对教师保持被动状态,强调教师的权威意志和主导责任。因而,人们把赫尔巴特视为“教师权威论”或“教师中心论”的代表人物。
2、杜威的“实用主义”课程。杜威主张教育要“以学生为中心”,要求教育的一切措施围绕着学生来组织,以促进学生的个性发展。他认为学生的学习不应是被动接受知识的过程,而类似科学家研究发现知识的主动探究过程。杜威的教育思想深刻地影响了20世纪初至当代的全部教学论的发展。教育家陶行知先生是杜威的学生,他将社威的教育思想引入我国,并在国内进行了卓有成效的教学实践,创立了“知行统一”的课程理论,至今对我国教育界仍产生着深刻影响。
3、研究型课程理念。研究型课程教学的基本理念是:对历史上传统的教育学派的“主知主义”、“教师中心论”和进步教育学派的“实用主义”、“学生中心论”中合理的部分加以有机的整合,扬弃其狭隘、刻板僵化的部分,注重发挥教师的主导责任和学生的主体作用。它以促进学生的个性发展为宗旨,以改变学生单纯地、被动地接受知识传授的学习方式为着眼点,构建一种开放的学习环境,为学生提供一个多渠道获取知识,理解自然、个人、社会等问题,并将学到的知识综合应用于实践的机会。它在帮助学生进行接受式间接学习的同时,形成一种对知识的主动式直接探索,以提高其解决实际问题的能力的研究型学习形式。
二、研究型课程教学的指导思想和教学原则
《数据结构》实验教学是一种验证型的教学模式,将课堂上所学的理论知识与计算机上机实践相结合,通过利用高级语言环境对书本上的算法进行验证,从而达到巩固理论知识的目的。而研究型实验教学的指导思想,不仅仅在于验证书本知识和巩固理论知识,而是更加重视理论知识的综合应用,强调整个过程的参与和学习,发挥学生学习的主动性,激发学生的学习兴趣和创造力,培养学生的团队精神和协作意识。因此,全面培养学生的智力和能力,是研究型实验教学的指导思想。
在上述教学思想指导下,在实验教学过程中必须坚持的教学原则是:
1、教师指导与学生动手并重。虽然有效快捷的学习离不开教师的指导,但指导只是一种手段。在现代教学过程中,教师的指导旨在教会学生学会学习,这不仅是今后终身教育的要求,而且只有学会学习,掌握了科学的学习方法,学习主体才会真正具有一种参与到教学过程中去的能力。
2、面向结果的教学和面向过程的教学并重。面向结果的教学是指教师在教学活动中以使学生获得令人满意的结论作为教学的直接意义,它是传统教学所强调的教学形式。面向过程的教学则是教师在教学活动中重视引导学生对知识形成过程的理解与实践,并在理解和实践中仔细体验获得这一知识的基础和条件,以及它与其他知识的相互关系等。从主动学习的角度看,面向过程的教学会给学生主体带来一种更高的价值。
3、一般能力的培养与创造品质的形成并重。学生能力的培养已成为现代教育的重心,然而在促进学生的一般能力有较全面提高的同时,教师应该对学生的创造能力的发展给予特别关注,因为创造品质已成为现代人素质结构中最重要的组成部分。
4、理论学习与实践活动并重。理论来源于实践,反过来又指导实践。只有坚持理论联系实际,才能有所发现,有所创造。
5、接受式学习与探究式学习并重。接受式学习是一种被动的学习过程,而探究式学习则是一种主动的学习过程,只有发挥了学生主体的积极性,才能使得学习收到事半功倍的效果。近年来,我们对《数据结构》实验教学的研究型教学模式的探究,正是坚持了以上这些教学原则。
三、研究型《数据结构》实验教学环节的设计与实施
研究型教学依据其内容的不同可分为认知理解类和实践应用类。研究型《数据结构》实验教学属于实践应用类。主要凭借算法构造思维方式,从具体操作规范入手,通过操作过程的构造实施,解决特定问题,理解、习惯、掌握算法思维方法是一个构造性、研究型方式的训练过程,其核心内容就是通过学习结构技术的过程,培养学生算法设计能力以及创造性思维,培养举一反三、触类旁通的能力,以达到提高学生应用知识解决复杂问题的素质能力和的目标。计算机的程序设计是一项创造性的智力劳动,让学生深刻掌握这一套算法构造思维方法,是实践环节所要解决的核心问题。因此,我们注重为学生创设智力发展的环境与条件,设置智力因素和非智力因素相结合的条件。我们根据研究型《数据结构》实验教学的指导思想和教学原则,考虑到培养计划的安排,我们对每一次实验课都进行了精心地策划,并要求写出实验报告。主要分为确立问题阶段、实践体验阶段和成果交流阶段等三个阶段来进行。这三个阶段并不截然分开,而是相互交叉推进的。实施流程通常为:“引出问题,建立假设”——“研讨探究,验证假设”——“得出结论,切磋交流”——“归纳总结,形成评价”。
⑴确立问题阶段。教师介绍上机环境及算法在相应数据结构中的地位和作用,包括使用的编程环境,在验证算法过程中需要注意的问题,讲解如何查找相关资料,并展示历届学生的实验报告样本。学生3—4人自由组合成立研究课题小组,选出组长;通过查找相关资料,扩展相关算法,提出研究课题,写出实施计划。在此基础上,教师组织各小组进行答辩,组长对研究课题的目的、背景资料、理论依据、技术方法、计划和目标等进行解答,并回答教师提出的有关问题。
⑵实践体验阶段。教师根据实验室条件、答辩情况和课题难易程度等,有重点地抽查6—7组作为本次实验教学课的指导对象,并强调在上机实践过程中的注意事项与具体要求,讲解实验报告格式和撰写方法,并要求各组人员进行具体分工。学生利用4节课的时间上机实践,并记录编程调试过程中的相关数据和出错信息。
⑶成果交流阶段。实验完毕得出结果后进行资料整理,并开始撰写实验报告。教师对各组的实验报告进行初审,提出具体修改意见。各组学生对实验报告认真修改和补充,做到报告格式化、标准化,并正式提交给教师再次审查,教师根据情况评定成绩,作为期末成绩总评的参考依据,并在课堂上组织学生交流实验感受及取得的成果。
通过实验实践内容的训练,突出构造性、研究型思维训练的特征,提高了学生组织数据与进行编写大型程序能力;更好地理解和掌握了算法设计所需的技术,为整个专业学习打下了良好的基础。学生通过完成《数据结构》实验课程的设计任务,不仅把设计优良算法与掌握面向对象的编程技巧结合起来,而且能培养综合运用所学知识来独立解决实际问题的能力,给学生发展个性化以更加广阔的天地。实验教学的改革与实践结果证明,贯穿于实验教学环节的研究型实验教学,使得理论教学与实验教学有机的整合,收到了良好的教学效果。
四、研究型《数据结构》实验教学在人才培养过程中的作用
1、研究型《数据结构》实验教学有利于学生的智力开发和能力培养。
教学的目的不仅要使学生获得知识,而且更要使学生获得智力的发展,要使学生掌握点石成金的方法。能力与智力是两个相对独立的概念,二者有区别,又有密切联系。二者之间不一定成正比例关系。智力属于认识活动的范畴,而能力属于实际活动的范畴。智力是保证人们有效地认识客观事物的较稳定的心理特征的综合,能力是保证人们成功地进行实际活动的较稳固的心理特征的综合。智力结构由注意力、观察力、记忆力、想象力和思维力5部分组成,能力结构由组织能力、定向能力、适应能力、操作能力和创新能力5部分组成。研究型《数据结构》实验教学是全过程的教学,从给定的算法到算法扩展、从选题到实验报告及其答辩的所有过程中,几乎都是以学生为主体开展活动,教师仅仅负责组织和教学引导。特别是在科学研究方法和科技文献的查找、科技报告的写作训练等方面,让他们在低年级就能得到很好地锻炼,为今后写好毕业论文打下了坚实的基础。所以,这种新型的教学方式对于全面培养学生的智力和能力是十分有利的。
2、研究型《数据结构》实验教学可激发学生的求知欲和创造力。
教师要善于采取相应的改革措施,创设智力发展的环境与条件,用生动的实践活动来巩固和强化学生的求知欲,激发学生的好奇心、兴趣、想象力和创造力。因为兴趣是推动学生求知欲的强大内在动力,兴趣往往是创造的先导,同时想象在人的智力活动中也占有极重要的地位。由于研究型《数据结构》实验教学与中小型软件开发结合起来,使学生们很感兴趣。他们本来对软件开发充满了好奇与想象,在学习了《数据结构》以后,有了一定的算法理论基础,可以根据自己的兴趣,充分发挥想象力和创造力,对软件开发进行有益的尝试。
3、研究型《数据结构》实验教学有利于培养学生动手动脑、理论联系实际的能力。
研究型《数据结构》实验教学要求学生动手动脑,手脑并用,既应用了已掌握的知识,又促进了思维力、理解力和创造力的发展。所以,我们认为知识与智力上的综合训练是发展智力的重要条件。在实验教学活动中,学生们不仅动手编制了相关的应用程序,而且还掌握了使用相关编程工具的方法,并通过实践和反复总结后,理解了对同一算法可以从多种不同的角度来实现的深刻内涵。
4、研究型《数据结构》实验教学能培养学生的团队精神和协作意识。
学生积极参加研究型《数据结构》实验教学活动,不仅促进智力和能力的发展,而且能很好地培养学生的团队精神和协作意识。由于我们的整个教学活动是以小组进行的,无论是在上机编程,还是在查阅资料、撰写和修改实验报告,各小组成员都能认真参与,并很好地配合组长工作,表现出良好的团队精神和协作意识。最后,当顺利完成实验报告并通过教师验收时,他们感到有一种来之不易的集体成就感和荣誉感。所有这些,使他们更加坚定了自信心,激发了学习兴趣,锻炼了能力,提高了智力。
当然,同传统的实验教学相比,研究型《数据结构》实验教学对教师的要求更高了,付出的也更多了,同时得到的也更多。因为这是一种过程的学习和参与,学生和教师都从中受益匪浅。因此,只要我们提高了对研究型实验教学的认识,端正了态度,掌握了科学的指导方法,就会去不断地创新,必将能培养出智力和能力全面发展的一流人才。
参考文献
[1]文辅相. 素质·方法·创新[J].高等教育研究,1999.
[2]陆国平,江莹,李松.研究型大学与思想库[J].高等教育研究,2001.
[3]沈显生,尹路明,李树美,杨捷频. 研究型野外实习教学的设计与实践[J].教育与现代化,2002.3.
近年来,在产业界急需大量软件开发人员的情况下,普通本科院校计算机专业学生的就业率持续走低。网络、报纸等媒体对计算机本科教育现状多有批评,甚至出现了大学不如培训公司的极端观点,严重影响了学生对专业课程的学习兴趣、动力和信心。数据结构是计算机专业的核心基础课程,上承程序设计语言、离散数学,下启操作系统、编译原理等课程,其重要性不言而喻。一方面,数据结构学科具有难度大、抽象层次高、概念繁杂等特点,学生很难掌握,更不要说将抽象理论与就业实践需求相结合。另一方面,国内主流数据结构教材和相应的传统教学模式侧重于培养学生的计算机学科基础理论素养,而将如何通过组织数据结构教学活动积极推动就业的问题留给了任课教师[1]。这造成了学生学习数据结构的目标不明、信心和动力不足。笔者面向就业需要明确了数据结构的两大主要教学目标,并在实际教学过程中实践建构式教育理论,尝试解决学生对专业认识不清、学习兴趣不足、编程基础薄弱等问题。一些做法得到了学生的认可和配合,成功地激发了学生的学习主动性、在一定程度上培育了学生的创新精神。
1面向就业需求的数据结构教学目标
教育要服务于社会生产需求。数据结构教学也必须紧扣这一根本目标。本节从满足就业需要的角度阐明了数据结构教学的两个主要目标:
1) 培养超越具体程序设计语言技巧的编程技术。
现阶段是一个传统的生产生活方式迅速向电子化、信息化转变的时期。人们需要开发和维护更多、规模更大的计算机系统来满足生产和生活的需要[2]。这就决定了具有熟练编程技术的程序员在很长时期内都将受到产业界的青睐。大学对学生编程技术的培养始于程序设计语言的教学,如c语言,java语言等。但是现今编程语言繁多,各种新概念层出不穷,常常出现学生无所适从或者质疑某门语言课程已经过时无用的现象。甚至很多教师也在争论讲授何种编程语言。笔者看来掌握编程技术(而不仅仅是语言),回归编程的本质问题更加重要,无谓地追赶时髦不可取。作为编程语言课程的后续,数据结构教学的重要目标就是帮助学生理解编程的本质、锻炼编程技术以及学习提高编程技术的方法。
2) 培养围绕复用的软件开发方式。
随着软件规模的日益增大,软件开发模式逐渐从“从无到有”的模式过渡到“从有到有”的模式,即复用现有的丰富的软件资产,开发新的应用系统。事实上,复用的思想已经被广泛的用于软件开发实践之中,从各种各样的程序库、软件开发包、软件构件、web服务等各种可复用资产已经简化了软件开发的难度、提高了软件开发的效率也极大地改变了软件开发的模式。数据结构学科本身就是对软件复用思想的一种实践,它通过总结大量软件系统中反复出现的数据结构(如表、树、图、集合等),定义和实现处理这些数据结构的基本操作,最终达到能够在不同项目开发中反复应用的目的。这些基本数据结构和算法已经被实现为可复用的产品随着程序设计语言,如c++ stl、c# collections, java collections等,并得到了广泛的使用。因此,数据结构教学的另一个重要目标就是引导学生习惯围绕复用的软件开发方式,能够使用和定制已有的数据结构和算法库。
其他传统的数据结构教学目标,如培养学生面向实际问题进行算法设计和分析的能力,培养学生计算机学科的基本理论素养和思维方式等也非常重要。但普通本科院校学生对理论内容的接受能力以及将理论和现实就业需求相联系的能力相对较弱且教学时间有限[3],笔者认为重点突破本节给出的两个更具体、更可达的教学目标,并在实现这种具体教学目标的过程中潜移默化地培育学生的计算思维和理论素质,将会取得更佳的效果。
2建构式数据结构教学
教学理论研究以及教学实践反馈均表明,学生主动学习的效果远较被动地接受老师灌输的效果好的多。因此,为实现上述教学目标,在建构式教育理论的指导下,笔者探索并采用了一系列建构式教学措施,激发学生的主动性和兴趣,取得了较好效果。
建构主义认为,学习并非学习者对教师所授知识的被动接受,而是学习者以自身已有知识和经验为基础的主动建构过程[4]。知识不仅是通过教师传授而得到,更是学习者在一定的情境中,利用必要的学习资料,通过同化新知识、顺化自身知识结构的方式而获得。建构主义提倡在教师指导下的、以学习者为中心的学习,也就是说,既强调学习者的认知主体作用,又不忽视教师的指导作用,教师是意义建构的帮助者、促进者,而不仅仅是知识的传授者与灌输者。学生是信息加工的主体、是意义的主动建构者,而不仅仅是外部刺激的被动接受者和被灌输的对象。下面从理论教学和实践教学两个方面介绍我们采用的一些教学措施。
2.1理论教学措施
课堂教学是数据结构教学活动的主要部分,充分利用课堂教学时间,激发学生学习数据结构的兴趣和信心,帮助学生建立学习数据结构的环节非常重要。我们采用了如下措施:
1) 组织小型讨论。
好的开始是成功的一半,好的课堂教学须在上课之初就抓住学生的注意力,让学生带着轻松、愉快的心情听课。我的做法是在课堂的前5分钟,提出一个学生感兴趣的话题,组织若干个有3~5位同学参与的小型讨论。到一个学期结束时,每位同学都有至少一次的发言机会。讨论的主题可以灵活设置,如时事、技术、社会热点等。有时,课堂中间学生比较疲惫、注意力下降的时候,也可以穿插一点讨论,改善课堂环境。大多数学生非常喜欢这种讨论活动,积极参与其中,成为课堂的一部分,从被动上课转变为喜欢上课。
2) 重建理论知识所针对的问题。
国内的经典数据结构教材侧重严谨的理论,较少讨论各种概念、算法出现的背景以及探讨的问题是否仍然具有现实价值。而回答这些问题能够帮助学生重建理论知识所针对的问题原型,重现解决方案的提出、发展乃至最终成熟的整个过程,更有助于培养学生解决实际问题的能力,养成批判性、创新性思考的习惯。众所周知,关于树的存储方法很多,有双亲表示法,孩子表示法和二叉链表表示法[5],其中以树的二叉链表表示法使用最广,但其他存储方法也有其适合的应用。例如,在利用树表示各个集合,求集合中的等价类时,双亲表示法更为合适。每一个集合都用树的双亲表示法存储时,并设树的根结点的值为集合名,集合中的每个成员都对应一个结点,这样很容易找到一个元素所属的子集(顺着双亲指针找树的根结点)。
3) 组织“我来讲”活动。
数据结构涉及很多抽象的概念和算法,初学者很难理解。而教师则对理论内容比较精熟,常常倾向于从理论的角度逐步递进、展开讲解,这就增加了学生的学习难度。教师和学生在教学语言上的鸿沟是影响教学效果的一个重要障碍。教师当然可将抽象的理论概念与生活中更形象的概念进行类比,帮助学生理解,也可以将复杂的算法过程用多媒体动画模拟出来,直观地展示给学生,帮助学生掌握。但一方面,根据建构主义理论,教师和学生的知识背景不同,由教师设计概念类比语境和算法模拟动画实际上仍然是基于教师的知识结构对知识点进行的同化和顺化,而不是对学生知识体系的直接建构。另一方面,教师的经验和智慧有其局限性,未必总能够找到最适合的类比语境和动画模拟。为此,笔者采用了充分发挥学生智慧的方法,组织“我来讲”活动,要求学生通过设计算法的动画模拟,创建概念的类比语境等方式进行学习,并随机选择学生走上讲台对抽象理论概念和复杂算法进行说明。这样不但能够调动学生思考问题,还能帮助那些无法完成自我知识体系建构的同学从学生的视角去理解同一个问题。例如,对于n维数组是元素为n-1维数组构成的线性表这一递归的类型定义,可采用符号推理的方式,培养学生的理论素养,而同时可鼓励学生根据自己的理解将抽象理论具体化,建立帮助理解和记忆的现实语境。
2.2实践教学措施
数据结构是帮助具有基本编程语言基础的学生锤炼编程技术的关键课程。它揭示了程序设计的基本面,即如何处理相互之间存在一种或多种数据关系的数据元素所构成的集合、如何设计算法并分析算法的优劣。若没有相应的配套实验指导学生如何将理论应用于实际问题,只是泛泛而谈、纸上谈兵,学生容易迷失在数据结构的一连串复杂概念和算法之中,而不知道学习数据结构的意义何在。为实现教学目标,笔者锁定实验内容设置和实验考核等两个关键环节,实践了如下措施,取得了较好效果。
2.2.1实验内容设置
实验内容设置是进行实践教学的最重要部分。从覆盖知识点的角度看,实验内容须面向数据结构教学目标,即实验内容须能够锻炼学生的编程技巧,如算法设计、调试、测试以及调优等能力,还能够让学生体会到围绕复用开展软件开发的威力以及思路。从覆盖教育对象的角度来看,实验内容须面向大多数同学并充分考虑优秀同学,即实验内容须划分不同的层次,让大多数学生能够很容易入手,并让有能力、有余力的学生能够不断地深入,直至形成综合型课程设计。
基于以上考虑,并借鉴同行经验,笔者开展三个层次的实验教学活动,一是要求所有学生都完成的实验内容,要求学生采用不同的数据结构实现同一个问题并进行对比分析,例如,分别使用静态数组和动态分配的连续内存区实现顺序表,使用整型、字符型数组或者链表实现长整数的乘法,使用带头结点或不带头结点的循环链表模拟约瑟夫环等;二是组织程序设计竞赛,让部分学有余力的同学能够在算法设计、程序实现和调试、优化等方面得到锻炼和提高;三是设计综合型课程设计锻炼学生解决问题的综合能力,并通过适当分组,培养学生团队协作精神和能力,锻炼学生解决问题的综合能力的目标,最终达到以点带面全面提高学生能力的目的。
2.2.2实验考核手段
考核手段在教学环节中至关重要。考核手段是学生学习和锻炼自身能力的风向标。为保证每位同学都能积极完成实验并有所收获,避免抄袭和敷衍的现象,笔者采取了综合型的考核手段。其一,提交实验成果,即程序及其运行结果;其二,记录实验过程、分析实验结果以及总结实验得失的实验报告,对实验报告进行选优讲评,培养学生撰写科学实验报告的能力;其三,每位同学必须面向教师讲解自己编写的程序,包括主要思路和细节性语法,优秀的同学可走上讲台宣讲自己的实验方案和程序设计技巧。这就基本杜绝了学生相互之间抄袭程序和实验报告的现象,使得学生真正能够思考问题,并尽力动手完成实验。综合上述三种手段的综合型考核方法既能够达到督促大部分同学完成实验、锻炼动手能力目的,又能够达到培养优秀同学的目的。特别地,优秀同学宣讲活动能够使学生观摩到如何从学生的视角从无到有的解决问题的过程,这能够培养学生解决实际问题的信心并激发其学习积极性。
3应用中遇到的问题
建构式教学模式在应用和推广过程中遇到的主要问题来自三个方面。其一,目前学生的课业负担较重,习惯于被动“填鸭”而不习惯于主动“求索”,这是推动和开展建构式教学模式的主要障碍。其二,建构式教学活动,需要师生的密切交流,但现有师资不足难以满足实际需求。一个可能的解决方法是综合多门课程和多个老师,建构整体的知识框架和学习体系,避免课程教学中的重复劳动,提高师资的利用率。另一个可能的解决方法是利用互联网技术,建立在线教学园地。其三,建构式教学模式仍然处于探索阶段,各学科缺乏建构式教学素材。从笔者在实践教学的体验来看,应尽量从学生的学习背景和能力成长规律出发而不仅仅是从学科背景出发,为学生建构知识体系设计更平滑的路线。
4结语
笔者提出将“培养超越具体程序设计语言技巧的编程技术”和“培养围绕复用的软件开发方式”作为普通本科院校的数据结构教学目标,在建构式教育理论的指导下,设计并实践了一系列建构式教学措施,分析了应用建构式教学模式所遇到的一些问题。
未来将开展两个方面的工作。一是通过问卷调查、统计分析等手段定量地分析建构式教学方法的实际效果;二是创造和积累建构式教学素材,如研究数据结构课程设计过程中不同类型学生的知识建构路线,挖掘并推广其中优秀的知识建构方法。
参考文献:
[1] 教育部高等学校计算机科学与技术教学指导委员会. 高等学校计算机科学与技术专业发展战略研究报告暨专业规范(试行)[m]. 北京:高等教育出版社,2006:8-101.
[2] 蔡敏,郑尚志,梁宝华.“数据结构”课程教学改革之我见[j]. 计算机教育,2009(4):50-51.
作者简介:周芳(1984-),女,江西抚州人,桂林电子科技大学生命与环境科学学院,助教。(广西 桂林 541004)
中图分类号:G642.0 文献标识码:A 文章编号:1007-0079(2012)04-0060-02
“数据结构”是一门研究非数值计算程序设计中操作对象,以及这些对象之间的关系和操作的学科。该课程具有较强的理论性和实践性,是一门公认的比较难学的课程,原因在于:本课程理论性和抽象性很强,需要学生从传统的形象思维转向科学的抽象思维,学习难度大,学习兴趣低;教材采用类C语言作为数据结构和算法的描述语言,有的学生由于前修C语言程序设计课程掌握得不好,影响到本课程的学习;本课程作为非计算机专业学生的专业限选课,共48课时,其中理论32课时,课时有限而课程内容繁多。针对这些问题,本文介绍和探讨了一些切实可行的解决方法。
一、把握课程内容主线
为了整体把握好这门课,教师应弄清课程的基本内容、基本结构、各部分间的关系及贯穿全课程的基本线索。
“数据结构”所选教材为人民邮电出版社出版的严蔚敏编写的《数据结构(C语言版)》。全书共八章,其中第一章为绪论,综述数据、数据结构和抽象数据类型等概念;第二章至第六章从抽象数据类型的角度,分别讨论线性表、栈、队列、数组、树和二叉树以及图等基本类型的数据结构及其应用;第七章和第八章分别讨论查找和排序方法,除了介绍各种实现算法之外,还着重从时间复杂度、空间复杂度以及稳定性等方面进行定性或定量的分析和比较。贯穿全书的主线为逻辑结构、存储结构和数据运算,如图1所示。逻辑结构是从具体问题抽象出来的数学模型,从逻辑关系上描述数据。根据数据元素之间关系的不同特性,分为线性结构和非线性结构。存储结构是逻辑结构在计算机中的表示,有顺序存储结构和链式存储结构两种。数据运算是指在某一类型数据结构上涉及的基本操作,有插入、删除、修改、排序和查找等。
抽象数据类型是指由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括三部分:数据对象、数据对象上关系的集合以及对数据对象的基本操作的集合。在讲解每一种数据结构时都要紧扣课程主线,从抽象数据类型的观点来讨论。比如,将第二章线性表的知识点概括为两大部分:线性表的抽象类型定义和线性表的应用,如图2所示。定义中,数据元素之间逻辑上存在线性关系,在计算机中表示这种关系的两类不同的存储结构是顺序表和链表,如图3所示。对于顺序表,元素存储的先后位置反映出其逻辑上的线性关系,借助数组表示,对顺序表的基本操作实质是对数组的操作。对于链表,是依靠指针来反映其线性逻辑关系的,对链表的基本操作实质是对指针的操作。紧扣主线,教学思路清晰,学生学起来系统性强,容易掌握。
另外,作为一门专业限选课,“数据结构”课时有限而课程内容繁多,教师不应把所有内容都填鸭式灌给学生,应启发学生,抛砖引玉。比如,第八章排序方法很多,不可能一一讲解。首先对其分类,每一类中讲解一到两种排序算法。重点是让学生明白分类依据,深刻理解排序方法的基本思想、特点、实现方法、改进创新之处以及其性能分析。
二、解决学生对C语言知识掌握的不足
教材中采用类C语言作为数据结构和算法的描述语言。数据结构上机实验课上要求学生使用C语言环境编写代码,完成实验内容。因此,学生对C语言程序设计课程掌握的好坏直接影响数据结构课程的教学效果。
C语言程序设计不仅理论性强,而且应用性和操作性更强,要求学生具备分析问题的能力、构造算法的能力、编程的能力和调试程序的能力。C语言功能丰富、表达能力强、使用灵活方便,学生掌握不理想,而解决学生对C语言知识掌握的不足对数据结构课程教学大有裨益。总结数据结构课程中用到C语言的主要知识点有:
形参和实参概念,函数参数传递方式,包括按值传递、按地址―指针传递和按地址―引用传递三种方式;
地址和指针的概念,变量的指针,数组的指针;
定义结构体变量方法,结构体变量的引用,结构体数组,指向结构体类型数据的指针;
一维数组的定义和引用,二维数组的定义和引用。
以上四点是C语言难点,将这些知识点纳入到教学内容中。这样既可以复习以前的知识,加深印象,强化理解,又可以为数据结构课程的教学做铺垫。
三、讲好第一堂课
俗话说“好的开端是成功的一半”,第一堂课是“重头戏”,好的开端能吸引学生的注意力,使学生产生强烈的求知欲,从而调动学生学习的主动性,从“要我学”变成“我要学”。
第一堂课多为绪论课,讲解的内容不仅涉及课程的性质、地位和作用,课程的学科基础,主要内容和知识结构,学习方法等方面,更侧重强调它的应用前景。“数据结构”主要研究如何合理地组织数据、高效地处理数据,在现实世界中有很多应用,如线性表和学生信息管理系统;栈和八皇后问题、Hanoi塔问题;队列和食堂、加油站的顺序服务;树和人类的族谱、公司组织结构;图和通讯网络构建、最短路径。
兴趣是最好的老师,而问题是兴趣的源泉。学生真正关心的是学以致用,如何应用所学知识到现实世界中解决实际问题。因此,教师结合实际问题,激发学生学习的兴趣,为以后的讲课创造了良好条件。
四、加强实验环节
“数据结构”具有很强的操作性和实践性,设置实验环节十分重要。通过实验内容的训练,一方面加深学生对课堂所学知识的理解,另一方面培养学生算法分析、算法设计的软件开发思维模式,锻炼学生上机编写程序和调试程序的能力。
实验课共8次,16学时,实验内容安排如表1所示。其中,实验一和实验二复习C语言中函数参数传递方式和结构体使用;实验三至实验六涉及了顺序表、单链表、栈以及队列的基本操作及其应用;实验七和实验八分别是折半查找和排序方法。实验内容涵盖理论课的主要内容,使实验课和理论课有机结合,相辅相成,加深学生对知识点的理解。
实验课分为实验预习、上机操作和实验报告三部分。实验前,学生阅读实验指导书,了解清楚本次实验的目的、实验要求和实验内容。实验中,教师首先对实验所涉及的知识点进行讲解。然后学生根据实验内容完成算法分析、程序设计和调试测试,教师答疑指导。实验结束后,要求学生完成实验报告,重点体现知识点的总结,实现算法的流程图以及调试过程中问题是如何解决的。
实验课应充分调动学生学习的积极性,让学生收获实验成果的喜悦。笔者根据自己的教学体会,总结出以下四点心得:
让学生参与讲解,体会知识分享快乐,激发学习热情;
强调程序调试的重要性,不要在心里惧怕程序出错;
鼓励多进行交流,通过团队合作的方式帮扶基础差的学生;
及时批改实验报告,发现问题,在下一次实验时进行讲解。
五、结语
“数据结构”课程由于受课时少和前修课程不足等因素的限制,教师想教好,学生想学好都有较大的难度。恰逢此时,为提升教师教学水平,笔者所在学校组织观看北京理工大学龚绍文教授的“关于如何讲好一堂课的十个问题”的培训讲座录像,此次培训使笔者受益匪浅,为此结合教学实践从以上四个方面积极探索,取得了切实的效果。但对课程体系的建设,学生学习兴趣的激发,教学方法的改进等问题仍需进一步研究。总之,讲好数据结构课将是笔者今后追求的教学目标。
参考文献:
[1]严蔚敏,李冬敏,吴伟民.数据结构(C语言版)[M].北京:人民邮电出版社,2011.
中图分类号:TP3-4 文献标识码:A文章编号:1007-9599 (2011) 06-0000-01
Teaching Research on Data Structure Experiment
Zhang Xiujian
(Guangzhou University Sontan Collehe,Guangzhou 511370,China)
Abstract:Data structure is a course that emphasizes that exercise of logical thinking and programming ideas.In this paper,we argue that the appropriate experimental program and integration of software engineering can improve student’s innovative ability.
Keyword:Data Structure;Experiment;Programming;Teaching
《数据结构》,是一门重要的理论学科。通过调研看出,该科目在各个院校的实验教学情况存在较大差异。学生学习理解过程缓慢,教师教学也不能得心应手,尤其是实验课,由于部分学生对编程语言掌握不熟练,实验内容抽象,而有较大畏难情绪,甚至不参加实验课。虽然曾经有些教师参考了任务驱动、实例教学等方法,但过于强调某种教法,也会影响教学效果。所以,该课程宜结合课程特点设计教学,切实通过贴近于实际的方法传道授业,结合实验落实教学效果是非常重要的。
一、数据结构课程实验教学中问题所在
(一)实验课时欠缺。有的学校压缩实验时间,让位于理论教学,这对学习效果的落实来说是本末倒置。没有足够的实验课时,学生就无法把理论知识加以系统地整理,进而在实验中消化吸收。
(二)综合性、创新性实验科目欠缺,系统性不强。开设的数据结构的实验课程中,虽然安排了相关知识点的实例,但是对设计的创新性和综合性上有待提高,要加强知识点的综合运作。
(三)没有很好地结合课堂教学和实验教学。作为一门比较抽象的理论教学课,尤其要重视课堂和实验教学相结合。实验中要突出该课程的实践性,教学中要注重理论和实践的结合。现在,不少教师只重视知识的灌输,在实验中任务不明确,要求不明晰,让学生在实验中迷失了对理论的进一步实践的方向。
二、实验教学的改革探索
(一)教学模式的改变。基于数据结构课程理论难于理解的特点,要突出实验课的效果,要注重“课堂.一章的基础性实验.综合实验”相结合的框架。注意从逻辑机构到存储结构,再到实现基本算法,继而具体应用的方法,一以贯之地落实到数据结构教学中去。算法的讲授要先分析算法,再运用编程语言演练算法,最后进一步分析算法。如能采用多媒体演示算法的步骤,会使学生更加清晰地理解。课堂教学始终要把应用的要求作为做种目标,辅以实验训练,加强学生动手编程和自我创新的能力。
(二)基础实验环节要重视。实验环节要让学生进一步理解数据结构的特点,明确相关概念,熟练各种基本算法的实现。枯燥的理论讲述的再多,也不如配合实验让学生一练,所以教学要重视基础实验环节。要想获得扎实的教学效果,教师要提供实验编程语言,Turbo C、Visual C++、Delphi等都可以。根据教材确定实验方案,明确实验目的、内容、要点和必备注意事项,最后安排几个演练题目,比如矩阵的遍历、数据的折半查找等。实验课程要贴近学生的编程水平,不可偏离太过。实验中,学生有章可循,对要点有较强的针对性,实验效率就会大大提高,使学生真正能举一反三。
(三)课程实验要理论应用相结合。实验要注意结合原理和应用,让学生在解决实际问题时学会调用学过的知识点,养成动手练习语言编程的习惯,所以,这个层面的综合实验要求要高于普通的课下练习和基础实验,更贴近于应用。平时虽然侧重练习简单的算法程序,但综合实验课是软件设计的高级训练阶段,融合了问题的分析,系统结构设计、操作界面设计、编程技能技巧,是软件设计的系统工程。教师分阶段拟定数据机构在实践中的各种应用,比如:汉诺塔问题、约涩夫环问题、Huffman Coding方式、班级信息管理系统等,把任务分配给学生,让学生组织课题公关。课题的结题要提供课题表述、基本要求、实验数据、实现结果和关键实现步骤等内容,这能协助学生破题解题,以免形成错误的认识,同时也讲解了程序设计的基本路线,确保实验目标的实现。最后每个课题组都集中展示实验过程接结果。试试证明,这样的实验环节,综合了数据结构知识、编程语言技能和软件工程思想,让学生系统地理解各门课程的联系,融合相关专业课的精髓,锻炼了学生的团队合作互助精神,提高了组织能力和管理水平
三、重点组织好教学实验的各个环节
(一)实验题目的设计。鉴于实验环节教学时间的限制,学生的编程基础和技能较为薄弱,所以,设计和拟定合适的实验题目尤为重要。实践题目应该由易到难循序渐进:
1.常用算法练习。主要讲解各章节知识点,深入贯彻算法理论的理解;2.基础性应用练习。主要让学生针对单一的数据结构解决应用难题,其难度中等;3.综合应用题目练习。要涵盖多个章节的内容,系统性强,难度较高,可以组织学生成立课题组,在课外实验环节共同研讨解决,再集中展示。课题的设计要注意:(1)常用算法的练习要有一定代表性,重点练习各个章节的知识点,难度较小,目的在于理论知识的掌握。课堂教学要和实验环节对应,学生在试验中重点演练课上讲授的内容。(2)基础性应用练习难度要适中,既要带动基础薄弱的学生,又要注意发挥基础好的学生的能动性,可以加以延伸,或是鼓励提供多种解决方法,进行不同思路的性能的比较,让各个层面的学生都能参与实验。(3)综合应用练习题不宜太难,但要引起学生的兴趣,宜于结合实际中的事物或应用系统,让学生宜于接受和理解,这样才能促进学生的积极性。
(二)实验环境的搭建。现在很多学校选取谭浩强教授出版的《数据结构(c语言版)》作为教材,应用C语言进行数据结构的设计语言,用TC搭建实验环境。而在实际教学中,应用C语言讲解数据结构常常对算法设计和实现上较为突出,对数据结构的系统性容易忽视。如果用C++进行数据结构的实验练习,可以注重其整体性和系统性,先定义数据结构的类,再分析其逻辑特性,然后把存储结构延伸到算法的实现中去,能帮助学生构建数据机构的概念。
(三)实验过程的组织与实施。实验中可以采取学生分组、一人负责的机制进行实验。提倡互动探讨和交流,既能让学生接触更多的实验题目,也能提高学生的团队合作精神。
(四)实验结果的检验和考核。对实验结果,教师要辅以必备的检查来进行督导。对于实验报告的书面汇报,要设计题目、要求、步骤、结构、程序代码和改进方法,以及最后的体会等。教师通过实验报告书可以详细了解学生的实验情况,进而发现共性的问题集中解决。
(五)实验问题的总结与弥补。通过实验,教师对于学生学习中存在的问题要进行系统总结和分析加以更正,有些不良的编程习惯,教师要着重强调。
四、结束语
《数据结构》的实验课注重学生动手能力的培养,强调创新思维的养成,通过实验,结合应用案例,能够进一步提高该课程的教学质量,加深学生对知识点的理解,具有积极的现实意义。
关键词:数据结构;教学内容;组织形式;考核方式
中图分类号:G642
文献标识码:B
利用计算机来解决实际问题的步骤是:给出问题描述,将问题抽象成数学模型,根据数学模型写出求解问题的算法,再根据算法写出程序代码,最后上机调试并分析结果。在上述过程中,非数值的数学模型是数据结构研究的主体,它操作实现主要是通过数据结构的实验教学环节来完成的,在该教学环节中作为教学主体的学生,首先要具备抽象思维能力和语言基础。往往在环节实施过程中,语言基础是薄弱环节,以至于课时用完了,学生还是写不出满意的算法及代码。鉴于此,我们在教学内容、组织形式、考核方式等教学环节中进行了一些设计,与大家一起来探讨。
1教学内容
我们在教学内容上,围绕课内、课外两条主线进行改革,给学生较大的自主学习空间,有利于学生创新精神及实践能力培养。整个实验教学由浅入深,重在基础、提高能力、挖掘潜力、拓展思路。在课时内的教学主要以基础性实验为主,安排一个综合性实验;课时外的教学主要以设计性实验和综合性实验为主。
1.1学时内的教学内容
在我校数据结构课程共64学时,理论课48学时,实验课16学时。安排了5个实验项目,由于多数学生语言基础不算太好,特别是指针的运用和结构体的定义是薄弱环节,所以在做实验项目时,主要是从教材上的算法出发,使得学生有章可循:
项目1:顺序表的操作
主要训练学生对顺序存储结构的理解,掌握顺序表的查找、插入和删除等基本操作;同时引导学生对于静态参数传递和动态参数传递的使用方法。
项目2:单链表的操作
主要是与顺序存储结构进行比较,完成线性表在链式存储结构上的查找、求长度、插入、删除等基本操作。
项目3:栈和队列的应用―停车场的管理
深入了解栈和队列的特征,以便在实际问题背景下灵活运用;利用两个栈和一个队列模拟停车场管理及相关操作。
项目4:二叉树的遍历
掌握二叉树的结构特征,以及二叉链表存储结构的特点;掌握二叉树三种(先序、中序和后序)遍历方法;熟悉并且掌握递归算法。
项目5:折半查找和快速排序
掌握折半查找和快速排序的方法,掌握要进行折半查找应该采取的存储结构形式。并进行对其进行时间复杂度的分析。
对于每个实验项目的实验目的和实验要求,提前2周放在教学平台上。在实验前1周,利用辅导课时间,以测试的形式,让学生写出算法代码,由于每个实验基本上可以在教材中找到源代码痕迹,所以难度不大。
在实验教学过程中,采用任务驱动式的教学模式,首先从总体思路上讲解10分钟左右,边辅导边发现问题,每半个小时总结1次。由于学生已经在课前作好了准备,在实验室里他们赢得了更多的自主时间用来调试程序,分析结果。学生水平参差不齐,在上课过程中穿插实验验收考核,考核的形式是现场写出主要操作的代码,在规定的时间内进行调试、分析。验收完一个模块,学生再进行下一个任务。教师通过讲课、辅导、验收使得实验课堂充实起来,由于学生每个时间段都有活干,所以课堂气氛非常活跃,讨论热烈。
1.2学时外的教学内容
在学时外,以课程设计的形式,利用开放实验室时间,严格按照软件工程的思想进行训练。
在课程设计时,教师列出多个设计课题,每个课题都有相应的要求或说明。各课题的难易度是有差异的,每个课题后以标准分的形式标出了难易度。例如:
课题1:设有n个人围坐在圆桌周围,现从某个位置m(1≤m≤n)上的人开始报数,报数到k的人就站出来。下一个人,即原来的第k+1个位置上的人,又从1开始报数,再报数到k的人站出来。依此重复下去,直到全部的人都站出来为止。试设计一个程序求出出列序列(难易度90)。
课题2:用递归算法和非递归算法实现下面问题,并比较其算法优势。把一只老鼠放进一个无盖的大箱内, 箱内设置若干隔板,使老鼠走动的方向受到阻碍,看其如何找到一条通道,走出大箱(难易度80)。
“难易度90”表示设计中的各项全部达到要求时的最高得分大致为90。因此,参加课程设计的学生首先要了解设计的任务,仔细阅读各题的设计要求,然后根据自己的基础和能力情况从中选择一题。一般来说,选择课题应以在规定的时间内能完成,并能得到应有的锻炼为基本原则。课程设计的总体思路是:数据模型选取构造求解算法选择存储结构编写程序代码调试测试总结分析。
在做课程设计时,不再拘泥于语言环境的限制和存储结构的限制,主要锻炼学生的开放思维能力和综合知识的应用能力。同时,引导学生从结构化程序设计到面向对象程序设计的思考。例如学生正在学习C#,在做课题1时,除了传统的设计方法外,可以引导学生画出类图和顺序图,写出C#的代码。
设计结束后要写出课程设计报告,以作为整个课程设计评分的书面依据和存档材料。主要包括:需求分析、概要设计、详细设计、调试分析、用户使用说明、测试结果、参考文献等。课时外的训练主要是为毕业设计打下基础,同时也培养了学生的团队协作精神。
2组织形式
2.1学生的组织
对于学生进行分组,每组中按照好、中、差的学生进行搭配。由于学生水平参差不齐,早做完的学生,进行考核验收。验收合格,同时给出相关思考题,可以再对于思考题进行进一步的思考,锻炼创新精神。同时,让已完成任务的学生辅导未完成任务的学生,这样培养了学生的团队协作精神,课堂气氛非常活跃,激发了学生学习的主动性。对于教师的工作也减轻了一些,教师主要是总体部署,分步考核,可以有充足的时间进行验收,比较清楚地掌握总体情况,以便讲评。这样组织学生,可以解决“优等生吃不饱,差等生吃不了”的局面,实现了“因才施教”。
2.2内容的组织
对于每一个实验项目的实验目的、相关要求等,以实验指导书的形式与学生见面,一本好的实验指导书能给学生的上机实验带来事半功倍的效果。
首先,让学生明确实验目的和要求。每个实验项目都给出了实验目的,并且提出了具体要求。有了实验目的,学生才有方向性;有了具体要求,学生实验时才有章可循。对于要求,要按时间分块执行。比如单链表的操作为2学时,第一个学时完成建立、查找、部分主函数工作;第二学时在第一学时基础上完成插入、删除操作,完善主函数。每一个学时在最后进行验收,若有问题通过小组完成。
其次,让学生掌握实验步骤。每一个实验项目按照软件工程的思想去组织,先需求分析,抽象出数据结构模型,再明确数据类型,详细设计,最后给出类C语言的算法描述。要求学生要严格遵循实验步骤来思考问题,这样,可以培养学生良好的工作作风和解决问题的方法,并且为后续课程做准备。
3考核方式
市场经济体制下的学生不如计划经济体制下的学生好教育,特别目前高校扩招,入学的学生素质参差不齐,基础相对薄弱,自学能力不强,不少学生在学习上存在畏难心理。而对于高等教育也不能降低要求,这样就要求在教学模式上进行革新,我校对教和学提出两个转变,“变学生管理为学习管理,变管理学生为服务学生”。对于课程教学,不能再采取应试教育下的考核形式。鉴于此,在数据结构的教学过程中,特别是实验教学,探索出了新的考核形式。
分数对学生来说是非常重要的,以此作为课程管理的抓手。对于教学计划内的实验项目成绩分成两个部分,一个是个人成绩,一个是小组成绩。个人成绩主要考核学生个人能力,小组成绩主要是考核学生的团队协作精神。对于个人成绩考核形式有两个方面,一个方面是学生的程序代码调试技能的测试,一个方面是书写实验报告,从实验报告上可以考查学生的逻辑组织能力。笔者把该考核模式称为“实验2+2”模式。每个实验项目结束前进行验收考核,经常进行阶段性考核,主要是激发学生的学习兴趣,保证了课堂教学纪律,基本没有缺勤的学生,让学生找不出来不学习的理由,因为每处都与成绩挂钩,都在拼命的去“挣分”。
对于课程设计部分,实验室开放时间结束时,由学生提交课程设计源代码和设计总结报告。源代码提交时,要生成可执行文件,对文件进行压缩,压缩文件名为“学号+姓名”形式,发送到指定邮箱地址。课程设计成绩根据学生设计任务完成情况、设计报告、设计成果的质量以及答辩情况综合评定。完成情况主要包括:功能实现情况和程序设计情况;设计报告包括课程设计报告格式,课程设计思路及设计过程,以及对设计的自我评价,收获和体会等;答辩要求思路清晰,模块关系清楚,回答问题敏捷。
对于学生的学业成绩采用结构化成绩,把100分不再作为一个整体看待,把它融进教学的全过程中去。学生的学业成绩由平时成绩、副卷成绩和主卷成绩构成,平时成绩占20%,副卷成绩占20%,主卷成绩占60%。在平时成绩中课程设计10分,作业和平时课堂表现5分,小考5分;副卷成绩中个人成绩15分(其中程序调试10分,实验报告5分),小组成绩5分。
4结论
通过实施验证,效果是良好的。实验的创新也带动了整个课程的进步,特别是上课出勤率,基本上是全勤。课堂气氛活跃,问题讨论热烈,学生的学习主动性大大提高了,网络教学平台登录次数明显增多。在问题答疑和考核验收方面,虽然增加了教师的教学工作量,但是提高了教师的工作热情。真正实现了“教”和“学”的良好互动,提高了教学质量。
参考文献:
近年来,在产业界急需大量软件开发人员的情况下,普通本科院校计算机专业学生的就业率持续走低。网络、报纸等媒体对计算机本科教育现状多有批评,甚至出现了大学不如培训公司的极端观点,严重影响了学生对专业课程的学习兴趣、动力和信心。数据结构是计算机专业的核心基础课程,上承程序设计语言、离散数学,下启操作系统、编译原理等课程,其重要性不言而喻。一方面,数据结构学科具有难度大、抽象层次高、概念繁杂等特点,学生很难掌握,更不要说将抽象理论与就业实践需求相结合。另一方面,国内主流数据结构教材和相应的传统教学模式侧重于培养学生的计算机学科基础理论素养,而将如何通过组织数据结构教学活动积极推动就业的问题留给了任课教师[1]。这造成了学生学习数据结构的目标不明、信心和动力不足。笔者面向就业需要明确了数据结构的两大主要教学目标,并在实际教学过程中实践建构式教育理论,尝试解决学生对专业认识不清、学习兴趣不足、编程基础薄弱等问题。一些做法得到了学生的认可和配合,成功地激发了学生的学习主动性、在一定程度上培育了学生的创新精神。
1面向就业需求的数据结构教学目标
教育要服务于社会生产需求。数据结构教学也必须紧扣这一根本目标。本节从满足就业需要的角度阐明了数据结构教学的两个主要目标:
1) 培养超越具体程序设计语言技巧的编程技术。
现阶段是一个传统的生产生活方式迅速向电子化、信息化转变的时期。人们需要开发和维护更多、规模更大的计算机系统来满足生产和生活的需要[2]。这就决定了具有熟练编程技术的程序员在很长时期内都将受到产业界的青睐。大学对学生编程技术的培养始于程序设计语言的教学,如C语言,Java语言等。但是现今编程语言繁多,各种新概念层出不穷,常常出现学生无所适从或者质疑某门语言课程已经过时无用的现象。甚至很多教师也在争论讲授何种编程语言。笔者看来掌握编程技术(而不仅仅是语言),回归编程的本质问题更加重要,无谓地追赶时髦不可取。作为编程语言课程的后续,数据结构教学的重要目标就是帮助学生理解编程的本质、锻炼编程技术以及学习提高编程技术的方法。
2) 培养围绕复用的软件开发方式。
随着软件规模的日益增大,软件开发模式逐渐从“从无到有”的模式过渡到“从有到有”的模式,即复用现有的丰富的软件资产,开发新的应用系统。事实上,复用的思想已经被广泛的用于软件开发实践之中,从各种各样的程序库、软件开发包、软件构件、Web服务等各种可复用资产已经简化了软件开发的难度、提高了软件开发的效率也极大地改变了软件开发的模式。数据结构学科本身就是对软件复用思想的一种实践,它通过总结大量软件系统中反复出现的数据结构(如表、树、图、集合等),定义和实现处理这些数据结构的基本操作,最终达到能够在不同项目开发中反复应用的目的。这些基本数据结构和算法已经被实现为可复用的产品随着程序设计语言,如C++ STL、C# collections, Java collections等,并得到了广泛的使用。因此,数据结构教学的另一个重要目标就是引导学生习惯围绕复用的软件开发方式,能够使用和定制已有的数据结构和算法库。
其他传统的数据结构教学目标,如培养学生面向实际问题进行算法设计和分析的能力,培养学生计算机学科的基本理论素养和思维方式等也非常重要。但普通本科院校学生对理论内容的接受能力以及将理论和现实就业需求相联系的能力相对较弱且教学时间有限[3],笔者认为重点突破本节给出的两个更具体、更可达的教学目标,并在实现这种具体教学目标的过程中潜移默化地培育学生的计算思维和理论素质,将会取得更佳的效果。
2建构式数据结构教学
教学理论研究以及教学实践反馈均表明,学生主动学习的效果远较被动地接受老师灌输的效果好的多。因此,为实现上述教学目标,在建构式教育理论的指导下,笔者探索并采用了一系列建构式教学措施,激发学生的主动性和兴趣,取得了较好效果。
建构主义认为,学习并非学习者对教师所授知识的被动接受,而是学习者以自身已有知识和经验为基础的主动建构过程[4]。知识不仅是通过教师传授而得到,更是学习者在一定的情境中,利用必要的学习资料,通过同化新知识、顺化自身知识结构的方式而获得。建构主义提倡在教师指导下的、以学习者为中心的学习,也就是说,既强调学习者的认知主体作用,又不忽视教师的指导作用,教师是意义建构的帮助者、促进者,而不仅仅是知识的传授者与灌输者。学生是信息加工的主体、是意义的主动建构者,而不仅仅是外部刺激的被动接受者和被灌输的对象。下面从理论教学和实践教学两个方面介绍我们采用的一些教学措施。
2.1理论教学措施
课堂教学是数据结构教学活动的主要部分,充分利用课堂教学时间,激发学生学习数据结构的兴趣和信心,帮助学生建立学习数据结构的环节非常重要。我们采用了如下措施:
1) 组织小型讨论。
好的开始是成功的一半,好的课堂教学须在上课之初就抓住学生的注意力,让学生带着轻松、愉快的心情听课。我的做法是在课堂的前5分钟,提出一个学生感兴趣的话题,组织若干个有3~5位同学参与的小型讨论。到一个学期结束时,每位同学都有至少一次的发言机会。讨论的主题可以灵活设置,如时事、技术、社会热点等。有时,课堂中间学生比较疲惫、注意力下降的时候,也可以穿插一点讨论,改善课堂环境。大多数学生非常喜欢这种讨论活动,积极参与其中,成为课堂的一部分,从被动上课转变为喜欢上课。
2) 重建理论知识所针对的问题。
国内的经典数据结构教材侧重严谨的理论,较少讨论各种概念、算法出现的背景以及探讨的问题是否仍然具有现实价值。而回答这些问题能够帮助学生重建理论知识所针对的问题原型,重现解决方案的提出、发展乃至最终成熟的整个过程,更有助于培养学生解决实际问题的能力,养成批判性、创新性思考的习惯。众所周知,关于树的存储方法很多,有双亲表示法,孩子表示法和二叉链表表示法[5],其中以树的二叉链表表示法使用最广,但其他存储方法也有其适合的应用。例如,在利用树表示各个集合,求集合中的等价类时,双亲表示法更为合适。每一个集合都用树的双亲表示法存储时,并设树的根结点的值为集合名,集合中的每个成员都对应一个结点,这样很容易找到一个元素所属的子集(顺着双亲指针找树的根结点)。
3) 组织“我来讲”活动。
数据结构涉及很多抽象的概念和算法,初学者很难理解。而教师则对理论内容比较精熟,常常倾向于从理论的角度逐步递进、展开讲解,这就增加了学生的学习难度。教师和学生在教学语言上的鸿沟是影响教学效果的一个重要障碍。教师当然可将抽象的理论概念与生活中更形象的概念进行类比,帮助学生理解,也可以将复杂的算法过程用多媒体动画模拟出来,直观地展示给学生,帮助学生掌握。但一方面,根据建构主义理论,教师和学生的知识背景不同,由教师设计概念类比语境和算法模拟动画实际上仍然是基于教师的知识结构对知识点进行的同化和顺化,而不是对学生知识体系的直接建构。另一方面,教师的经验和智慧有其局限性,未必总能够找到最适合的类比语境和动画模拟。为此,笔者采用了充分发挥学生智慧的方法,组织“我来讲”活动,要求学生通过设计算法的动画模拟,创建概念的类比语境等方式进行学习,并随机选择学生走上讲台对抽象理论概念和复杂算法进行说明。这样不但能够调动学生思考问题,还能帮助那些无法完成自我知识体系建构的同学从学生的视角去理解同一个问题。例如,对于n维数组是元素为n-1维数组构成的线性表这一递归的类型定义,可采用符号推理的方式,培养学生的理论素养,而同时可鼓励学生根据自己的理解将抽象理论具体化,建立帮助理解和记忆的现实语境。
2.2实践教学措施
数据结构是帮助具有基本编程语言基础的学生锤炼编程技术的关键课程。它揭示了程序设计的基本面,即如何处理相互之间存在一种或多种数据关系的数据元素所构成的集合、如何设计算法并分析算法的优劣。若没有相应的配套实验指导学生如何将理论应用于实际问题,只是泛泛而谈、纸上谈兵,学生容易迷失在数据结构的一连串复杂概念和算法之中,而不知道学习数据结构的意义何在。为实现教学目标,笔者锁定实验内容设置和实验考核等两个关键环节,实践了如下措施,取得了较好效果。
2.2.1实验内容设置
实验内容设置是进行实践教学的最重要部分。从覆盖知识点的角度看,实验内容须面向数据结构教学目标,即实验内容须能够锻炼学生的编程技巧,如算法设计、调试、测试以及调优等能力,还能够让学生体会到围绕复用开展软件开发的威力以及思路。从覆盖教育对象的角度来看,实验内容须面向大多数同学并充分考虑优秀同学,即实验内容须划分不同的层次,让大多数学生能够很容易入手,并让有能力、有余力的学生能够不断地深入,直至形成综合型课程设计。
基于以上考虑,并借鉴同行经验,笔者开展三个层次的实验教学活动,一是要求所有学生都完成的实验内容,要求学生采用不同的数据结构实现同一个问题并进行对比分析,例如,分别使用静态数组和动态分配的连续内存区实现顺序表,使用整型、字符型数组或者链表实现长整数的乘法,使用带头结点或不带头结点的循环链表模拟约瑟夫环等;二是组织程序设计竞赛,让部分学有余力的同学能够在算法设计、程序实现和调试、优化等方面得到锻炼和提高;三是设计综合型课程设计锻炼学生解决问题的综合能力,并通过适当分组,培养学生团队协作精神和能力,锻炼学生解决问题的综合能力的目标,最终达到以点带面全面提高学生能力的目的。
2.2.2实验考核手段
考核手段在教学环节中至关重要。考核手段是学生学习和锻炼自身能力的风向标。为保证每位同学都能积极完成实验并有所收获,避免抄袭和敷衍的现象,笔者采取了综合型的考核手段。其一,提交实验成果,即程序及其运行结果;其二,记录实验过程、分析实验结果以及总结实验得失的实验报告,对实验报告进行选优讲评,培养学生撰写科学实验报告的能力;其三,每位同学必须面向教师讲解自己编写的程序,包括主要思路和细节性语法,优秀的同学可走上讲台宣讲自己的实验方案和程序设计技巧。这就基本杜绝了学生相互之间抄袭程序和实验报告的现象,使得学生真正能够思考问题,并尽力动手完成实验。综合上述三种手段的综合型考核方法既能够达到督促大部分同学完成实验、锻炼动手能力目的,又能够达到培养优秀同学的目的。特别地,优秀同学宣讲活动能够使学生观摩到如何从学生的视角从无到有的解决问题的过程,这能够培养学生解决实际问题的信心并激发其学习积极性。
3应用中遇到的问题
建构式教学模式在应用和推广过程中遇到的主要问题来自三个方面。其一,目前学生的课业负担较重,习惯于被动“填鸭”而不习惯于主动“求索”,这是推动和开展建构式教学模式的主要障碍。其二,建构式教学活动,需要师生的密切交流,但现有师资不足难以满足实际需求。一个可能的解决方法是综合多门课程和多个老师,建构整体的知识框架和学习体系,避免课程教学中的重复劳动,提高师资的利用率。另一个可能的解决方法是利用互联网技术,建立在线教学园地。其三,建构式教学模式仍然处于探索阶段,各学科缺乏建构式教学素材。从笔者在实践教学的体验来看,应尽量从学生的学习背景和能力成长规律出发而不仅仅是从学科背景出发,为学生建构知识体系设计更平滑的路线。
4结语
笔者提出将“培养超越具体程序设计语言技巧的编程技术”和“培养围绕复用的软件开发方式”作为普通本科院校的数据结构教学目标,在建构式教育理论的指导下,设计并实践了一系列建构式教学措施,分析了应用建构式教学模式所遇到的一些问题。
未来将开展两个方面的工作。一是通过问卷调查、统计分析等手段定量地分析建构式教学方法的实际效果;二是创造和积累建构式教学素材,如研究数据结构课程设计过程中不同类型学生的知识建构路线,挖掘并推广其中优秀的知识建构方法。
参考文献:
[1] 教育部高等学校计算机科学与技术教学指导委员会. 高等学校计算机科学与技术专业发展战略研究报告暨专业规范(试行)[M]. 北京:高等教育出版社,2006:8-101.
[2] 蔡敏,郑尚志,梁宝华.“数据结构”课程教学改革之我见[J]. 计算机教育,2009(4):50-51.
[3] 揭安全,李云清,杨庆红,等. 项目教学模式指导的“数据结构与算法”教学改革[J]. 计算机教育,2008(22):21-23.
[4] 郝长胜,贾茹. 运用建构主义理论构建程序设计基础的新型教学结构[J]. 计算机教育,2007(1):24-25.
[5] 严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,2008:135-136.
Application of Constructivism Theory in Data Structures
SUN Lianshan, ZHAO Xiao
1. 引言
“数据结构”是软件工程及其相关专业的一门重要专业基础课程。它涉及数据在计算机的表示、组织和处理,以及相应结构上的算法设计和初步的算法性能分析技术,对培养学生良好的编程思想有很大的作用。我国“数据结构”课程的开设始于20世纪80年代初期,经过近三十年的建设,涌现出了多门国家级精品课程。缺憾的是大多是基于重点大学课程。我国的高等教育成功的从精英教育转型到大众教育,应用型本科的课程建设是摆在我们面前刻不容缓急需解决的重大课题。基于此我们从教学目标、教学方法和实践教学等方面对数据结构的教学加以改革,增强学生对该课程的理解和应用能力。
2. 应用型人才特点
应用型本科与重点大学的研究型本科有着很大的不同,除了在生源、师资、教学条件等方面的较大差别外,主要有以下几个方面。
2.1多样性
研究型本科承担社会所需要的创新型、理论性人才的培养和基础性、原创性科学研究任务;而应用型本科则承担社会各种各样人才需求的培养任务,尤其是适应经济发展需要的实践应用型人才培养的任务。应用型人才更多的体现为一种人才培养目标的类型结构而不是层次结构,这种应用性表现在多方面,也可以区分为学术型、工程型、技术型和技能型等四种应用性人才类型。
2.2综合性
应用型本科教育要避免“重专业技能、轻综合素养”、过分重视人的技术价值、工具价值,忽视人自我发展的价值,要把片面强调学生的职业素质转变为兼重综合素质。应用型本科人才不仅要有一定的理论知识,同时还要有较强的理论技能;不仅要有一定的操作实践能力,还要有较强的创新能力。更要具有较强的理论知识和技术的应用能力,要培养学生构建应用知识进行技术创新和技术的二次开发的能力、科学研究的能力。
2.3实践性
高级应用型本科人才培养模式有别于研究型大学和中国传统的专科教育。根据应用型本科人才多层次、多元化的能力特点,需要构建分类设计、分层施教、分步实施、独立设置的选修与必修相结合的实践教学体系。围绕着社会对人才的创新、创业精神和实践能力的要求,需要构建从课堂内系统的、综合性的实践技能训练到课外的自助式开放实验、贯穿校内学习全过程的专业素质拓展训练和校外实习相结合的培养体系。
2.4生产服务性
应用型本科的发展不同于研究型本科的追求以研究生培养为主,以原创性、基本性理论研究为主旨的发展路径;也不同于我国传统的高等教育以学术性本科生培养为主,以研究型大学为发展目标和参照依据的办学模式,而是在强调必须的学术性和基础理论性的同时,要更加强调面向市场现实需要和学生的实际与未来发展需求,主动积极的为地方经济建设和区域社会与行业发展服务,以服务求支持,以贡献求发展。通过产学研合作教育培养高技能应用型人才的同时要积极从事应用技术研究和实践开发研究,积极致力于把原创性研究成果和学术性实验成果直接推向市场,转化为现实生产力和直接贡献力。
3. 应用型人才培养的教学改革
3.1结合人才培养方案调整课程目标定位
2006年教育部计算机专业分委员会根据国内计算机科学与技术学科的现状和发展趋势,制定了计算机科学与技术学科《战略研究报告》、《专业规范》和《评估方案》,为我国不同类型高校计算机科学与技术本科专业的改革提供了理论依据和参考执行方案。文件的核心观点是“分类培养”,即不同类型的学校应该有不同的培养方案、教学计划和课程教学内容。而数据结构课程是一门理论与工程实践密切相关的综合性课程,在计算机学科教学中具有十分重要的作用。大力加强该课程的建设,提高该课程的教学质量,有利于教学改革和教育创新,有利于创新人才的培养。结合应用型人才培养的特点,课程总体目标调整为通过本课程的学习,要求学生编写的程序结构清楚、正确易读,符合软件过程的规范,从而培养学生的数据抽象能力,真正提高学生编程解决实际问题的综合能力。通过对学生情感的引导,学习策略和方法的交流,知识和技能的指导培养学生热爱《数据结构》课程,培养学生自学能力,独立的程序分析能力和利用C语言开发实用系统的能力。
3.2授课过程设计
数据结构课程的难点在于学生听得懂、看的明白,但当动手设计算法,解决实际应用问题时会感到无从下手。该课程一般在本科低年级开设,对于仅学过一门高级程序设计语言的学生,理解和掌握其中的原理比较困难。学生在学习时,对“数据结构”在计算机科学的算法理论和软件设计中的重要性认识不足,缺乏学习兴趣和学习动力。针对这些问题,注重课程设计、课程实验等实践环节设计是提高课程教学效果的主要措施。要精心选择与课程教学内容密切相关的典型案例,通过典型案例培养学生独立分析解决问题的能力。可把课程必须掌握的技能点设定为必修实验(设计),对于技能延伸性技能点设为选做实验(设计),供学生自由选择,给学生以个性化发展的空间。以基础性与先进性、综合性相结合为原则,筛除部分传统课程体系内的验证性经典实验,加大综合性或设计性实验数量,通过实践环节,提高学生分析问题和解决问题的能力,强化学生的创新能力、技术开发能力培养。在实验教学的方式上,要注重因果式引导、成果型训练,刺激学生的成就感,激发学生的学习兴趣与钻研的好奇心。这种全方位、立体化、系统规范的培养模式创新和实践,可使所培养人才符合社会对创新型、创业型人才的需要。
授课过程中注重理论与实践的结合,采取CDIO模式。CDIO代表构思(Conceive)、设计(Design)、实现(Implement)和运作(Operate) ,以产品研发到产品运行的生命周期为载体 ,让学生以主动的、 实践的、 课程之间有机联系的方式学习工程。CDIO培养大纲将学生能力分为工程基础知识、 个人能力、 人际团队能力和工程系统能力四个层面。
3.3 课程设计思想与内容
实践教学既要注重对学生实践能力的培养,又要重视培养学生的科学思维能力和创新意识与能力。基于此,我们形成如下设计思想:
1、强化基本技能训练,增加提高性实验项目,加强对学生动手能力的指导。
2、用科学研究的思维方式合理组织实践教学内容和相关知识结构,强调理论联系实际,将科学研究的方法引入实践教学。
3、重视独立实践能力,团队合作能力和严谨求是科学态度的培养。
4、强调以开放式教学模式指导实践教学。
在实验内容的选取上,一是已有的经典的材料,根据多年教学的积累和收集的经典材料,加工整理形成实验选材;二是来源于先进技术,基于计算机科学发展的迅速性,学习积累学科前沿知识和先进技术;三是对科研项目的提炼,根据教师承担的有关课题进行提炼。使其既能体现教学中的重要知识点,又能激发学生的实验兴趣。通过通俗易懂的案例,叙述复杂的概念。
3.4 考核检查方式改革
根据教学大纲所规定的教学内容(包括实践环节),改进了考试方式,采用了实验与期末考试相结合的方法,强调了学生对计算机科学基本概念、核心问题以及基本方法的掌握。实验考核注重学习过程。成绩的考核包括平时实验成绩、实验报告以及实验考试成绩四个部分,具体比例为:平时实验成绩占30%,实验报告占30%,上机考试占40%。其中实验报告以实验课上讲的主要知识点为主,平时实验成绩以实验课的综合作业为主,实验考试采取抽签的方式,要求在规定的时间内完成规定的实验内容。
4. 结束语
数据结构课程实践性强,技术更新较快,同时又是计算机科学、计算机应用技术、网络工程、信息工程等专业的基础课程,如何动态调整教学内容、教学模式,提高学生的实际操作能力、分析问题、解决问题的能力,是数据结构教学改革的必由之路。
参考文献:
[1]谢柏青,张铭.计算机基础教学方式改革研究[J].计算机教育,2005(10).
近年来,随着军队信息化建设步伐的加快,各军校都致力于信息类专业的建设[1]。作为信息类专业基础课程和专业课程的结合点,“数据结构”的重要性不言而喻,我院也于2009年确定了“数据结构”重点课程建设,教学对象主要是生长军官学历教育指挥类学员。以建构主义教学理念[2]为指导,将“教员引导下的学员自主学习”教学思想贯彻于课程建设的全过程,把握合理的课程教学体系建设,是本重点课程建设的主要特色。下面,我们将就体现该特色的具体实践过程及其所包含的教学内容体系建设、教学方法改革以及教学团队建设等组成环节进行阐述。
1教学内容体系建设
在课程教学体系中,教学内容是基础,不同的教学内容决定着不同的教学形式与方法,对于学员的知识能力建构的效率和效果也有着不同的影响。目前,各高校普遍压缩了专业基础课教学课时,因此,为了让学员在有限的学时内进行有效的学习,我们必须首先考虑课程教学内容体系建设问题。
一般讲,“数据结构”课程包括线性结构、树型结构、图状结构、查找与排序等内容,并以抽象数据类型、算法度量与评价贯穿其中[3]。各类院校根据其人才培养方案及学员特点,在课程内容组织上也有明显区别:有突出数据逻辑结构的,有侧重算法实现及度量的;有用C语言描述的,有用C++或Java描述的。结合我院信息类专业课程体系设置以及学员特点,根据ACM/IEEE CC2005[4]和教育部CCC2006[5]学科规范,我们在课程内容体系建设方面主要实施了以下几点措施。
1.1采用弹性课程内容体系
由于“数据结构”课程课时有限,本院数据结构课程仅为50学时,课程内容设置不可能面面俱到,必须结合建构主义思想及学员的具体特点确定教学内容。在此次课程建设中,我们在课堂讲授和实践教学环节中均采用了弹性内容体系,在课程讲授内容设置上,我们主要采用了“基本模块”+“扩充模块”的体系,其中“基本模块”包括算法度量基础、线性结构、字符串与模式匹配、树、图、排序、检索等7个模块共16个二级知识点,要求教员必须全部讲解完成;“扩充模块”则包括广义表、AVL树、倒排序及一些前沿应用譬如XML的DOM树、OWL的分类树等,由教员根据学员学习情况灵活掌握实施。
在实践教学环节,我们采用分层次的实验内容体系,自主编写实验教程,设立验证性实验、提高性实验、课程设计等三层次实验要求。其中最基础的验证性实验指课本知识点的具体实现,譬如,线性表存储结构以及其插入、删除、替换、检索等算法的实现等,侧重加深学员对基本数据结构的理解以及基本编程能力的培养;提高性实验则从实际问题解决出发,综合2至3个数据结构的应用或对相关数据结构的算法扩展等,譬如银行的多窗口排队服务,多叉路口车辆调度等问题,需要将现实世界抽象成数据模型并应用相关数据结构的知识解决,有一定建模与实现难度;实验内容体系的顶层是课程设计,以一定规模的实际问题解决为目标,以具体任务为驱动,覆盖数据结构的多种模型,锻炼学员抽象建模和解决问题的能力。根据学时的要求及数据结构教学目标的把握,共计设计了20个实验,其中验证性实验12个,提高性实验7个,课程设计性实验1个,要求学员在数据结构实践过程中至少完成15个实验,包括12个验证实验,任意4个提高性实验以及参加课程设计。
1.2采用C++结合STL(Standard Template Library)框架的描述方法
根据CCC2006的建议,选择面向对象语言C++作为数据结构描述语言,从数据结构的逻辑描述到物理存储及算法实现过程均采用面向对象的分析与设计思路;同时考虑到主流编程语言C++、JAVA及C#等都不同程度地应用了STL框架并提供了常用的数据结构类,譬如Vector、List、Set、Stack、Queue等,在数据结构课程内容中增加了对于主流语言中常用数据结构模板类的分析与编程,以增强学员对数据结构应用的理解。例如,对于STL中的Vector类,其实现功能为大小可动态增长的数组。教学中不仅仅要求学员能够应用该类型,同时要求能够分析理解该类型,譬如要求学员找出其动态增长性实现的代码段,并对其插入、删除算法进行归纳总结等。通过分析STL框架相关类的实现,扩展讲解面向对象思想与概念在实现该类过程中的应用,以提高学员面向对象分析与设计能力。
1.3规范化的教学文档建设
教学是否符合先进的教学理念,是否采用了合理的教学方法,我们从教学文档中就可以看出来,教学文档的形式十分重要,而更重要是教学文档的内容。在本次课程建设中,我们采用了规范化的模板,对课程标准、课程设计、教学计划、教学大纲、教案等进行了统一的设计与规范。譬如,在教案设计中,哪些内容易于CAI展现,哪些内容适合传统板书,我们都进行了仔细研究。譬如概念定义、背景知识、计算结论等,可以拟制要点并进行文本展示;公式定理推导过程如二叉树的性质推导,必须进行板书;原理与过程展示如递归过程分析、树的遍历、排序过程等,推荐使用动画。同时,我们要求教员授课时必须将教材、课件、教案、教学实施表(包括课程标准、大纲、计划)等文档备齐并通过教学组审核。课建组认为:严格规范的教学文档看似传统的要求,实则是课程教学是否成功的前提条件。譬如,课程标准体现了课程的知识体系,即知识建构的基础;教学计划、课程设计与教案则体现了知识的传递体系,即合理地引导学员完成知识的掌握与新知识的建构。通过教学文档建设,提高了课程教学的规范化。
2教学方法改革
在本次“数据结构”重点课程建设中,教学方法改革是研究重点。传统“教员教,学员学”的方法已不能适应“以学员为中心”的学习需要;而照本宣科式的“PPT课件播放朗读”已严重束缚了学员学习过程中的主动性与创造性,与素质教育目标背道而驰。对此,我们在本次课程建设中以建构主义理念为指导,结合“信息化教学”的特点,提出了“网络化协作学习方法”、“基于兴趣的学习模式”两种教学方法并进行了研究尝试。
2.1网络化协作学习方法
“网络化协作学习”是一种以WEB网站和信息资源为依托的新型学习方式[6],在信息资源平台面前,教员和学员、学员和学员之间更加平等,它提高了学员的学习自主性,有利于以学员为中心的学习。在“数据结构”重点课程建设中,我们通过引入“网络化协作学习”,引导学员在课后进行有效的自主学习,从而达到能力培养的要求。在“网络化协同学习”教学方法实施过程中,我们始终把握两个要点:网络课堂的开设与网络化协同学习的实践。
2.1.1信息资源建设与网络课堂开设
开设网络课堂主要依赖网络教学平台和课程信息资源。此次“数据结构”网络课堂建设采用了总部统一配发的网络课程教学平台,该软件平台不仅提供了章节知识点的构建、关联、、检索,而且可以通过公共信息、小组信息、点对点的信息支持交互,该平台能够较好满足教员与学员之间、学员与学员之间的协同学习。基于该网络教学平台,以“数据结构”课程的内容体系为依据,课题组将该课程的章、节、知识点进行了统一的组织,不仅设定了章、节、知识点的隶属关系,还以数据的逻辑结构为线索,将相关知识点进行了关联,形成了“数据结构”课程的知识网,这样做有利学员整体把握该课程;同时,为每一章、节都设置了教学目的、学习方法、学习进度、习题参考、实验练习等栏目,这有利于学员进行自主学习。
2.1.2网络化协同学习方法实践
信息资源的建设是基础,而基于信息资源的“网络化协作学习”实践则是该教学方法改革的重点。 “网络化协作学习”方法实质上是一种建构主义理念指导下的信息化教学方法,它即不同于远程教育模式,也有异于绝大多数的自学网站,“网络化协同学习”强调在教员引导下的学员自主学习和协作学习。在该方法学习中,教员是“导演”,是“总指挥”,教员需要完成学习场景组织、学习进度管理、学习效果评价等活动;学员则可扮演“演员”与“分队指挥”双重角色。作为“演员”,学员需要提出学习计划、实施自主学习;作为“分队指挥”,学员需要组织学习小组、分解学习任务、合成工作成果。
例如,针对模拟实现XML解析器这样的实际应用问题,教员的活动应包括:1)提出应用问题:模拟实现XML文件的DOM存储机制(要求模拟程序能读入、存储XML文件并将XML文件中节点关系按树型显示);2)提示讲解内容:XML文件的DOM存储原理;3)提示学习任务:树型结构的逻辑表示与存储方法、树型结构的遍历、树型结构的显示;4)分配任务给各学习小组,明确学习进度要求;5)验收并讲评学员实验报告等。学员的活动应包括:1)学习任务计划;2)树型结构相关知识学习与交流;3)XML解析器设计;4)XML解析器实现;5)撰写并提交实验报告和相关代码。以上学习活动,主要通过网络课堂所提供的信息、信息浏览、BBS、文件传送进行支持,并通过教员策划组织、学员协作实施的方式完成,是一种有效的“网络协作学习”方法。
2.2基于兴趣的学习模式
“基于兴趣的学习模式”以教育心理学为理论基础,结合“数据结构”课程内容特点,从课程引入、课程展开以及课堂气氛营造等方面进行以提高学员学习兴趣为目标的相关方法研究。该模式的详细论述见文献[7],此处作一简介。
在课程引入阶段,我们将“数据结构”与学员所学专业领域问题相结合,让学员认识到学习“数据结构”课程的现实意义,引发学员的学习兴趣。在课程展开阶段,我们采用“循序渐近式教学”与“任务驱动式学习”两种方法增强学员学习兴趣。“循序渐近式教学”主要指重视先导课与当前课程的衔接,让学员“能够学”;而“任务驱动式学习”则通过应用情景创设提高学员学习知识、解决问题的兴趣,让学员“有兴趣学”。“基于兴趣的学习模式”的第三个主要措施即课堂气氛营造,通过多种方法譬如小组竞赛、知识竞答、结对互助活跃课堂学习气氛,使学员“乐于学”。
3教学团队建设
加强教学团队建设是重点课程建设一项重要内容。教学队伍建设的质量,直接关系到课程教学的质量和人才培养的水平。因此,在课程建设初期,我们根据教研室和课建设小组的具体情况制定了“引进
来,走出去”的教学团队建设策略和具体的教员培养计划,在两年内引进教员2~3名,送学培养2~3名。目前,我们已引进3名具有硕士学位的教员,其中1名教员加入课程建设小组;选送2名教员攻读博士,1名教员攻读硕士学位,其中,1名脱产2名在职;我们还通过短期培训的方式选送教员学习相关专业知识,拓宽视野;通过参加学术会议的方式选派教员参与交流,学习兄弟院校的先进经验。上述措施使教员整体业务水平有了明显提高,教员队伍培养计划圆满完成。此外,通过课程建设活动,我们培养了一批年轻教员,其中有些教员已成为教学骨干。在两年的课程建设中,我们大胆启用年轻教师,每年都有意识地安排部分年轻教员承担“数据结构”的课程教学任务,积极推荐和支持他们参加院举办的各类教学竞赛活动,并指派经验丰富的老教员进行跟踪指导。在这些年轻教员中,先后有5人在课件制作、教学研究以及优质授课比赛中获奖,并取得了一定成绩。
4结语
此次“数据结构”重点课程建设以建构主义教学理念为指导,在教学内容、教学方法、考核方式及教学团队等方面进行了改革与实践,特别是一些改革后的、具有通用性的内容和方法,如“数据结构”课程弹性内容体系、基于兴趣的“数据结构”学习模式以及网络化协作学习方法在本次课程建设得到应用,它为下一阶段的软件基础类课程群的建设打下了基础。
参考文献:
[1] 候喜贵. 军队信息化建设研究[M]. 北京:出版社,2002:17-19.
[2] 张建伟,陈琦. 从认知主义到建构主义[J]. 北京师范大学学报:社会科学版,1996(4):75-82.
[3] 严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,2001:2-3.
[4] ACM/AIS/puting Curricula 2005[EB/OL].(2007-05-08)[2010-12-20]./education/
curric_vols/CC2005-March06Final.pdf.
[5] 教育部高等学校计算机科学与技术教学指导委员会. 高等学校计算机科学与技术专业发展战略研究报告暨专业规范(试行) [M]. 北京:高等教育出版社,2006:38-40.
[6] 陈文汉,张建奇. 高等教育网络化教学研究综述[J]. 比较教学研究,2003(9):46-52.
[7] 张立,王伟嘉,石岩,等. 基于学习兴趣开展数据结构教学[J]. 计算机教育,2010(13):95-97.
Key Course Construction for Data Structure Base on Innovative Teaching Ideology
ZHANG Li,SHI Yan,ZHANG Hongping,WANG Weijia,YU Congbin
中图分类号:G642 文献标识码:B
文章编号:1672-5913(2007)12-0053-03
数据结构课程是信息与计算科学专业的主要基础课程之一,其实验课的教学是整个教学环节中的一个重要子系统。但是,传统的数据结构实验教学是“灌输式”的,从实验目标、内容、步骤、注意事项,甚至程序的调试以及可能的实验结果都面面俱到地由老师讲解,然后由学生“按方抓药”地操作。这使学生处于消极被动的地位,影响其学习主观能动性的发挥,严重阻碍了学生的全面综合素质的培养。为了能在实验教学中充分培养学生的动手能力和创造能力,使其掌握基本的算法设计与程序设技能,提高综合素质,我们在教学内容、教学方法及实验考核体系等方面做了改革。
1更新教学内容:实现实验课程与设计课程分学期开设
由于基础实验课程的教学重点是打基础,主要是为将来高年级综合性的专业实验课或科研工作提供基本方法、基本技能和科学思维的保障。因此,教学内容必须要立足于基本技能、基本方法的讲授,不能片面追求革新而动摇“双基”教学。我们的具体调整方法是将基础实验内容进行优化、组合,使其具有从易到难、由基础到综合的独立系统性。同以往相比,它打破了实验课依附于一门相应的理论课的教学模式,既不受理论课教学进程的制约,而又与理论课教学相互配合。
数据结构设计课程是学生在学完C/C++语言和数据结构两门课后,进行知识综合训练的一个实践环节。其教学目的主要是培养学生的知识综合能力、软件开发能力和软件的调试技术。数据结构实验课和设计课是面向本科二年级学生开设的基础实践课程。但这两门课程各具特点而教学侧重点有所不同。数据结构实验课是一种验证型的教学模式,将课堂上所学的理论知识与计算机上机实践相结合,通过利用高级语言环境对书本上的算法进行验证,从而达到巩固理论知识的目的。而数据结构设计课教学的指导思想是重视理论知识的综合应用,强调整个过程的参与和学习,发挥学生学习的主动性,激发学生的学习兴趣和创造力,培养学生的团队精神和协作意识。根据上述特点,我们于2006年将这两门实践课程分别在不同的学期开设。数据结构实验课在前,重基础,重验证;数据结构设计课在后,重综合,重设计。通过适当调整实践内容,使得前后科学合理地衔接。从实际教学情况来看,我们的改革取得了成功。通过这种独立的连续实践课程的学习,学生无论是在实践基本功还是在综合实践能力方面都得到了明显提高。
数据结构实验课的传统教学内容以验证型实验为主,几乎没有综合型或设计型实验。我们考虑到本学科的特色,删除了部分落后的验证型实验项目,保留有价值的验证型和技能型实验内容,大幅度地增加新的探索型实验内容,或将原先的验证型实验改为探索型实验。例如,以前在做“Huffman树及Huffman编码”实验时,从算法的理解、算法的实现过程以及可能的输出结果等都由教师详细讲解,学生只要在计算机上编辑并调试通过就可以了。现在,我们要求学生在教师上课讲解相关理论知识后,自己动手编辑、调试并出结果,尤其是选择其中权值最小的两个结点的简单算法,需要学生自己编写,同时要求学生思考有几种不同的方法实现Huffman编码算法。做完实验后,还引导学生思考Huffman编码的解码算法应该如何设计和实现。由于学生须独立地完成这一系列过程,不仅掌握了较复杂算法的验证及实现方法,还体验了算法设计的过程,了解了与Huffman编码算法相关联其它知识,更重要的是锻炼了学生的动手能力,培养了他们的探索精神和创新能力,使我们的教学取得了事半功倍的效果。
2革新教学方法:充分调动实验过程中的学习主体
华裔科学家杨振宁先生在比较中美的教学方法时指出:中国传统的教学方法重演绎、推理、按部就班,所以严谨认真,基础扎实,但缺少创新意识;美国的教学方法重归纳、分析、渗透、综合,是一种“体会式”的教学方法,其效果是独立思考能力和创造能力强,易于较快地进入科学发展的前沿,但根基不扎实。如何让两种教学方法取长补短,充分调动学生的主观能动性,激发学生创造性思维,这就要求我们对传统的教学方法进行一系列的改革。我们根据数据结构实验教学的指导思想和教学原则,考虑到培养计划的要求,对每一次实验课都进行精心地策划,主要从课前预习阶段、实践体验阶段和成果交流阶段等三个阶段共五个方面进行改革:
2.1课前预习阶段
要求学生课前充分预习,并要求学生初步了解实验目的和原理、实验环境的使用、操作方法和实验步骤等。教师在讲课之前或讲课过程中通过提问以检查预习的情况,经常鼓励学生自由发言,大家共同探讨实验原理、实验方案以及实验技术难点等,必要时还要介绍上机环境及算法在相应数据结构中的地位和作用,包括使用的编程环境,在验证算法过程中需要注意的问题,讲解如何查找相关资料,并展示历届学生的实验报告样本等。通过课前预习,保证了学生在实验前有了足够的理论储备,使学生在实验中思路清晰,能及时发现问题,其分析问题和解决问题的能力也得到增强,也就更易于取得实验的成功。
2.2实践体验阶段