开篇:润墨网以专业的文秘视角,为您筛选了八篇数据结构课程设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
关键词课程设计数据结构教学模式问题驱动
1 引言
课程设计是课堂理论教学的延伸和补充。作为一门独立的课程,它应该完成如下基本目标:应能够完成理论与实践的结合,应能够锻炼学生的设计创新能力、分析和解决问题的能力。
数据结构与算法课程是计算机科学与技术专业以及相关专业的一门专业基础课程,同时它也是计算机科学与技术专业课程体系中的核心课程之一,它在计算机科学与技术专业的课程体系,特别是软件系列课程体系中处于承上启下、联系左右的中心地位。大量的实践表明,是否学好数据结构与算法课程对于能否学好计算机本科课程有着相当重要的作用,同时也对后续的工作和研究有着深远的影响。
现今,各大学的数据结构与算法课程和教材的内容都主要集中在“基本数据结构的阐述和分析、基本数据结构的应用、典型基本算法的适当渗透”这三个方面。其中,前两部分是重点,并占据了较多的篇幅,而这些内容的教与学离不开大量的实践,所以在数据结构与算法课程教学中经常会有大量的课程实验作为辅助。
通过进一步的深入分析可以看出,上述基本知识的学习并不是最终目标,而是为到达最终目标打下的基础。显然,从计算机科学与技术专业的知识体系可以看出:如图1所示,学习数据结构与算法更深层次的目标是能够针对实际问题来选择、扩展甚至是设计全新的数据结构,然后设计相应的存储结构并加以实现,从而最终完成问题的求解。可以看出,这一过程是一个融会贯通的过程,是不能通过课程实验完成的,也不可能在课堂教学中就可以建立完整意识的,所以在课程之后需要进行课程设计。
为此,数据结构与算法课程设计应能达到如下基本目标:培养学生应用数据结构基本知识来分析问题、解决问题的综合能力;帮助学生建立计算机问题求解的全局意识,主要是通过认识数据结构在问题求解中的地位来完成全局认识的建立(这一全局认识如图1所示);训练学生从系统的、规范的观点来进行计算机问题的分析、设计、编码、测试等。
上面分析得出的数据结构与算法的课程设计目标是符合一般的课程设计规律的。但数据结构与算法课程具有自身的、明显区别于其他课程的地方,再结合计算机专业的特点,就决定了还需要分析并建立适合数据结构与算法课程设计特点的教学模式。所以本文在第2节就数据结构与算法课程设计和其他课程的课程设计进行了对比分析,在第3节提出了一种基于问题驱动的教学模式,并就其中的关键部分给出了详细的描述。
2数据结构课程设计的特点分析
任何事物都是一般性和特殊性的统一,数据结构与算法课程设计也是一样的。和许多其他课程的课程设计一样,它有着课程设计的共性,也有自身的特性。经过和其他课程的课程设计的对比,作者认为数据结构与算法的课程设计主要具有如下特殊性。
2.1不具有明显的整体性
这是由数据结构与算法课程本身的特点决定的。由于该课程的核心内容主要集中于对各种数据结构的认识上,虽然各种数据结构之间总是存在许多内在的联系,但总的来说还是自成体系、较为独立的。
就这一点而言,数据结构与算法课程就和其他许多课程存在不同,也就使得数据结构与算法课程设计具有相应的特点。比如计算机组成原理的课程设计,可以通过做一个完整的、简化的计算机硬件系统(包括的简化的存储器、控制器、运算器等部件)来完成课程内容的全面训练,并让学生建立对计算机组成的整体认识。机械原理的课程设计可以是一个简单的机械系统的设计,完成对机械原理各部分内容的综合训练。而对于数据结构与算法的课程设计来说,几乎不可能构造一个题目把所有的数据结构都包含进去。实际上这样做是毫无意义的,因为数据结构本身就是不断扩展的,在学习、掌握基本数据结构的基础上能够对知识加以扩展并灵活运用才是真正重要的。
所以在数据结构与算法的课程设计中,应强调问题求解能力的培养,而不像其他课程的课程设计那样来强调综合设计能力。
2.2课程内容具有很强的可伸缩性
从发展状况来看,数据结构与算法的发展是极其迅速的,不断地有新的数据结构和新的算法出现,而且针对不同的问题,数据结构与算法可以做出非常灵活的调整。在这一点上它和许多其他课程不同,比如操作系统中可能会不断出现各种各样的调度算法,但都集中在进程管理中,并总归结于资源管理这一基本框架下,只要冯・诺伊曼体系结构不变,操作系统的资源管理框架就不会改变。而数据结构就不同,如就树结构而言,二元树虽然在概念上较为规整,但在实际问题中,大多都采用树结构的变形,如B树以及其他新型变形等,似乎两者都可成为教学的重点。
正是因为数据结构与算法的可收缩性,培养针对问题的数据结构设计能力才是最重要的。
2.3具有极其广泛的渗透性
计算机问题领域包括许多其他行业的问题,如经济领域问题,只要涉及到对数据的组织与处理,都能或多或少地找到数据结构的用武之地,所以培养依托数据结构完成各类问题求解的“嗅觉”是十分必要的。
总的来说,基于数据结构与算法课程的特点,建立起与之相匹配的课程设计教学模式,这样才能更好地完成教学。
3基于问题驱动的课程设计教学模式
在以上分析基础上,如图2所示,本文提出一种基于问题驱动的课程设计教学模式。
3.1问题来源
数据结构与算法课程设计的问题来源(即教学内容)主要包括:基本数据结构在解决实际问题中的应用;基本的算法策略在解决实际问题的应用;新兴数据结构的相关问题;新兴算法的相关问题及实践;经典问题的经典算法;典型系统的计算机模拟;需自行设计数据结构和算法来解决的实际问题。
3.2问题描述
在问题的描述上,侧重于用半自然语言进行描述。完全的形式化描述将减少问题分析能力的培养力度,完全的自然语言描述有包含太少的启发信息。
一般来说,要求问题的描述必须能够清晰地说明问题的含义和目标,并就采用的数据结构适当地给出启发,其中,也可以设计一些题目故意将问题的目标隐去,加强对学生问题定义能力的培养。
3.3问题求解的迭代性
问题求解是不能够一蹴而就的,一开始设计(选取)的数据结构与算法往往存在这样或那样的问题,建立逐步求精、多次迭代的问题求解思维是必要的。
为此,我们需要在学生的课程设计过程中,鼓励学生对其解决方案进行理论分析和实验分析,鼓励学生大胆提出优化方案,鼓励其积极主动的创新意识。
3.4结论形成
最终的结论(体现为课程设计报告)应以数据结构的描述为核心,并集中体现如何针对问题来完成数据结构的设计与优化。
其中,数据结构的描述应以抽象数据型(ADT)为基本手段,并在抽象数据型的基础上,引导学生深刻理解和掌握数据的逻辑结构、性质、特点、基本操作和存储结构的特点、实现和优化,并引导学生在实际应用中有意识地去为实际问题选择恰当的存储表示。
结果分析应采用理论分析和实验分析并重的方式,应适当加大实验分析的力度,使得学生能在分析结果的基础上形成总结并产生启发,最终能形成问题求解过程的全局意识。
3.5结果考核
鼓励学生选择需要设计新型数据结构(至少需要对已有数据结构作出修正)的题目,而不仅仅是实现一个定义明确的数据结构;鼓励优化方案的提出、分析和验证;鼓励学生扩展知识体系,并建立问题求解的修养;鼓励创新意识和主动学习意识的培养。
4 结束语
针对数据结构与算法课程设计的一般性和特殊性分析,本文在提出该课程设计的基本要求后,更提出了适合于数据结构与算法课程设计的“以问题求解为核心”的教学模式。近年来,经过对计算机科学与技术专业本科生的多次实践,可以看出,这一模式可以取得很好的教学效果。
参考文献
1 耿蕊,李敬有,邓文新.关于计算机基础课课程设计的研究.高师理科学刊,2005,5
2 郭福顺,廖明宏等.数据结构与算法基础.大连:大连理工大学出版社,2000
关键词:实践课程;能力结构;研究性学习;创新实践能力;模块化教学
中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2014)49-0135-03
“十五”期间,国家教育部计算机科学与技术专业教学指导委员会发表了《高等学校计算机本科专业发展战略研究报告暨专业规范(试行)》。《规范》中提出了“专业方向分类”发展的基本思想和三个辅助建议,辅助建议其中之一是“加强学生实践和动手能力的培养”。
数据结构课程是计算机科学与技术专业的一门专业基础课。该课程的任务是学会从解决问题入手,为所加工的数据选取适宜的逻辑结构、存储结构及其算法。初步掌握算法的时间与空间复杂性的分析方法,同时进行复杂程序设计的训练,使编写的程序代码结构清晰、易读理解,符合软件工程的规范。教学计划是一个整体,实践教学体系是整体教学计划的一部分。数据结构实践课程是数据结构课程的重要组成部分。本文从支持研究性学习及创新实践能力的数据结构实践课程教学体系的构建、以提高创新实践能力为重点的数据结构实践平台的完善以及以能力结构教学目标为依据的知识单元模块化教学的具体实施等三个方面进行实践课程的教改探索。
一、以能力结构培养目标为驱动,构建数据结构实践课程教学体系
知识结构、能力结构和综合素质是人才培养与人才评价的三个主要因素。其中,能力结构是第一位的,知识结构与综合素质都是为能力结构做支撑服务的。要强化学生的能力结构,就必须形成较完备的实践教学体系,将实践课程教学体系作为一个系统来构建。理论课程体系的设计主要体现专业结构、知识结构的培养目标要求,从而确定理论课程的知识领域、核心知识单元和知识点。而实践课程体系的设计应主要体现能力结构的培养目标要求,从而确定实践课程体系的各个单元目标和具体指标。数据结构课程的能力结构目标主要包括:学会从解决问题入手,识别典型的数据结构的逻辑结构特性的能力;能够为所加工的数据选取适宜的存储结构的能力;设计及实现问题求解主算法和主函数的能力;基本掌握算法的时间与空间复杂性的分析能力;基于高级编程语言,编写复杂软件的程序代码的基本能力等。数据结构实践课程的教学体系由六个部分构成:课程实习、课程实验、课程设计、课程社会实践、实践教学评测和实践教学文档及资源。
1.课程实习是指对课程实验和课程设计的基本技能和综合技能的研究性学习和实践技能的训练。课程实习的基本技能包括:高级程序设计语言编辑器及语言的使用;程序的模块化划分的技能;常用人机交互界面的简单设计等。综合技能包括:应用抽象数据类型的设计思想,在实现数据结构基本操作的基础上,确定功能模块间必要的联系,设计、调试主算法和主函数,系统的可视化界面的初步设计,对所完成的算法进行时间和空间的性能评价,从而完成数据结构的基本应用。
2.课程实验是指配合课堂理论教学、以增强学生能力结构为目标的专业技能训练。实验课题的基本内容包括:线性表类应用实验、栈和队列类应用实验、树和图类应用实验、查找和排序类应用实验以及自主研究性应用实验等。通过课程实验,使学生加深对课程内容的理解,培养将原理应用于实际的能力。
3.课程设计是指对理论课程的核心知识点以及能力结构的综合技能的专业训练。课程设计的课题包括:综合训练性题目和研究学习性及创新设计性题目两大类。例如,立体化停车场管理、电梯运行模拟、二进制堆及其应用、线段树及其应用等。课程设计的目的是全面落实课程教学大纲,激发学生自主研究性学习及完成创新性实验的积极性,提升学生软件设计的综合实践技能。
4.课程社会实践。课程社会实践是指对课程实验及课程设计的课题所进行的社会调研与实践。课程实验的调研主要是对设计性和研究性课题做调研,课程设计则主要是对应用性和创新性课题做调研,为提高创新实践能力打基础。
5.实践教学评测。实践教学评测是指对实践课程教学效果的评价和对学生实践课程成绩的评定。实践教学评测的目的是依据课程的能力结构培养目标,科学合理的评定学生的实践课程成绩,使课程教学效果得到及时反馈,以促进实践课程教学的不断改进。
6.实践教学文档及资源。实践教学文档及资源是指为了保证实践课程教学体系的各个环节有机结合、正常运转的课程教学文件和参考资料。实践教学文档及资源包括:课程实习、课程实验、课程设计、课程社会实践的教学大纲和实施方案,实践课程教学考核与评价的实施方案,以及实践课程教材与多媒体实践课件等。
数据结构实践课程的教学体系要从自身的特点出发,对课程实习、课程实验、课程设计、课程社会实践、实践教学评测等诸多教学环节进行整体、系统的优化组合。以能力结构培养目标为驱动,并将支持学生的研究性学习及创新实践能力机制纳入到体系中。
二、以提高创新实践能力为重点,完善实践课程教学平台
大学生的实践能力包括基础性实践能力、综合性实践能力和创新性实践能力。如何在数据结构实践课程教学体系中,通过日常的教学活动和过程管理,形成以提高创新实践能力为重点的教学机制,是实践课程教学体系建设的中心任务。研究性学习是指在教师指导下,根据所选择的课题,主动地获取和应用知识、解决问题的教学活动。创新的基础在于研究性学习,研究性学习的核心活动是实践和创新,创新能力的培养在于实践。课程实验和课程设计的研究性学习是以研究和设计为中心的实践性教学活动。在构建实践课程教学体系的基础上,通过设计课题项目、组建课题项目团队、开展项目教学法、注重项目过程管理、鼓励研究性学习和实践创新能力、实施创新评测机制等,逐步完善以提高创新实践能力为重点的实践课程创新实践平台。图1是基于数据结构实践课程教学体系,以提高创新实践能力为重点的实践课程创新实践平台的总体框架设计。其中,课程实习、课程实验、课程设计是创新实践平台的核心内容。
1.开展项目教学法,注重项目过程管理。项目教学法是通过实施一个完整的项目而进行的教学工作。在数据结构实践课程教学中,将项目教学法应用到课程实习、课程实验、课程设计等各个教学活动中,培养学生良好的科研素质。通过课题的立项与开题、组建课题小组、方案分析、方案设计、方案实现和项目验收的工作流程对学生进行科技创新活动的工程实践训练。抓好课题项目的过程管理是十分重要的工作任务。其中,抓好课题组长的业务培训、课题组项目的认定、课题的阶段验收是项目过程管理的重点。
2.重视课题项目设计,促进拔尖创新人才发展。依据培养目标的能力结构和教学规律,科学、合理的设计课题项目,是开展项目教学法和项目过程管理的第一要素,也是教师发挥教学活动中的主导地位的首要任务和关键环节。课程实验的课题类型有验证性实验、应用性实验和创新设计性实验。验证性实验属于学生自主研究性学习的课下实验;设计应用性试验和自主创新性实验是课上实验,还要完成相应的实验课题报告。课程设计的课题类型有综合训练型和研究创新型。遵从教育规律和认知规律,将课程设计的课题项目分级分类设计,以促进学生的阶梯式发展。
3.组建课题小组,形成研究性学习氛围。根据多元智能理论,每个人都拥有不同程度的八种智能,由于智能组合形式以及每种智能的表现形式不同,每个人的智能是独一无二的,这也体现了个体的差异性。以学生自愿为原则,组建课题小组。课题小组的人员构成要考虑学生的气质和性格差异,达到智能互补和优势互补,促进学生的个性发挥和全面发展。通过组建项目团队,竞争项目负责人,在课题组长的带领下,开展课题项目研究,协同合作、相互交流,体现团队精神,营造研究性学习氛围,还可以使拔尖创新人才脱颖而出。
4.建立创新评测机制,激励创新人才。建立一套完善的实践教学的评测机制是十分重要的,实践课程教学评测的指标中,应有创新人才的激励机制。只有将学生的课程实习、课程实验、课程设计、课程社会实践等实践教学环节都纳入到评测机制中,才能对学生进行综合全面的考核和评价。
对于学生实践环节的成绩认定,要依据能力结构指标考核并单设成绩计入学分,不合格的同样需要补考或重修。以课题组为单位,组员和组长间都可以互评,作为考评依据。
三、以能力结构目标分解为依据,实施技能知识单元模块化教学
计算机科学与技术专业学生的能力要求可以归纳为计算机思维能力、算法设计与分析能力、程序设计与实现能力和系统能力。数据结构实践课程的能力结构要求在上述能力结构中都有相应的体现。可以按能力结构培养目标的要求,将目标分解,采用分阶段的技能知识单元模块化教学。
1.能力结构教学目标分解。采用质量目标管理方法,将实践课程能力结构的教学目标以计算思维能力为基础,通过层次分解,将数据结构课程教学目标分解为理论知识单元和技能知识单元,再分解为若干知识模块,每个知识模块又蕴含若干知识点。例如,可以将数据结构课程中线性表的基本技能知识目标分解为静态顺序表、动态顺序表、单链表、双链表、循环链表等具体的存储结构、基本操作和简单应用等实践教学目标。通过对实践教学目标的分解,使得师生都清楚具体的质量目标定位,掌握学习进度,激发教师的主动性、学生的自主性及研究性学习热情,将充分的精力投入到提升创新实践能力的活动中。
2.技能知识单元模块化教学。依据分解的数据结构实践课程的能力结构教学目标,打破传统的以理论知识为中心的学科式课程内容体系,取消章节限制,把密切相关的理论和实际操作技能有机地结合起来,组成知识领域,建立若干知识模块,每个知识模块又可由若干子模块构成。每个子模块又由若干个知识单元或课题组成,从而使实践课程的教学形成一个“积木组合式”的模块化教学模式。例如,数据结构实验课程的基本技能模块包括:线性表子模块、栈和队列子模块、树和图子模块、查找和排序子模块及自主研究性应用子模块等。线性表子模块又包括顺序表子模块和链表子模块。子模块的内容又根据目标分解的技能指标构成。技能知识单元模块化教学是以技能训练为核心的一种教学模式。通过技能模块化教学方法的实施,可以强化学生的技能训练,促进学生动手能力的提高。
3.打造实践课程教学团队。建设一支由课程主讲教师、实验指导老师、实验基地组成的实践课程教学团队,针对实践课程教学的各个环节,从课程实习与实验指导、实践环境维护管理、课程设计与课程社会实践、研究性学习与创新实践能力等方面全力指导,由团队负责课题项目的设计、组织和实施,统一于教学目标,服务于教学质量。
4.搞好实践课程教学评测与教学资源建设。构建实践课程教学体系及完善实践课程教学平台,这是培养创新人才的硬件要素;搞好实践课程教学评测与教学资源建设,则是培养创新人才的软件要素,二者缺一不可。对数据结构实践课程引入技能单元模块化教学后,每个模块是一个相对独立的能力实体,每个模块结束后,都可以进行考核,及时检验模块化教学的学习效果。课程实验成绩的评定可以采用百分制,由平时实验课成绩、实验报告成绩、实验程序验收成绩组成,按一定的比例折算到实践课程的总成绩。
四、结语
实践课程教学改革在计算机科学与技术专业2010级的学生中试行,在2011~2012级的两个年级中实施,实际受益人数达600余人。经过两个年度的实践课程教改探索,确定了数据结构实践课程的总体改革方案以及实施方案,精心准备并完善了课程实验和课程设计实践课题,组建了课题小组,培训学生课题组骨干,完成了相关的教学文档建设和课程资源建设。综上所述,通过对数据结构实践课程体系的分析和研究,论述了以能力结构培养目标为驱动出发,构建研究性学习与创新实践能力的实践课程教学体系,以提高创新实践能力为重点,完善实践课程教学平台,以能力结构教学目标分解为依据,实施知识单元模块化教学的措施,从而实现数据结构实践课程的具体教学目标,推进计算机专业的整体化教学改革。
参考文献:
[1]教育部高等学校计算机科学与技术专业教学指导委员会.高等学校计算机科学与技术专业发展战略研究报告暨专业规范(试行)[M].北京:高等教育出版社,2006.
关键词:数据结构;精品课程;课程建设;课程教学
精品课程建设是教育部“高等学校教学质量与教学改革工程”的重要组成部分,是贯彻落实《教育部关于加强高等学校本科教学工作提高教学质量的若干意见》精神,进一步更新教育观念,提高教学质量和人才培养质量的关键[1]。精品课程建设是教育新理念的体现,是新时代教学手段的具体运用,是各种教学资源的开发与整合,是学生自主学习、探究学习的窗口,是实施素质教育的新途径[2]。精品课程的建设有利于优质教育资源的传播和利用,也是我国教育事业的一次大的改革[3]。如何正确理解精品课程内涵、探索实现精品课程的科学途径,对确保这一质量工程的顺利进行具有重要意义[1]。
数据结构是计算机专业的核心基础理论课,在整个专业知识体系中占据非常重要的地位[4]。通过学习数据结构课程,不仅要为后续课程打好基础,而且要进一步提高学生的数据抽象能力和程序设计能力。数据结构课程概念多、方法多、逻辑性强、实践性强,这些特点决定了教与学的难度大,其教学水平和效果又将直接影响后续课程的学习以及学生程序设计实践能力的提高[5]。但是许多学生对于数据结构的概念、知识理解不够,思考分析能力还处于一个较低的水平,所以不少学生反应数据结构是比较难学的一门课[6]。这些年来,我校各级领导对数据结构课程非常重视,加大力度进行组织建设,特别是在教学内容组织、师资队伍建设、教学模式改革、实践环节加强以及共享资源的开发等方面,具体论述如下。
1教学内容的组织
数据结构作为计算机专业的核心基础课,主要思想是问题求解的理论与方法、抽象和设计的理论与方法等[4]。于是我们将课程内容分为概念表述、构建数据模型、算法设计与实现3个层面,突出数据组织方法与算法的实现技术,以适应不同层次的教学需求。采用面向对象的思想方法介绍数据结构的相关理论与方法,贯穿程序设计的思想观点,引入抽象数据类型的概念及其基本性质,重点培养学生的数据抽象能力,突出构造性思维训练,强化程序抽象能力和数据抽象能力的培养。
在教学过程中,我们围绕抽象数据类型,采用面向对象的思想观点,从基本概念、基本结构、基本方法来讲解教学内容,并贯穿了计算机专业的一些问题求解方法。使用熟悉的C语言作为算法描述语言,便于学生把注意力集中在算法的理解上。通过给出用C语言实现抽象数据类型的方法,使数据结构的表示容易理解。采用定义、存储以及典型算法实现来展开教学内容,并引导学生提高实际的应用能力。
我们在组织教学内容的时候注意知识点的前后呼应,而不是以简单的流线形式呈现[7]。通过实践证明,这样可以帮助学生在学习新知识的同时复习以前的知识。例如有关排序知识,在程序设计课中已经学习了冒泡排序、选择排序,在数据结构课中又学习直接插入排序、希尔排序、归并排序、快速排序、堆排序等;这些排序算法可以应用于现实生活的很多地方,学生成绩的排序、大学食堂买饭菜的排队等;同学们在学习新的排序算法的同时可以复习以前的排序算法;还可以在自己熟悉的应用问题中实现各种排序算法,并对它们分析比较,收到很好的教学效果。
2师资队伍的建设
教学质量的优劣取决于课程负责人、主讲教师的教学水平和整体的能力[8]。课程建设需要有一支结构合理、综合能力强的教学师资队伍;建设学术水平高、教学水平高的师资队伍是保证课程教学质量的关键。因此精品课程的建设过程也是筛选和培养一流教学师资队伍的过程。通过精品课程的建设,我们组建了一支由8名教师组成的结构合理、综合能力强的教学师资队伍,其中高级职称3人,中级职称4人,初级职称1人。教学队伍中所有老师具有硕士或博士学位;年龄呈现梯队结构,其中30岁以下的2人,40岁以上的2人。
本课程的教学师资队伍中不但有主持过多项科研、教研项目的教授,也有教学经验丰富的主讲教师,并配有动手能力强的专职实验教师。在课程建设过程中注重对青年教师的培养,通过“传、帮、带”的办法,使青年教师走上主讲教师的岗位,逐步挑起教学重担;鼓励中青年教师参加相关领域的师资培训学习、参加科研和教研活动等,逐步提高他们的综合能力。
3教学模式的改革
我们主要选择并推广精选案例(Selected Cases)、扼要讲解(Briefly Explain)、任务驱动(Task-Driven)的教学模式,简称SBT教学模式[9]。
第一步,任课教师在深入钻研数据结构教材的基础上,根据课程的教学目的精心选择教学案例。所选案例既能反映教学内容要表达的思想,又能让学生容易理解。因此要求教师明确数据结构课程的教学目的:学生通过本课程的学习掌握如何根据问题的需求合理地组织数据,在计算机中有效地存储数据和处理数据[10];通过该课程的实践环节,对学生进行程序设计的训练,巩固加深对数据结构的理解,提高综合运用本课程所学知识的能力,培养学生独立思考、分析问题和解决问题的能力[11]。
第二步,任课教师对教学内容进行概括,结合教学案例进行简单扼要地分析讲解,使学生理解有关概念、掌握有关操作。在教学过程中注意启发学生思考问题、分析问题,引导学生解决问题,提高学生的实际动手能力。
第三步,任课教师给学生布置具体课外任务,通过学生独立完成具体的课外任务来实施教学。其中课外任务的提出可以结合学生的特点和兴趣,使学生按自己的需求去学习,从而培养出独立思考、勇于创新的自学能力[12]。
例如在讲解哈夫曼编码的内容时,我们一般先讲一个简单易懂的实例。学生很快就能理解哈夫曼树的构造过程以及具体的哈夫曼编码形成过程。然后引导学生理解哈夫曼树的存储和哈夫曼编码的存储。在学生掌握了这些存储结构之后,再结合实例讲解哈夫曼树的构造算法、哈夫曼编码的求解算法。最后布置课后作业完成一个求解哈夫曼编码的实例程序,大多数学生能够按时完成任务,教学效果良好。
4加强实践环节
数据结构实验应能达到如下基本目标:培养学生应用数据结构基本知识来分析问题、解决问题的综合能力;帮助学生建立计算机问题求解的意识,主要是通过认识数据结构在问题求解中的地位来完成这种认识的建立;训练学生用系统的、规范的观点来进行计算机问题的分析、设计、编码等[13]。
首先,改善实验条件。在各级领导的大力支持下,我们更新了计算机专业实验机房;实验所需软件都能在新学期开学之前完成安装调试;每个实验室配备一名维护人员,负责实验室的运行与维护;设备完好率99%以上,实验开出率100%。除了规定的上机实验以外,提倡学生自己课余时间上机练习。为此,学院设有两个开放实验室,配备专门的实验指导老师对学生免费开放。机房内计算机专业学生身影不断,有的在复习教师的课堂教学内容,有的在阅读网上的参考资料,有的在下载教师布置的作业,有效促进了良好学风的形成。
其次,加强实验管理。在开学之初,主讲教师与各班学习委员确认课内上机时间,并通知到每一个学生,实验指导书、教材、习题集同时发到每个学生。每个学生必须完成教学大纲规定的8个实验项目,实验成绩占30%;所有实验实现1人1组;实验前安排1次答疑;学生上机前必须完成预习,写出完整的源程序,准备好上机步骤和调试数据。在实验过程中遇到学生提问时,老师给学生一些提示信息,尽量让学生自己将程序调试通过;实验后要交实验报告;教师批改后评定成绩,不合格的学生必须重做。
第三,注重课程设计。课程设计是对所学知识的巩固提高,是培养科研能力的重要环节。引导学生搞好课程设计的关键是选好题目与做好课程设计的准备工作。而课程设计题目的选择要和所学知识紧密联系,又与学生的创新能力培养密切相关。通过课程设计积极引导学生参加课外科技活动、校级省级程序设计大赛、大学生创新项目的探索等,以提高学生程序设计能力。
5共享资源的开发
建设精品课程的目的是通过为学生提供优质的教学资源来提高教育质量。我们在课程建设中使用网络技术手段,建设了精品课程网站。精品课程网站由以下几个部分主成:课程介绍、课程负责人、课程特
色、申报材料、教学大纲、课件与教案、教学录像、教学论坛等。其中课件与教案就是教师上课使用的课件和教案,方便学生在不同时间、不同地点进行下载,然后根据自己的需要进行自主化的学习。任课教师还把自己的实验程序、常见问题分析、习题解答等内容放到网上,供同学们学习参考。
6结语
随着计算机技术的不断发展,教学改革也在逐步深入,这必将对数据结构课程的教学提出更高的要求。因此精品课程的建设是一项长期的工作,也是一项综合的系统工程。在今后的课程建设过程中,我们要用先进的教育理念武装自己,不断扩充新的教学内容,完善教学网站,强化实践教学环节,为学生提供更多优质教学资源,培养出更多更好的符合社会需求的应用型人才。
参考文献:
[1] 侯治富,金祥雷,谷树严,等. 精品课程建设目标及实现途径的研究与实践[J]. 中国大学教学,2006(1):21-23.
[2] 李银芳. 高校精品课程建设中应注意的几个问题[J]. 中国高教研究,2007(1):91-93.
[3] 许坦,石. 精品课程发展现状综述[J]. 中国电化教育,2007(5):53-56.
[4] 严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,2002.
[5] 耿国华,王小凤,张德同.“数据结构与算法”课程工程型知识体系研究[C]//大学计算机课程报告论坛组委会. 大学计算机课程报告论坛论文集. 北京:高等教育出版社,2009:9-13.
[6] 顾沈明,张建科,李鑫. 数据结构教学模式的改革与实践[C]//浙江省高校计算机教学研究会. 计算机教学研究与实践. 杭州: 浙江大学出版社,2010:111-114.
[7] 刘雪梅,袁文翠,富宇,等.“数据结构”教学模式变迁的若干思考[C]//大学计算机课程报告论坛组委会. 大学计算机课程报告论坛论文集. 北京:高等教育出版社,2006:535-537.
[8] 耿国华. 数据结构课程改革与教学资源建设[C]//大学计算机课程报告论坛组委会. 大学计算机课程报告论坛论文集. 北京: 高等教育出版社,2006:150-153.
[9] 潘洪军.“精选案例,扼要讲解,任务驱动”教学模式[J]. 中国高教研究,2008(11):55-56.
[10] 王玉峰,刘宝旨,王猛刘,等. 也谈“数据结构”的教学[J]. 计算机教育,2007(15):21-23.
[11] 舒坚,刘琳岚,陈斌全,等.“数据结构”课程实践教学改革的设计与实践[C]//大学计算机课程报告论坛组委会. 大学计算机课程报告论坛论文集. 北京:高等教育出版社,2007:401-404.
[12] 王炳强,张植才. 任务驱动法在C语言程序设计课程中的应用[J]. 黑龙江科技信息,2009(5):53.
[13] 李治军,廖明宏,张岩. 数据结构与算法课程设计教学模式的探讨教学资源建设[J]. 计算机教育,2006(2):54-56.
Organization and Construction of High-quality Course of Data Structure
GU Shenming, WU Yuanhong, HUANG Haifeng
(School of Mathematics, Physics and Information Science, Zhejiang Ocean University, Zhoushan 316000, China)
课程衔接 层次性教学 任务驱动教学
一、引言
设计、实现一个复杂或者高级项目的软件项目,可能需要涉及程序设计语言、数据结构、算法设计与分析、计算机网络、数据库等许多课程。而计算机科学技术专业的每一门课程都是从基础理论入手,复杂、高级项目不适合作为课程的学习案例或者习题。
不少课程选用比较简单和容易理解的小项目作为例题讲解知识点或者作为习题巩固学生所学知识点。比如约瑟夫程序,在程序设计语言中是链表操作习题,而数据结构课程中又作为线性表的习题或者上机题目;图书馆管理程序,可能作为数据结构课程的线性表的课程设计题目,也可能作为数据库课程范式优化的例题;集合的交集和并集可能作为离散数学课程的习题,也常被选做数据结构课程线性表操作的算法优化例题;网络蜘蛛常被作为计算机网络课程的课程设计题目,也常因为其中的典型树形结构关系被数据结构课程选作综合性课程设计题目;多优先级作业调度既是操作系统课程的主要研究内容,也是数据结构课程队列内容的习题。
以往的教学实践反映,很多学生学完课程之后并没有达到预期的目的。究其原因,一是对学生动手能力的培养没有到位,以至于部分同学对课程的学习还停留在“纸上谈兵”的阶段;二是对学生自主学习能力的培养没有到位,以至于涉及讲授范围之外的问题学生就不知从何入手。可以采用分层次教学,就是要因材施教,根据大多数学生的情况,正确处理教学中难与易、快与慢、多与少、应知与应会的关系。充分发挥学生学习的主体作用,转化差生、培养优生,全方位增进教学效果。
目前的教学活动,主要考虑的先后关系,而没有建立良好的课程的衔接关系。需要研究、整理他们直接的衔接关系。
需要整理本课程案例,考虑与先修课程或者后修课程的关系及所选题目的价值和意义,同时对案例采用层次性分解方法,满足层次性教学需求。
鉴于计算机专业本科教学课程数量多,本文针对计算机两大具有紧密关系的核心基础课程《数据结构》和《程序设计C语言》进行探索,并期望扩展到其他课程。
二、课程的衔接关系
C语言程序设计与数据结构是工科院校计算机专业中开设的两门重要的专业基础课。在以往教学中,这两门课程是相对独立、分开授课的,因此导致内容脱节,教学效果差。一般C语言程序设计课程只注重C语言的语法体系,因此学习后却不能用C语言进行程序设计;后者则注重讲授抽象的数据关系和算法在计算机中的表示及实现,学生能进行抽象算法的描述,上机实践应用时却无从下手。然而,这两门课程都以培养学生解决实际问题的程序设计能力为共同目标。因此,如何将这两门课程有机地结合起来,构建C语言与数据结构的新体系,改革教学方法,提高教学质量,成了当前教学改革中亟待解决的问题。
在传统的教学模式下,C语言程序设计与数据结构这两门课程分开教学。C语言程序设计的学习主要在语言语法的层次上,数据结构难度较大,注重思维训练,造成学生不能结合有效结合这两门课程运用到实际中去。通过不断探索,认识到这两门课程有很多内在联系,如软件是用一种程序设计语言编写解决该问题的算法,通过编译、链接成为可执行程序而成,而算法是通过处理输入数据转换为输出的解决方案,因此数据结构和程序设计语言密不可分;再比如数据结构讨论的抽象数据关系和算法要用C语言去实现等。
针对差异化的学生现状,整理课程关系,精巧的设计教学案例和习题实现任务驱动式教学法,对于调动学生学习兴趣,先修课程的简单案例让学生能够逐渐独立实现,有助于学生产生满足感,增加学习自信心;对于案例的扩展性引导,启发学生深入思考和逐步掌握自学方法,通过自学后修课程,提出的较难的问题又有助于激发学生参与后修课程学习的积极性。
三、拟解决的主要问题
数据结构与C语言课程的结合方式的探讨,针对探讨结果设计实际结合方法,并在学生中实践,选择最佳结合方式。
数据结构与C语言,每门课程需要有经验的任课教师结合本课程特点,探讨并确定各个案例与各知识点和其他课程关系,针对学生差异性现状和任务驱动式及层次性教学需求,对选择的案例采用递增式设计;确定跨课程案例及相关课程名,涉及的知识点。探讨选择的习题(包括课堂练习题、课后思考题、课后作业、上机实验题和课程设计题目)于知识点及其他课程的关系,标注习题难度级别,以达到层次性教学目的。
针对这两门课程的案例和习题,深入探讨相互关系,特别是相互的衔接性,C语言课程首先需要讲解基本语法知识,帮助初学者建立简单的程序设计过程思想,但由于教学时间限制,只依靠课内学习和课后作业及上机实验是不能充分达到熟练运行C语言解决问题,编写项目程序的目的。
C语言是大一学生首先接触的程序设计语言,加上许多学生还存在中学时期的一切依赖老师的学习方法和观念,未能进一步学习并提高程序设计能力,因此在后续课程中,比如数据结构课程中需要在讲解数据结构抽象数据类型及解决问题的时候,学生应该尝试借用C语言编程实现抽象算法。因此,应该结合学生的这个实际情况,进一步细化和分解选择的案例和习题,让学生在C语言学习过程中学会应用C语言解决和数据结构简单问题相关任务,为数据结构课程打下坚实基础;而数据结构课程中有意识的安排一些案例和习题,让学生能够有运用C语言解决简单问题的能力,并通过数据结构课程的学习和培养,掌握复杂问题的解决方法和更加熟练的应用C语言工具。
四、总结
根据计算机课程关系,设计优化与其他相关课程有关系的案例与习题,一来可以引导学生理解后修课程部分内容,引起学习兴趣,二来在一些先修课程已经介绍本课程该知识点的基础上,提出新的解决方案或者优化方法,更容易激发学生探索问题的好奇心和解决复杂问题的满足感,加强学生理解课程相互关系和培养计算机创新思维。
以数据结构课程和程序设计语言课程为例整理课程关系,研究和设计教学案例及习题,满足学生差异化需求和对学习内容的兴趣,进行层次性教学,将其经验和方法最终推广到计算机本科教学的各课程。
参考文献:
[1]黄迪明.C语言程序设计(第2版)[M].成都:电子科技大学出版社.
[2]吴跃,李树全,尚明生.数据结构与算法(第2版)[M].北京:机械工业出版社,2010.
[3]萨师煊.数据库(第3版)[M].北京高等教育出版社,2000.
[4]傅彦,顾小丰,王庆先.离散数学及其应用.北京:高等教育出版社,2007.
关键词:数据结构;理论教学;实践教学;教学改革
中图分类号:TP311.12-4 文献标识码:A 文章编号:1007-9599 (2012) 17-0000-02
1 课程内容
《数据结构》是计算机科学中一门综合性的专业基础课,也是其它辅修计算机专业的必修课程。本课程讨论了软件设计中经常遇到的线性表、堆栈、队列、串、数组、树和二叉树、图等典型数据结构的逻辑结构、存储结构和操作的实现方法,以及递归算法设计方法和各种典型排序和查找算法的设计方法。并对算法进行性能分析和比较,内容非常丰富。数据结构课程是一门理论和实践相结合的课程。本课程包括讲授和课内上机实验两部分教学内容。课内上机实验是为训练学生的实际程序设计能力安排的。
课程的目标是使学生掌握数据基本的逻辑结构和存储结构、一些典型的数据结构算法及程序设计方法和技巧,要求学会分析数据对象特征,掌握数据组织方法和计算机的表示方法,为数据选择适当的逻辑结构、存储结构以及相应的处理算法,要求具备算法分析的基本技术和能力,并培养良好的程序设计风格,掌握开发复杂、高效程序的技能。
2 理论教学方法与手段的探索
遵循以学生为主体,以教师为主导的教育理念,针对理论教学和实践教学的不同特点,合理进行教学设计,推进教学方法和教学手段改革。课堂上引入启发式教学,充分发挥学生的学习主动性,重视自学能力的培养,引导学生积极思考,活跃课堂气氛,适当压缩授课时数, 留给学生更多的思维空间和自学空间,增加学生阅读参考书、科技文献和写读书报告的时间。数据结构的教学策略:
(1)激发学生的学习兴趣
兴趣是最好的老师,只有激发了学生的学习兴趣,才能事半功倍,取得更好的学习效果。在教学中通过具体的实例说明数据结构在程序设计中的重要性,从而激发学生的求知欲,让学生充分感受到数据结构算法设计的魅力,调动学生思考的积极性。鼓励学生对教学内容提出疑问,师生共同讨论,从而提高教学和学习水平。在课堂上随时提出一些思考题,对一个结构从不同角度讨论。例如,对于线性结构,讨论线性表、栈和队列各自的操作特点。鼓励学生在学习过程独立思索,提出不同的算法,深化对问题的理解。例如在讲解循环队列时,如何判断队空和队满,有的同学提出三种解决方法。对于这样的同学,我们及时给与表扬和鼓励。
(2)教学内容的有机组合
在现有教学大纲的内容的基础上,不断吸收新知识、新内容,补充考研试题。对教学内容的安排重新进行拆分和重组,突出重点、细化难点。运用面向对象的学习方法讲解数据结构,每一种数据结构的学习方法都是相似的,重点介绍数据结构的逻辑关系、基本操作和在不同存储方式下基本操作的实现,介绍数据的逻辑结构和物理存储之间的关系,及物理存储在类C语言中的描述,数据结构的主要内容可用以下的体系结构来表示。
学生在了解了数据结构课程的核心内容后,算法的实现就不难理解了。例如:我们在讲授线性表的复杂操作有序表的合并时,先从逻辑上看是如何实现的,介绍算法设计思想,然后讲解两种实现算法:顺序存储方式和链式存储方式下的算法,让学生自己比较两种算法,加深理解。
(3)双向互动式的教学
改变原来“填鸭式”的教学模式,变以教师为主的教学方式为以学生为中心的教学模式,教师只起画龙点睛的作用。课堂上引入启发式教学,充分发挥学生的学习主动性,重视自学能力的培养,引导学生积极思考,活跃课堂气氛,适当压缩授课时数,留给学生更多的思维空间和自学空间,增加学生阅读参考书、科技文献和写读书报告的时间。为了更方便和鼓励学生自主学习,我们建设了数据结构精品课程网站,有授课视频、教学课件、各章习题和考研辅导等学生内容,教师还可以通过网站进行网上答疑,与学生及时交流。
(4)注重各知识点的有机统一
若想让学生做到融会贯通,举一反三,在教学中就必须注重各知识点的有机统一。比如在讲授内部排序算法时,综合比较各种排序算法的时间复杂度、空间复杂度、稳定性、最好及最差情况等。让学生通过比较,提高解决问题的能力,会根据不同形式的待排序表选择合适的存储方式和排序方法。再就是讲授链队列时,讲完用一个带有头尾指针的单链表表示的队列后,再让学生思考如何用一个循环链表表示队列,在给出启示后让学生自己写成队列的初始化、入队和出队算法,通过这种方式的教学不仅培养了学生的思维能力,而且有助于培养学生的创新能力,会综合运用所学知识,用计算机解决较复杂的问题。
(5)运用现代化教学手段
重视现代教育方法、技术手段的运用,采用多媒体教学,加大课程信息量,提高教学效率。在采用多媒体技术讲授本门课程的过程中,在深入研究多媒体教学的特点以及学生现有知识架构的基础上,重新组织、优化、补充教材内容,精心制作多媒体课件。在多媒体课堂上,通过教师有机地组织电子教案、演示课件等,使得学生能形象地领悟到算法的效果,教学变得丰富、有趣。在授课过程中,首先还原问题的本来面目——提出问题,引导同学积极参与——尝试解决问题,在讨论的基础上给出结论——讲授教学内容,最后采用课件进行算法的动态演示,加大了课堂信息量,提高了教学效率。
3 实践教学的探索
实践教学是数据结构课程教学的一个重要组成部分,对本门课程的学习起着至关重要的决定。通过实践教学,让学生能够学会运用书上学到的知识来解决实际问题,培养软件工作所需要的动手能力。
实践活动通过两个环节来实现,第一个环节课程实验,较偏重于对课程内容的理解。实验讲义完备,开出率100%。保证了学生理解和掌握课程的基本理论和基本概念,又提高他们的动手能力。第二个环节课程设计实习,让学生有机会自己提出实验项目、实验方案,在教师指导下按其方案进行实验,最后让学生自己得出应有的结论,进一步培养学生的学习兴趣和实践动手能力,从而激发创造力,也初步实现了对学生进行一整套软件工作规范的训练和科学作风的培养。
(1)实验教学内容
依据实验教学大纲,合理安排实验教学内容。我在教学时把实验项目按照不同内容和难度分成三种类型:基础型实验项目、设计性实验项目、和综合性和创新型实验项目,实现了实验教学内容的创新。基础型实验项目安排在各个章节中,主要围绕数据结构基础知识内容,目的是让学生掌握各种基本数据结构的逻辑关系和存储方式,通过实验验证算法,理解数据结构的基本操作的定义和实现。设计型实验项目是在基础型实验项目的基础上,让学生自己设计数据结构和算法,提高学生解决问题的能力和良好的编程能力。例如一元多项式求和,要求学生选择合适的数据结构自己编写算法。综合型实验项目涉及数据结构中多个知识点的重点内容,要求学生自己进行设计和实现,主要训练学生综合运用知识的能力,协作能力和创新实践能力。
(2)考核方式探索
为了培养学生的创新意识和团队协作精神,促进学生之间的交流和协作,使不同水平的学生都能在大型实验项目中担负起相应的工作,特别设计了一套针对综合型实验和探索创新型实验的考核方式和考核方法。
根据不同的实验项目采取不同的考核方式,基础型和设计型实验项目安排在平时每周的上机实验课进行,根据学生提交的实验报告进行考核。综合型和创新型实验项目较大,需要学生分工合作,共同完成,一般对学生进行分组,每组完成一个实验项目,在课程设计环节完成,一般有两周时间,教师根据每个学生在组内的表现给出一个考核成绩,项目完成后,再根据各组提交的项目报告和项目的质量给出合理考核成绩。这样既激发了学生的创新能力,又提高了学生的团队合作精神。
4 结论
在研究课程的教学方法时,要因内容制宜,因学生制宜,采取不同的教学方法。本人通过近十年对数据结构教学的实践与探索,取得了一定的教学效果,使得学生在学习数据结构时,不在感觉那么抽象,理解数据结构和算法不再那么困难,让学生真正理解了数据结构的作用,会选择和使用合适的数据结构解决问题。为学生后继课程的学习打下良好的基础,乃至对学生今后从事软件方面的工作都会提供较大的帮助。
参考文献:
[1]严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,2002.
[2]李治军,廖明宏,张岩.数据结构与算法课程设计教学模式的探讨[J].计算机教育,2006(2).
[3]殷人昆,陶永雷,谢若阳,盛绚华.数据结构(用面向对象方法与C++描述)[M].北京:清华大学出版社,2002.
[4]李锋,孙莉.任务驱动式方法在离散数学教学中的应用[J].计算机教育,2006(3).
[5]王锐.基于网络的《数据结构》新型教学模式研究[J].中州大学学报,2006(10).
[6]莫家庆.《数据结构》程序教学模式探索[J].计算机教育,2008(9).
关键词: CDIO;数据结构;课程教学
中图分类号:G642.0 文献标识码:A 文章编号:1009-3044(2014)01-0078-02
数据结构是计算机学科的重要核心课程,在计算机课程体系中处于承上启下的地位,它不仅是程序设计的重要理论技术基础,也与计算机科学技术的其他领域如操作系统、编译原理等也有着密切的关系。由于课程内容比较抽象,算法理解比较困难,要在有限的课时内使学生更好地理解课程的内容,掌握课程的重点,提高解决实际问题的程序设计能力,就必须打破传统的数据结构教学模式,融入一些新的现代教育的理念与方法,CDIO教育模式为我们提供了一个重要途径。
1 CDIO工程教育模式
CDIO是由美国麻省理工学院、瑞典查尔姆斯技术学院、瑞典林克平大学共同倡导,集多国工程教育精英建立的一套工程教育理论和实施体系。CDIO代表Conceive(构思)、Design(设计)、Implement(实施)和Operate(运作),是“做中学”和“基于项目教育和学习”理念的集中体现。
2 《数据结构》教学的特点与现状
《数据结构》教学过程中主要存在以下几个方面的问题:
1)对于课堂教学,大多采用多媒体理论教学和上机实践相结合的方式,但是目前的数据结构教学仍然非常重视理论教学,即存在“重理论、轻实践”的现象,不利于学生实践能力的培养。
2)虽然现在授课一直在提倡“以教师为主导,学生为主体”,但是在实际的理论教学环节通常仍然是以教师为主,学生充当“听众”,始终按着教师讲解的思路去理解问题、记忆知识,即存在“教师讲、学生听”的现象,难以调动学生探讨问题的积极性。
3)实践教学环节中的实验大多是验证性实验,缺乏与实际相结合的设计实验和综合性实验,即存在“验证多、设计少”的现象,不利于学生创新能力的培养。
3 CDIO对数据结构课程教学模式的启示
CDIO以能力培养为主线,以任务驱动进行项目教学,考核实施过程监控,通过构思、设计、实现、运作的完整过程,实现课程的“做中学”和“基于项目教育和学习”。对于数据结构课程教学,CDIO理念给我们带来了很大的启示,根据每节课程内容的特点选用以下教学模式展开教学。
3.1 问题驱动式教学
问题驱动式教学是为了激发学生的学习兴趣,根据教学内容合理地设置问题引入教学内容的方法,采用“提出问题、分析问题、解决问题”的模式,组织学生进行思考、分析、讨论与交流,这样,学生能够积极参与到学习中,而不再是被动地接受。
例如,在学习“栈”这部分内容时,教师可以提出比较有趣的“Hanoi塔”问题、八皇后问题或者迷宫问题让学生思考,再逐步引出“栈”的相关知识,然后鼓励学生应用“栈”编写算法解决这些问题并上机编程实现。以八皇后问题为例,提出问题可以教师口述如下:八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出的:在8*8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种方法。也可以用形象的图示或演示软件为学生展示问题,如图1所示,左边是初始状态,右边是假设第1个皇后摆放在第1列,那么第2个皇后从第2列第1行开始试探,如果不互相攻击就将其摆放,第2个皇后摆放在第2列第3行的位置,接着试探第3个皇后摆放的位置,图示表示第3个皇后目前的位置与第1个皇后处于同一对角线,与第2个皇后处于同一行,都互相攻击,不满足条件……提出问题之后,让学员去思考分析,这样不仅激发学生的兴趣,也能培养他们分析解决实际问题的能力。
3.2上机实践教学改革
计算机课程学习过程中普遍存在这样的现象:教师讲授的内容学生反映基本都听懂了,但是上机实践时却觉得无所适从,不知道怎么把课堂上讲授的算法思想转换成可以执行的程序。上机实践是数据结构课程教学必不可少的一个重要组成部分,通过上机实践学生能够更好的理解数据中的经典算法思想的意义,掌握数据和数据之间的关系,深刻体会理论和实践的结合,运用所学知识去解决实际问题,所以对上机实践教学的改革势在必行。
首先,验证性实验应作为基本目标要求学生必须掌握,在此基础上,多展开设计性实验和综合性实验,使理论学习中需要解决的现实问题在一定程度上得到实现。其次,将上机实践纳入考试范围,占期末总成绩的30%,上机成绩由“验证性实验+设计性实验”组成,这样会使学生重视平时上机实践。
例如,在进行线性表的实践教学时,在掌握了线性表理论知识的前提下,每位学生都要将书中的算法予以验证性的实现,我们使用的是严蔚敏老师的《数据结构(C语言版)》,要求学生将顺序表和单链表的基本运算包括插入、删除等操作予以验证。这些基本的算法得到验证后,将其整合到现实中的问题作为综合性设计性实验,由学生自主完成,如:为某届学生建立一个通讯录管理系统,可以方便查询每一个学生的学号、姓名、年龄、专业、电话、电子邮箱等。其功能包括通讯录链表的建立、学生通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出等。
3.3 以项目为导向的课程设计
课程设计是对数据结构知识的梳理巩固和综合运用,好的课程设计能够使学生对理论知识举一反三、熟能生巧。传统的课程设计题目过于单一,学生应付式交作业的现象比比皆是且答案雷同。所以有必要采取多样化的题目,要求学生自由结合分组,每组3-4人,从给定题目中选取感兴趣并符合自身能力的设计题目,分别进行项目的Conceive(构思)、Design(设计)、Implement(实施)和Operate(运作),最后以项目小组的形式完成,上交项目报告。各不相同的任务迫使学生必须用学到的数据结构知识独立解决问题,小组中每个学生要发挥各自作用,积极思考,相互交流、沟通,在完成不同任务的同时,项目实施专业能力和团队协作能力得到很好的锻炼。在项目实施过程中,突出学生的主体地位,强调学生自学能力和动手能力的培养。
4 总结
综上所述,结合数据结构课程教学的特点和现状,将CDIO工程教育理念贯穿于教学中,并根据数据结构的教学内容和教学目标,在教学过程中“重学生、重理论、重实践、重项目”,培养学生的自学能力,提高学生的实践能力和团队协作能力。
参考文献:
[1] 严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2012.
[2] Edward F Crawley.Creating the CDIO Syllabus,a Universal Template for Engineering Education. 32nd ASSEE/IEEE Frontiers in Education Conference.November 6-9,2002,Boston,MA
(河北师范大学数学与信息科学学院,河北石家庄050024)
摘要:针对计算机类本科专业数据结构课程与Java面向对象程序设计课程之间的衔接问题,分析数据结构中集合、线性表、树和图等知识点与Java Collections框架之间的映射关系,提出按照数据结构中学生建立的知识体系组织Collections框架的教学,说明面向数据结构知识体系的Java课程教学实施方法。
关键词 :数据结构;Java;Collections框架;课程衔接
文章编号:1672-5913(2015)15-0082-03
中图分类号:G642
基金项目:河北省精品课程建设项目“数据结构”。
作者简介:董东,男,副教授,研究方向为数据挖掘及应用,dongdong@hebtu.edu.cn。
0 引 言
数据结构是计算机类本科专业核心课程之一,其后继课Java面向对象程序设计也是重要的专业课程之一。通过对数据结构的学习,学生初步掌握了为实现问题求解所需要的基本逻辑结构、存储结构和常见的算法。Java面向对象程序设计则从面向对象程序设计的范式出发,试图使学生理解如何通过对象以及对象间的通信实现问题求解。在Java教学实践中,我们发现存在如下两个问题:①学生无法直接感受到数据结构与Java面向对象程序设计之间的关系,体会不了数据结构的重要性,无法体验选择合适的数据结构和算法对实现问题求解的成就感。②由于JDK开发的历史原因,Java JDK中提供的数据结构与算法的实现并没有与数据结构课程具有对应关系。例如,在Java中,队列(Queue)和线性表( List)都是Collection的子接口,而数据结构认为队列是一种特殊的线性表。
根据在教学中发现的这些问题,我们在Java Collection框架部分的讲授中采取了如下措施:①按照数据结构中学生建立的知识体系组织Collection、Set、List、Queue、Stack等内容的讲授,而不是按照Java API中的继承关系来介绍。②在课程设计实践环节,通过“先动手写自己的算法实现”,然后“阅读并分析JDK相关算法源代码”,通过对照,使学生发现自己在程序设计方面的不足,从而得到在数据结构课程中所学知识的应用体验。
1 JDK中的数据结构
数据结构是数据元素之间的关系。从概念和实现两个角度,可将数据结构分为数据的逻辑结构和数据的存储结构。按照数据元素之间前驱和后继关系来分,数据的逻辑结构可分为以下4种:集合( Set)、线性表(List)、树(Tree)和图(Graph)。数据的存储结构主要包括数据元素本身的存储以及数据元素之间关系表示。数据元素之间的关系在计算机中主要有两种不同的表示方法:顺序映像和非顺序映像,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。
Java JDK为常用的数据结构定义了一些接口( Interface)和实现(Implementation)。这些接口、实现类以及常用的排序、查找等算法统称为JavaCollections框架(Java Collections Framework).Collections框架的设计目的是要满足如下目标:高性能、一致性、扩展性和轻松编程。Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应用即可‘3]。Java中把一组对象称为Collection,也就是说,Collection是对象的容器。Java对Collection中的对象没有任何前驱、后继以及重复性的约束,只是约束了对象类型E。
Collection接口定义了其上的3类操作:针对单个元素的基本操作、迭代器和Collection对象之间的批量操作。基本操作包括增加、删除、判断是否包含某个元素、判断是否为空、容器中当前元素的个数、清空等。批量操作包括:合并两个Collection容器、从一个容器中移走一些元素、保留两个容器中相同的元素、判断一个容器中的元素是否完全包含在另外一个容器中等。
接口Collection<E>的子接口有Set<E>和List<E>。集合(Set)在Collection的基础之上增加了“不允许重复元素”的约束;而List则在Collection基础之上增加了“元素之间具有前驱、后继关系”的约束:除了第一个元素外,所有元素具有唯一的前驱;除了最后一个元素外,所有元素具有唯一后继。
如果仅关心数据元素是否出现,而不关心数据元素之间的次序,则应使用Set<E>。Java为集合接口提供了两个基本的实现:HashSet<E>和Tree<Set>。HashSet<E>是Set<E>接口的典型实现,大多使用集合的场合就是使用这个实现类。HashSet实现类按哈希算法来存储集合中的元素,因此具有很好的查找性能。HashSet不能记忆元素之间的顺序,包括插入顺序。其子类LinkedHashSet<E>也是根据元素hashCode值来决定元素存储位置,但它同时使用链表维护元素的次序,这样使得能够记忆插入顺序。由于LinkedHashSet需要维护元素的插入顺序,所以性能略低于HashSet,但遍历集合里的全部元素性能较好。
实现类TreeSet<E>可以确保集合元素处于排序状态,TreeSet并不是根据元素的插入顺序进行排序,而是根据元素的实际值来进行排序的。TreeSet采用红黑树的数据结构对元素进行排序,并要求添加进TreeSet中的对象必须实现CompareTo<E>接口。
List<E>接口作为Collection<E>接口的子接口,可以使用Collection接口中的全部方法。但是List接口中定义了元素位置和元素范围的概念,使得List可以根据元素位置索引(index)来插入、替换、删除集合元素以及查找指定对象的位置。ArrayList<E>实现类基于数组实现了List接口,其内部封装了一个动态再分配的数组。每个ArrayList对象都有一个capacity属性,这个属性表示它们所封装的数组的长度,当添加元素超过长度时,capacity会自动增长,其默认值为10。LinkedList<E>内部以链表来保存集合中的元素,因此随机访问容器时的性能较差,但在插入、删除元素时性能较好。
Queue<E>接口用于定义队列这种数据结构,队列是“先进先出”的容器,通常不允许随机访问其中的元素。Java中的队列接口Queue<E>没有继承List接口,而是直接继承了Collection接口。如果使用具有固定容量的队列,则应使用offer()来加入元素,使用poll()来获取并移出元素,因为add()和remove()方法在因容量原因失败时抛出异常。如果只是访问队首而不移出该元素,使用element()或者peek()方法。LinkedList<E>类实现了Queue<E>接口,因此我们可以把LinkedList当成Queue来用。PriorityQueue是一个比较标准的队列实现类,它并不是按加入队列的顺序,而是按队列元素的大小来记忆队列元素的顺序。因此当调用peek方法或者poll方法来取出队列中的元素时,并不是取出最先进入队列的元素,而是取出队列中最小的元素。
Stack<E>实现了List<E>接口,提供了push和pop操作限制线性表中元素的插入和删除只能在线性表的同一端进行。JDK l.6引入的ArrayDequ<E>实现类被优先推荐作为栈使用。ArrayDeque<E>实现了Deque<E>接口。Deque<E>接口定义了双端队列,双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。
Java JDK中没有直接提供树和图的接口和实现类,但是可以通过研究TreeMap的源代码学习操作树的一般编写模式。综上,数据结构与Java面向对象程序设计两门课程内容的衔接见表1。
2 面向数据结构衔接的java课程实施方案
Java面向对象程序设计为1学期的课程。总课时为讲授54学时、实验32学时。其中,与数据结构知识点紧密相关的Java Collections框架部分为讲授6学时、实验4学时。在讲授环节,按照表1列出的顺序进行。在实验环节完成与授课内容相关的验证性实验。在课程设计实践环节,要求学生使用Java设计常见算法,然后阅读JDK提供的源代码进行对照。具体方案如图1所示。
比如,在java.util.Collections类中提供了数据结构中学生已经学过的常见算法,如二分查找、计算元素频数、查找最大/最小元素、反转线性表、按照指定距离旋转线性表、随机排列线性表、交换指定位置上的两个元素以及排序等。注意,在Java 6中Collections.sort()使用的是MergeSort;而在Java 7中,内部实现换成了TimSort。
要求学生按照这些API文档说明,首先按照数据结构课程中的知识设计自己的算法实现,然后与API源代码进行比较。由于学生使用C语言版的数据结构教材,所以在面向Collection编程之前,作为过渡,先让学生面向数组编程。
哈希表是一种重要的数据结构,也是实现集合的基本途径之一。通过研究HashSet的源代码,可以让学生理解为什么每个对象都要有hashcode()方法,以及哈希表的编码特点。由于HashSet的实现是基于HashMap的,所以研究HashSet就要研究HashMap。
Map是一种典型的名值对类型,它提供一种Key-Value对应保存的数据结构。客户程序通过Key值来访问对应的Value,这个接口并没有继承Collection这接口;而其他的类或者接口,不管是List、Set、Stack等都继承或实现了Collection。
TreeMap和HashMap算是Java集合类里面比较有难度的数据结构。HashMap元素存取的时间复杂度一般是O(l),而TreeMap内部对元素的操作复杂度为O(logn)。TreeMap记忆了顺序,TreeSet内部的实现使用了TreeMap。
3 结语
数据结构与程序类课程的关系问题愈来愈引起关注,我们提出面向数据结构知识体系的Java课程教学与数据结构课程的衔接方案。这个教学方案已经在河北师范大学本科计算机专业实施三届,取得了较好的效果,学生对算法的理解加深了,解决问题的自信心增强了,也建立了工程意识。
参考文献:
[1]教育部高等学校计算机科学与技术教学指导委员会,高等学校计算机科学与技术专业公共核心知识体系与课程[M].北京:清华大学出版社,2008: 110-111
[2]严蔚敏,吴伟民,数据结构(C语言版)[M].北京:清华大学出版社,1997: 5-7.
[3]扎克霍尔.Java语言导学[M].北京:人民邮电出版社,2008: 293-294.
[4]沈华.数据结构、算法和程序之间关系的探讨[J].计算机教育,2013(4): 58-61.
[5]智慧来,智东杰.Java教学与数据结构教学的衔接与融合之我见[J].计算机教育,2012(14): 81-82.
关键词:产学研用;协同培养;应用创新型IT人才
文章编号:1672-5913(2017)07-0027-03
中图分类号:G642
0 引 言
当前,信息技术和信息产业已成为世界各国的发展战略[1]。《国家中长期教育改革和发展规划纲要(2010―2020年)》明确提出,高等教育要突出培养创新型科技人才,要注重培养一线应用创新人才[1]。应用创新型IT人才应该对新知识、新技术高度敏感,拥有探索新知识、新技术的意识和决心,具有突出的科技应用能力、良好的创新思维和技术能力。
实现应用创新型IT人才的培养目标,“产学研用”是不错的切入点。“产”和“用”强调的是社会实践,“学”和“研”强调的是理论学习和研究。深入企业发现企业的人才需求、技术需求、存在的问题,将学习和研究得到的创新型解决方案应用于实践解决实际问题。可见,以实践、理论和创新相结合的教育模式恰好契合信息社会的发展要求。
1 方案框架
遵循应用创新型IT人才培养标准,根据IT行业和学科发展特征,以扎实理论基础,强化实践能力、创新能力为核心,应用创新型IT人才的“产学研用”协同培养方案必须做到以下几点:①对传统专业课程体系结构进行优化,使其适合培养应用创新型IT人才;②大力改进传统的专业课程考核方式,克服传统考核方式只重理论知识忽视实践能力的弊端;③打破传统的专业课程实践教学模式,在丰富校内实践教学方式的同时,有针对性地将实践教学扩展到校外。因此,我们提出的方案主要包括优化课程体系结构、新型专业课程教学模式、新型实践教学模式3个方面的内容。方案框架如图1所示。
优化课程体系的主要任务是根据市场需求解决“教什么”“学什么”的问题;新型专业课教学模式的主要任务是为了符合市场对人才的需要解决“怎么教”“怎么学”的问题;新型实验教学模式的主要任务是为了与市场实现平滑衔接解决“怎么用”的问题。
优化课程体系为方案的其他两个方面明确了方向,它相当于软件开发的需求分析阶段和概要设计阶段。新型专业课教学模式需要针对每门课程的特点设计具体的教学方案和手段,相当于软件开发中对每个功能模块的详细设计与实现。新型实验教学模式需要对学生熟练应用每门课程的知识解决特定问题能力的训练,同时还需要对学生灵活应用多门课程的知识解决综合性问题能力的训练,相当于软件开发中对每个功能模块进行测试的阶段和集成多个功能模块并进行综合测试的阶段。
2 方案描述
借鉴一个具有市场竞争力的软件的开发过程,人才“产学研用”协同培养的思路具体内容可以做如下阐述。
1)优化课程体系结构。
为了适应培养应用创新型IT人才的培养目标,需要对现有信息技术专业课程体系结构进行优化,优化后的课程体系应体现出对学生实践能力、创新能力、就业能力和创业能力的培养。为了达到上述优化目标,我们采用以下优化原则:注重知识结构的系统性、知识点覆盖面的完整性;课程的知识内容与能力培养的衔接;教学内容与行业主题需求的有效衔接;注重课程体系和教学内容的针对性和实用性;教学过程实现课堂教学与实践教学的有机结合;选修课的设置应紧跟企业应用需求、专业发展方向和技术前沿。我们利用科学知识图谱(mapping knowledge domain)[2-3]进行课程体系结构的优化,结合学科特点、优化原则,构建突出学习曲线和思维方法的科学知识图谱。科学知识图谱包括课程领域、发展历史、现状和未来趋势、关键环节知识点、先修与后续关系、实践环节等。
2)新型专业课程教学模式。
随着大数据技术的快速发展,应借助大数据技术对信息专业课程开展分层教学并丰富教学评价。这种教学模式主要包括以下两个特点:
(1)对各年级学生进行聚类分组。课程教学质量是高校教育质量的基石,也是提高高校教育质量的重要抓手[4]。合适的教学方法在课程教学中扮演着重要角色,甚至是课程教学的灵魂[4]。通过问卷调查、历史成绩数据等多种形式获得多项数据,对这些数据进行归一化处理,统计获取学生的知识点能力信息。根据统计数据对学生进行分组,聚类分组可以较好地区分不同层次的学生,对不同层次采用不同的教学进度、教学方法,实现个性化教学、针对性教学。
(2)多维度评价机制。传统的评价机制是课程学习结束后,根据考试大纲制订考试内容,对学生进行评价。这种固定的评价方式不利于学生平时的知识积累,其信度较低。我们建立短周期、多层次的知识点评价机制,使学生能够在学习之后,通过知识点评价迅速发现学习中的不足、查漏补缺,以及总结学习过的知识点,及时消化吸收。我们采用的技术手段是奇异值分解。奇异值分解[5]是一种分析、简化数据集的技术,它在损失很少信息的前提下把多指标转化为几个综合指标,用它们代替原始变量的绝大部分信息,并保证彼此之间互不相关、互不重叠。奇异值分解在研究指标众多、关系复杂的问题时,既不需要量纲一致,也不需要对指标进行赋权或重要性排列,而是通过提取主成分这一关键方法来进行得分计算。因此,奇异值分解应用到多知识点评价机制是可行的。
3)新型实践教学模式。
为了突出“产学研用”的培养理念,需要对现有的实践教学环节进行改革,突出企业的参与度、科研项目的融入度和学生的“学以致用”,拟构建一个“多位一体”的实践教学新模式,其体系结构如图2所示。
在图2所示的体系结构中保留了传统实践教学环节的“课程实验教学”“课程设计”和“毕业设计”。传统的课程设计环节往往指的是某门课程单独的课程设计,我在这里增加了一个基于课程群的综合性课程设计。这3个实践教学环节主要是培养学生的操作能力、编程能力、设计能力、开发能力和综合应用能力。在此基础上,我们设计了“学科竞赛”“科研项目”和“校外实践”环节。“学科竞赛”和“科研项目”两个教学环节主要是培养学生的综合应用能力、创新实践能力、自学能力、沟通能力、协作能力、表达能力。“校外实践”环节主要是培养学生的综合应用能力、设计与开发能力、工程能力、自学能力、组织与协调能力、人际交往能力、沟通能力和抗压能力。
3 已开展的前期工作
我校关于“产学研用”协同培养应用创新型IT人才的全面改革还处在起步阶段,在某些IT课程建设中已开展了前期工作,取得一些建设成果。例如,我们对数据结构课程的教学模式和实践教学模式做了初步探索。在新型教学模式方面,我们尝试实例法[6]、图示法[7]、问题驱动法[8]、以“计算思维”为中心的教学方法[9]等多种教学方法在数据结构课程教学过程中的运用,探讨数据结构课程的应用教学模式[10];在新型实践教学模式方面,基于近几年实践教学改革的经验给出了一种课内实践教学方案[11]。在上述两方面的建设成果基础上,我们给出了数据结构学习生态系统的构建方法[12]并探讨MOOC在课程教学过程的应用[13]。
4 结 语
在信息技术高速发展和普适应用的大背景下,面向我校“721”本科人才培养目标,结合信息技术专业特点,我们提出了一种“产学研用”协同培养应用创新型IT人才的培养模式;在现有IT课程建设成果基础上,基于提出的“产学研用”协同培养模式,构建了相应的课程体系改革方案、教学模式改革方案和实践教学模式改革方案。该培养模式可以应用于信息专业、计算机专业课程的教学过程、实验过程,可以让信息专业、计算机专业师生直接受益。
参考文献:
[1] 彭昱忠, 元昌安, 潘颖, 等. 地方院校“产学研用”一体化应用创新型IT人才培养的探究与实践[J]. 计算机教育, 2016(4): 95-99.
[2] 陆星家, 王玉金, 刘林林. 大数据背景下的计算机课程分层教学研究[J]. 计算机教育, 2016(5): 52-55.
[3] 陈悦, 刘则渊, 陈劲, 等. 科学知识图谱的发展历程[J].科学学研究, 2008, 26(3): 449-460.
[4] 何钦铭. 通过MOOC/SPOC课程推动课程教学方法的根本变革[J].计算机教育, 2016(1): 10-11.
[5] 郭亚军, 易平涛. 基于奇异值分解的多评价结论集结方法[J]. 东北大学学报: 自然科学版, 2007, 28(2): 278-281.
[6] 沈华. 数据结构入门教学中的实例法[J]. 计算机教育, 2013(24): 64-66.
[7] 沈华, 陈卓. 图示法在数据结构教学中的应用[J]. 科教文汇, 2013(11上): 75-76.
[8] 沈华. 数据结构存储映射的问题驱动教学方法[J]. 计算机教育, 2015(19): 60-63.
[9] 沈华, 张明武. 以“计算思维”为中心的数据结构教学方法探讨[J]. 计算机教育, 2016(10): 145-148.
[10] 沈华, 张明武, 谢海涛. 数据结构课程应用教学模式探讨[J]. 算机教育, 2016(5): 59-62.
[11] 沈华. 数据结构课内实践教学方案[J]. 实验室研究与探索. 2013, 32(10): 396-400.