时间:2022-07-11 18:55:59

关键词课程设计数据结构教学模式问题驱动
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
关键词:数据结构课程;实验;设计;Java;软件工程
数据结构是计算机类专业的核心专业基础课之一,主要讨论数据的合理组织和有效存储、处理以及算法的正确设计、分析和评价,课程本身概念抽象、方法灵活、强调逻辑思维能力、难度较大,同时课程实践性强,实验是该课程不可或缺的重要环节[1-4]。通常数据结构课程实验是由教师将问题描述和基本要求作为实验题目给出,但又绝不是让学生拿到实验题目就直接上机进行编程调试,而是要通过在实验中贯穿软件工程的方法和原理,严格按照分析、设计、实现、测试等软件工程过程并结合具体的实现语言来完成实验,培养学生养成良好的实验习惯。下文针对课程实验特点和目标,结合软件工程思想、面向对象语言Java,在课程的实验组织、过程设计、保障等方面进行了一些探索。
1课程实验特点和目标
由于面向对象方法已经成为目前系统开发和程序设计的主流方式,而Java语言是一种目前使用最为广泛的面向对象程序设计语言,因此不少计算机类专业的数据结构课程采用了Java语言描述。作为是一种完全面向对象的程序设计语言,Java在提高程序的复用性和安全性时,在不同类的资源配置方面,较面向过程的程序设计语言有更高层面的要求[3],通过Java语言表现各种数据结构、实现相关算法是数据结构课程的难点之一,这给语言基础薄弱的学生完成实验带来很大困难,迫切需要在目标、过程、方法等各方面精心组织和设计实验。
如图1所示,作为课程教学的重要组成部分,课程实验的目标主要围绕数据结构与算法、软件分析与设计、程序实现与验证、抽象逻辑思维等方面展开[4-7],即:①以数据结构和算法为核心,帮助学生加深对数据结构的理解;②以软件工程思想为基础,反复练习包括软件分析与设计在内的软件开发过程,培养分析问题、解决问题和程序设计的能力;③以面向对象的Java程序设计语言为工具,提高学生利用Java语言实现和验证算法的能力;④在理解掌握数据结构、应用软件工程思想、熟练使用Java语言的同时,还要培养严密的抽象逻辑思维能力。
上述实验目标师生都提出了更高的要求,为了更好地达到上述目标,并帮助学生在学习过程中充分发挥主观能动作用,围绕课程在数据结构、软件开发、程序实现、逻辑思维各个方面的目标,进行了课程实验的设计,主要包括切实可行的实验任务组织、科学合理的实验过程设计、结合多种方法的严格过程保障等方面,如图2所示。
2实验任务组织
根据课程实验特点和目标,对实验任务进行了精心组织,主要是针对不同基础和层次的学生进行了任务的划分,如图3所示。
2.1基本任务
对于所有的学生,不管其基础或层次如何,都必须完成一定的基本任务,那就是用程序验证各种逻辑结构的基本实现和算法,在实验的总体结构中实现函数的编写、测试、调试、验证,通过这一验证过程达到加深理解各种数据结构和算法、掌握基本教学内容的目的,这也是传统的数据结构课程实验所要求的任务。
2.2基础强化
部分学生学习基础较差,特别是Java语言的编程能力不足,对类、接口、封装、多态、方法调用等的认识较模糊,需要在基本的Java语言以及基本的方法功能理解、方法编写及调用等方面加强实验,通过对基本数据结构和算法与对应程序的反复阅读、编写、测试等训练,达到提高对Java程序结构、语法以及Java方法在程序设计中作用的认识。
2.3能力提升
针对基础较好、学习兴趣较浓的学生,为提供其发挥能力的空间,有效提高其学习兴趣,提出一些要求更高、具有一定挑战性的任务,要求能进行分析、设计并实现、测试,包括:完成比教材里典型基本功能更强的拓展功能,开拓学生的思路,如统计线性表中给定值的元素个数;使用已学的逻辑结构和物理结构完成一些扩展任务,提高学生分析问题、解决问题的能力,如统计二叉树的结点个数;灵活应用编写的方法,实现不同的功能要求,培养学生对实验总体结构配置、方法外特性的认识,如利用队列和堆栈实现单链表的逆序排列。
总之,在课程实验组织中,做到有对整体结构加以介绍的说明;有给学生完成实验的思路提示;对有一定难度的任务还给出具有参考价值的实现作为参照。这样,根据课程实验目标和学生的基础、兴趣设计客观、可行的实验要求和过程,符合人们认识事物的特点,避免了因为要求难度太大挫伤学生的学习热情。
3实验过程设计
如果仅仅依靠传统的验证型实验,学生只是将课本中算法的对应程序敲入计算机,运行一下程序、验证一下结论而已,基本上没有涉及到问题思考、分析分析、总体结构设计、程序设计等软件工程所强调的工作,而如果教师没有严格要求、反复强调、严格考核,多数学生都不做预习准备工作,更不用说养成分析、设计、比较和总结的习惯,结果是学生来作实验了,但不了解实验的目标、流程、问题产生的原因,实验效果、课程学习效果大打折扣。
3.1实验过程的规范
首先严格规范实验流程,让学生反复体会从接受任务到分析、设计、编码、测试的软件开发过程[5]。在最初的两三个实验时,由教师根据实验题目指导学生一步一步完成图4所示内容:①问题描述,即实验要解决问题的描述;②基本要求,即实验要达到的具体要求;③测试数据,即设计能达到测试目的的测试数据;④算法思想,即描述解决相应问题的算法思想;⑤类划分,即分析问题所需的类,并给出类的逻辑功能描述;⑥源程序,即有充分注释的参考实现源程序清单;⑦测试情况,即程序的测试情况以及必要的分析和说明。由于数据结构实验尚未要求进行较强功能软件的开发,故上述过程中虽然涉及了软件工程思想和软件开发过程,但一般并不强调过分详细的需求分析、概要设计、详细设计等步骤,也不必要求提供详细的使用手册。在随后的整个课程实验过程中,对学生严格要求、反复强调必须严格遵守图4的实验过程,并采用抽查等方式保证其严格执行。
3.2关注点的分离
为了将数据结构与Java语言、软件工程有效结合,要求在课程的实验过程中也始终与理论教学中一样,按图5所示的三个典型步骤来解决所遇到的数据结构和算法问题:①抽象,即分析问题需求,抽象出一个解决该问题的适当的数学模型(抽象数据类型ADT);②接口设计,即对应地设计一个规格说明来描述ADT应支持的操作,并将这个规格说明用Java接口来表示;③实现,即选择合适的数据结构和算法来实现上述Java接口,最后对各种不同实现的代价进行分析和比较。这样的步骤清楚地区分了ADT的接口与实现,体现了软件工程中分离关注点的重要原则[6],同时很好地利用了Java语言在抽象、封装等方面的优势。
4实验保障措施
通过已有的实验过程发现,仅有实验任务组织和实验过程设计是不够的,还必须要有良好的动手习惯培养、基本知识积累以及编程能力提高等作为保障措施,才能较好地达到所提出的课程实验目标。
4.1动手习惯的培养
部分学生没有动手的习惯,实践教学中应注重培养学生的动手习惯,特别是培养记录、画图、打草稿等基本的动手习惯,避免学生对知识把握不准、似是而非。如在讲解、演示或讨论时,让学生跟随教师动手在草稿纸上画图、记录,讲解完立即就刚刚所学内容的部分关键步骤再抽查学生重新讲解,并要求辅以图、表等(当然抽查也可以在下一次课进行),如果存在问题可以由其他同学纠正,最后由教师进一步分析、总结,让学生深刻体会动手习惯对知识学习所起的巩固作用。
4.2简单知识的积累
部分学生不注重积累那些功能简单的小算法,实践教学中教师应注重培养学生对简单知识的理解、记忆、积累,经常抽查,在面对那些较为复杂的数据结构和算法时,充分分析、分解其中涉及到的基本知识点之间、算法之间的联系,提示学生注意类的小型化、原子化,只有长期注重对基本知识点的理解、记忆和积累,才能避免遇到问题时无从下手,避免理论与实践脱节。
4.3编程能力的提高
由于前导课程如C语言、Java等掌握不好、认识不深、基础不牢,不少学生编程能力较弱,缺乏把数据结构和算法转化成代码实现的能力,部分学生甚至不能把一些简单的算法转换成完整的程序,以及缺乏基本的排错能力,都大大影响了这些学生学习这门课的积极性和效果。
为了使实验过程清晰并降低实现的难度、提高可操作性,要求学生一开始所设计的ADT不一定功能很完备,只要具有那些典型的、能初步表现问题需求的基本功能即可,随着上述步骤的一作结束,根据问题的需求,进一步完善现有的ADT及其实现。让学生既在运用中逐步体会了软件工程原理和应用,又对通过不断运用Java的基本知识,提高了编程能力。
另外,加强现场指导、交流、沟通,及时发现学生的困难,有针对性地帮助学生提高认识、解决问题,以及实验完成后进行分析总结,集中讨论实验中的一些普遍问题,都是提升实验效果的有力措施。
5结语
基于实验在数据结构教学中的重要地位,精心的任务组织、科学的过程设计和严格的保障措施是十分必要的。一段时间的运行表明,上述做法对于促进学生在学习过程中充分发挥主观能动作用,增强对数据对象特征的理解、数据组织方法的掌握、软件开发过程的熟悉、程序实现技能的培养以及抽象逻辑思维能力的提高等方面都起到了积极的作用。
参考文献:
[1] 杨红宾. 数据结构课程改革探讨[J]. 教育与职业,2009(32):131-132.
[2] 沈根海. 高职院校数据结构实验教学的探索[J]. 电脑知识与技术,2008(33):1427-1428.
[3] 张济础,杨亚莉. 高职院校“数据结构Java语言描述”课程的实验设计[J]. 计算机教育,2010(1):64-65.
[4] 杨晓波. 浅析数据结构课程教学中的实验环节[J]. 甘肃高师学报,2003(5):49-50.
[5] 朱战立. 数据结构Java语言描述[M]. 北京:清华大学出版社,2005:295-299.
[6] 周大庆. 实用数据结构教程Java语言描述[M]. 北京:人民邮电出版社,2007:1-2.
[7] WEISS M A. Data structure and problem solving using Java[M]. London:Pearson Education,2006:1-5.
Experimental Design of Data Structure Course Using Java
LI Gang, HUANG Tongyuan, ZHANG Xiaochuan
(School of Computer, Chongqing University of Technology, Chongqing 400050, China)
摘 要:本文提出了在数据结构课程实验中实行分层次教学的观点,详细介绍了我院计算机科学专业中数据结构实验课程的分层教学实践方法,对数据结构实验课程的改革进行了探索,本文对如何提高计算机实验课程教学效果有一定的指导作用。
关键词:数据结构;实验教学;分层次
中图分类号:G642
文献标识码:B
1 引言
数据结构是计算机及相关专业的一门核心课程,主要研究信息的逻辑结构及其基本操作在计算机中的表示和实现,该课程学习的效果不仅关系到后续课程的学习,而且直接关系到软件设计水平的提高和专业素质的培养,在计算机学科教育中有非常重要的作用。
数据结构课程的教学又包括理论知识的学习和实践教学。将所学理论知识加以融会贯通以解决实际问题,学以致用才是数据结构课程的学习目的。因此,实验教学与理论内容教学一样,是数据结构教学中不可缺少的重要环节。
本人从事数据结构教学多年,通过对课程、学生及计算机学科的特点的长期探索,在本学院提出了数据结构课程分层次实验教学的观点,并在06级计科专业学生中进行了实践。现将此次实践的基本方法进行总结。
2 实验内容分层次
数据结构理论知识是相对固定的,学习完数据结构,我们要求学生掌握线性表、栈、队列、树和图等数据结构的表示和实现方法,在实际应用中学会自行选择合适的数据结构及存储结构进行编程,另外,还能对计算机中的两种常见运算:查找和排序的各个算法进行实现以及性能比较。
因此,我们按照数据结构的内容将实验题分成了线性表、栈、队列、串、数组、二叉树、图、查找、排序等主题,同时根据循序渐进的原则,在每个主题之下,又按照难度不同分成了概念基础实验、应用基础实验和应用提高实验三种类型。我们将概念基础实验设计为验证性实验,如某种数据结构的表示和实现并将此种数据结构封装为一个类,并要求所有的学生都必须实现;应用基础实验,则是利用已实现的某种数据结构实现的一个简单应用;应用提高实验,是利用已实现的某种或某几种数据结构实现的一个综合应用。后面两种类型的实验又分设若干实验题,每个实验题都设有难度系数。
我们要求每个学生必须完成概念基础实验和一道应用基础实验题,选做一道提高实验题,所选应用基础实验题和提高实验题的难度将作为成绩评定的一个依据。表1中列出了“栈的实现和应用”主题中设置的各个题目。
实验内容的分层使得学生可以根据自己的兴趣、编程能力等实际情况,有选择地进行程序的设计和实践,对于学有余力的同学,也可以尽早接触较大的应用实践题目,得到更多的锻炼。
3 实验文档多层次
3.1 实验报告、作业单、实验记录一体化
实验报告是由学院统一印制的具有统一格式的实验文档,在实验报告中规定了每个主题的实验目的和要求,给出了不同层次的各个题目的详细描述,同时要求学生根据各自所选题目填写作业单和实验记录表,并填写所选题目中难度最高的应用实验题的分析、设计和实现过程。实验报告的布局如表2所示:
作业单和实验记录表是实验报告中包含的两个重要的表格。
作业单中列出了该学生在此主题下选做的题目、教师确认后的签字栏、教师批改源程序后对该题完成情况的意见。作业单格式参见表3。
实验记录表中记录了在整个实验过程中所遇到的编译问题、调试问题、程序的逻辑错误以及解决方法,如仅将此问题避开,则记录避开问题的方法。另外表中还需记录程序运行时所用的测试样例。教师在批阅时给出评阅意见。实验记录表格式见表4。
3.2 源程序
学生将将所完成题目的所有源程序进行压缩后提交到学院的网络教学平台上,由教师和助教核对是否与作业单一致,直接在网上进行批改和评分,源程序得分的计算方法参见后面的表5,评分程序直接内嵌入教学网站。
3.3 实验指导素材
我院计算机科学专业的教学计划中,面向对象程序设计C++作为先修课程已于前一学期开设,因此,在学习数据结构之前,学生已基本掌握了程序设计语言中的基本概念和上机实践的基本方法。但是,仅通过一个学期的程序设计语言学习,学生对大型程序的设计、组织和实施编程等步骤并不熟悉,对解决实际问题的行之有效的具体指导也不多。因此,为学生提供上手能用的实验操作指导手册,提供一些范例程序,手把手指导学生进入较大型程序的设计阶段,加强学生的C++标准类库知识的传授,加强学生的实践操作技能指导尤其重要。
我们对每一个主题选取一个应用基础实验题,将其答案公布在教学网站,供同学下载;选取每一主题中难度较大的题目,给出基本求解思路以及重要的算法,所需用到的标准类库函数、从何处获取更多可参照的资料等内容供同学参考。我们把这些资料都公布在教学网站上,学生可以根据需要进行下载。
另外,我们还根据学生在实践中遇到的问题加以总结、整理,在教学网站上定期公布“编程宝典”,这些实用的但又熟悉的知识的温故,使同学们的编程能力得到的提高,也使得后续的实践更容易完成。
4 实验考核分层次
在我们设计的数据结构课程考核方案下,实验成绩在数据结构课程总成绩中的比例为30%;数据结构实验成绩为若干次主题实验题的成绩以及期末实验考核成绩平均分;每次主题实验成绩的主要计算方法为:
本次实验总分=源程序成绩*0.75+实验记录分*0.15+实验报告分*0.1
源程序成绩=基础实验得分*0.45+应用基础实验*0.4+应用提高实验*0.15
表5为某同学某一主题的源程序成绩评定表,此表在教师批改源程序时在网页上填写;表6为该同学该主题实验的最终成绩表,此表在教师批改纸质实验报告时填写。
5 结束语
我们对数据结构实验课的内容、实验文档、实验成绩评定等各个环节都进行了分层次的改革实践,加强了实验中的文档管理。经过一个学期的实践,学生基本养成了及时认真做好实验记录的习惯,养成了严谨踏实的编程习惯,上机实践变得更有条理,减少了出错概率。经过实验范例的学习和模仿,大多数学生在处理难度较大的应用提高实验时也已不再手足无措,基本能按照需求分析、概要设计、数据结构选择、存储结构选择、编写算法、撰写程序等基本编程步骤来解决问题;大多数学生在这种分层实验的要求下,选择了稍高一点难度的题目,提高了自己的编程能力,增强了自信心。
当然,我们在实践中还是遇到了不少问题,有部分同学平时学习态度不端正,做作业敷衍了事;仍存在抄袭作业的现象。另外由于实验成绩评定比较复杂,虽然我们设计了一个专门的小程序来计算每位学生的成绩,但还是增加了老师的工作量。因此,继续探索实验教学的基本规律和方法,是我们的一项长期的任务。
参考文献:
[1] 殷人昆. 数据结构(用面向对象方法与C++语言描述)[M]. 北京:清华大学出版社,2007.
关键词:卓越计划 实践教学 考核模式 创新能力
中图分类号:G642 文献标识码:A
学生的实践能力与创新精神的培养是教育部卓越计划的核心目标,如何改革原有专业教学模式与课程体系,更好地满足对卓越工程师实践与创新能力培养的根本需求,成为卓越计划实施中的关键问题。作为教育部第一批卓越计划试点专业,山东理工大学计算机学院从计算机科学与技术专业最重要的实践与创新能力――程序设计能力培养入手,以程序设计基础类课程的建设与创新为切入点,结合多年来“定制式培养”“校企合作”的专业改革经验,先后从课程的教学内容整合优化、实践教学模式创新、考核模式改革和创新能力培养等方面,进行了深入的探索实践。
1.程序设计基础类课程内容整合优化
程序设计基础类课程包含了程序设计基础、数据结构、编译原理等课程,这些课程均是计算机专业卓越工程师计划中最核心的专业基础课。程序设计基础主要介绍基本的程序设计思想与方法,数据结构主要介绍数据的逻辑组织形式与存储组织形式、编译原理则通过介绍程序设计语言编译器的构造原理、设计方法和实现技术,使学生在更高的层次上理解程序设计语言工作原理与程序运行机制。从课程特点来看,这几门课程在教学内容上既是紧密关联的又是直接衔接的。首先,程序设计基础为数据结构与编译原理的学习提供了必需的程序设计方法与基本技巧;数据结构既实现了复杂数据下程序设计基础内容的进一步的延伸与发展,又为编译器构造提供了结构化数据的逻辑与存储形式;编译原理则完成程序设计的经典方法与数据结构合理组织的有效结合,为在解决问题中实现程序设计方法的选择以及合理数据结构的表示提供了一个综合应用的平台。
基于卓越计划的培养要求以及三门课程内容上紧密关联的特点,我们对各门课程的教学内容进行了整合,根据课程之间的衔接关系适当的调整了部分教学内容。比如,基本线性结构的组织作为程序设计能力的重要基础,虽然既是数据结构也是编译技术中的基本问题,但在课程整合之前的课程中介绍均不够突出,在整合后就以专题的形式在程序设计基础上强化基本的线性数据结构(包括数组、Y构体、单链表等)表示与实现的知识,使得学生可以有重点的集中学习并掌握这些基本结构的表示与使用方法。再如,经典的算法设计思想是程序设计与编译程序设计实现必备的能力,在课程整合之前,与之相关的知识是零散的分布在三门课程中的,但每一门课程都未做特别的强化,学生掌握的总体效果并不好。在课程整合之后,把经典算法的设计思想与实现的内容更多地放在了数据结构课程中,结合各类不同数据的组织来讲授相关的经典算法,会使学生对算法与数据结构理解的更加深入。
2.课程实践教学模式的改革与创新
卓越计划的核心目标之一是提高学生的实践动手能力,程序设计基础类课程都是理论与实践紧密结合的课程,这些课程实践教学环节的教学水平与质量,对学生动手编程习惯的养成和编程水平的提高,有至关重要的作用。
首先,在实践教学环节设计上,实现了各门课程实践教学内容的优化整合以及有序连接。整合之后,三门课程实践教学内容各有侧重,其中基本编程能力的训练集中在程序设计基础实验以及实训中完成,数据组织技巧与算法应用训练集中在数据结构实验以及课程设计中完成,程序设计语言编译器的比较、系统分析与设计集中在编译原理中完成。
其次,课程的实践教学平台的建设是实践教学的关键,优质的实践教学平台可以非常高效的达到实践教学的目的。传统的实验教学存在着诸多的弊端,主要表现在:一是课内的上机课时非常有限,短时间内,学生调试不了几个程序,效率非常低;二是虽然也可以指定一些课外上机的题目,但教师无法实时地跟踪学生课外编程过程,学生无法得到及时指导。基于上述问题,我们从程序设计基础课程开始对实践教学模式进行彻底的改革。借鉴国际ACM大赛的竞赛平台模式,建立了山东省高校第一个程序在线评测系统(Oline Judge)SDUTOJ,针对不同学生的学习水平,提供了适合各层次学生的难度不同的大量题目,为各个层次的学生提供了选择的余地。学生可以随时随地通过网络提交自己的源代码程序,并且立即得到程序正确与否以及错误类型的信息反馈,还可以看到别的用户的提交状态以及各个题目的提交汇总信息,整体排名以及班内排名的信息等。截止到2017年4月6日,程序在线评测系统SDUTOJ已有注册用户24639个,实践性题目2870道,累计提交次数251万余次,是山东省高校中用户最多、题目数目最多、开放性最好、教学应用最为广泛的实践教学平台。在课程内容整合后,将该实践教学平台引入到数据结构与编译原理的实践教学中,并按照类别在程序在线测试系统中增加了大量的与数据结构以及编译原理有关的练习题目。程序在线评测系统平台被其他课程共享使用后,学生的动手实践积极性明显提高,特别是学生利用课外时间做题的数量越来越多,很多学生的课余时间都用在了程序调试上。课程实践教学所在的学期,每班的题目提交数量将近10000次,每个学生提交通过的程序数目在平均在150个以上。
3.课程考核方式的改革与创新
课程的考核方式应该体现课程教学的核心理念,程序设计基础类课程的核心理念已经从以往的单纯理论知识学习改变为理论与实践并重的学习,原有的考核模式已经无法适应对实践能力考核的需求。经过多年的改革与实践,我们逐渐摸索出一种有效的考核模式,对程序设计基础类课程原有的考核方式进行了彻底的改革,将传统的以理论考核为主转换为理论与实践同步考核的方式。在新的考核方式中把课程的考核分为基本理论与实践技能两个模块,基本理论考核以考察相关课程的基本思想与基础理论知识为主,主要的考核方式是期末的理论考试,试卷成绩占总成绩的40%。实践技能考核又分两个部分,第一部分是平时的实验成绩,以学生平时在程序在线测试系统(SDUTOJ)中通过的题目数量与质量作为评价依据,根据学生的排名得到平时实验成绩,占总成绩的30%;第二部分是期末的上机考试成绩,利用ACM竞赛的模式,学生在规定时间内独立上机编程,在规定时间内按照学生提交通过的题目数量以及专业相对排名次序核定成绩,占总成绩的30%。
4.课程建设对学生创新能力的培养
学生的创新精神与创新能力培养是卓越计划的另一核心目标,也是程序设计基础类课程建设的重要目标,与课程有关的大学生创新竞赛是改革效果的重要检验平台。我们建立了“以校赛带面、以训练带片、以大赛拔尖”的三级创新能力训练机制,培养学生程序设计能力。自2009年开始组织学校ACM大赛,参赛人数超过300人,以ACM创新实验室为训练基地,组织学生进行程序设计能力训练,参加程序设计基础训练的学生人数从最初的100人左右达到现在的800人左右。在此基础上选拔部分学生参加山东省和国际ACM大学生程序设计竞赛。
近年来,课程组先后组织卓越班学生参加了山东省以及国际ACM大学生程序设计创新竞赛,以检验课程建设在学生创新能力培养方面的效果。其中,在2010―2016年山东省举行的第一届至第八届ACM大学生程序设计大赛中,我校的25支参赛队伍全部获奖,其中获得一等奖7项,二等奖10项,三等奖8项。在2009~2016年的ACM/ ICPC国际大学生程序设计竞赛中,共获得30余项亚洲区域赛优胜奖、17项铜奖、6项银奖,并于2016年获得1项亚洲区域赛金奖,ACM竞赛总成绩位列山东省高校前三位。
5.课程创新与实践的效果
经过各项课程创新与实践措施的实施,程序设计基础类课程的教学质量得到明显的提升。2010-2012三届卓越班毕业学生均反映通过课程的学习,个人的实践动手能力得到逐渐地提升。课程任课教师也一致反映,通过程序设计基础类课程改革,卓越班学生的程序设计能力,特别是动手编程的能力较以前有了非常大的提升,学生综合竞争力增强,就业质量和考研继续深造的学生比例有大幅提高。从整体情况来看,我们的程序设计基础类课程的创新和实践改革处于省内领先水平,可以为卓越计划的教学改革和学生能力培养提供有益的借b。
参考文献:
[1] 刘晓静,王晓英,张玉安,黄建强,刘志强.以创新人才培养为目标的数据结构实验教学改革[J].实验技术与管理,2014,(11).
[2] 金兰.程序设计基础课程教学改革探索与实践[J].中国教学信息化,2017,(1).
关键词:算法与数据结构;学习兴趣;影响因素;实践性教学
算法与数据结构是一门处于计算机学科核心地位的技术基础和主干必修课,着重于培养学生的数据结构与算法设计能力、程序设计和实现能力。学生通过对数据结构设计方法的系统学习与研究,理解、掌握、设计和应用数据结构的主要方法,培养对算法的计算复杂性进行正确分析的能力,为独立地设计算法和对给定算法进行复杂性分析奠定坚实的理论基础。这些能力对从事计算机系统结构,系统软件和应用软件研究与开发的科学工作者是非常重要和必不可少的。
福州大学算法与数据结构课程是国家级精品课程,课程建设的一个重要目标是有效地提高教学效果,激发学生的学习兴趣。围绕这个目标,我们在课程建设过程中进行了以下教学改革:(1)加强了课程的实践性环节;(2)采取师生互动式教学;(3)建立课程成绩的综合评价模型。
显然,这些教学改革措施与学生学习兴趣之间是互相影响的,好的教学方法对提高学生的学习兴趣有一定的作用,但学生的学习兴趣对教学改革的效果也会有一定的影响。学生的学习兴趣与环境因素有一定的关系[1],探索和分析对学习兴趣有影响的因素是教学理论和实践中的一个重要课题。为了更好地做好算法与数据结构的教学改革工作,有效地激发学生的学习兴趣,了解学生对于目前的教改方案的看法,我们对福州大学计算机专业本科生进行了学习兴趣及相关因素的调查和分析。
1方法
1.1调查方法
数学与计算机学院2007级本科生在二年级上学期学习算法与数据结构课程,课程教学于2008年12月结束。课程教学小组教师于2009年3月向2007级全体本科生发放调查问卷,于一周后回收问卷,共有学生281人,问卷回收281份,回收率100%。
1.2调查内容
调查内容分为三部分:(1)学生的基本情况、专业基础课学习情况。专业基础课主要指数学分析、线性代数、高级程序设计语言和离散数学。(2)对算法与数据结构教学改革的评价。(3)课程学习兴趣量表。
学习兴趣量表是参考物理学习兴趣量表[2]编制而成的(见表1)。量表共有17个条目,将每个条目的得分相加得到量表的总分。以量表的总分作为反映学生对于算法与数据结构课程的学习兴趣指标。得分≥13分者为“学习兴趣很高”,得分在8~13分者为“学习兴趣较高”。该量表用于281名学生的学习兴趣测量,得到其Cronbach可靠性系数 =0.8465,说明该量表能够有效地测量学生对于算法与数据结构课程的学习兴趣。
1.3分析方法
对各因素与学习兴趣之间的关系用描述性统计分析和Wilcoxn秩和检验进行比较,采用多元回归[3]的方法分析影响学习兴趣的主要因素。全部检验采用双侧,以P
2结果分析
2.1学生的基本情况及学习兴趣
在本次调查的281名学生中,男性239人(占85.05%),女性42人(占14.95%),平均年龄20岁。学生的家庭居住地分布见表2。在课程开始之前的学期中曾参加过“国际大学生ACM程序设计竞赛”培训的学生有57人,占20.28%。
在281名学生中,学习兴趣量表的平均得分是8.12分,标准差是4.37分。有16.01%的学生的得分超过13分(学习兴趣很高),有39.15%的学生的得分在8~13分(学习兴趣较高)。
2.2学习兴趣与课程成绩的关系
在281名学生中,“算法与数据结构”课程综合评价成绩在优(≥85分)、良(70~84分)、及格(60~69分)和不及格(
2.3与学习兴趣有关的因素
男生和女生的学习兴趣平均分分别为8.24分和7.40分,差别无显著性(P>0.05)。城市、县、乡以及农村生源的学习兴趣平均分分别为8.69分、7.88分和8.05分,差别无显著性(P>0.05)。在课程开始之前曾参加过“国际大学生ACM程序设计竞赛”培训的学生和从未参加过竞赛培训的学生学习兴趣平均分分别为10.40分和7.54分,差别有高度显著性(P
有66.9%的学生认为作为未来的计算机专业技术人员,学习算法与数据结构课程是很有必要的,这些学生的学习兴趣平均分是8.66分,而认为不是很必要或不必要的学生(占33.1%)的学习兴趣平均分是6.64分,二者差别有高度显著性(P=0.016)。
学生的四门基础课程成绩除数学分析之外,其他课程成绩均与学习算法与数据结构的学习兴趣有关(见表4)。
2.4对课程教改的评价
目前算法与数据结构课程的总学时为90,其中理论课50学时,实习课和实践性教学共40学时。在281名学生中,认为课程总学时设置偏少、合适、偏多的同学分别有41.64%、40.57%和3.2%;认为理论课教学内容偏少、合适、偏多的同学分别有20.28%、47.33%和10.32%;认为实践性教学内容偏少、合适、偏多的同学分别有13.17%、61.92%和11.39%;对互动式教学很感兴趣、不感兴趣、很不感兴趣的同学分别有37.01%、27.05%和7.83%;对于课程成绩采用综合评价模型评定的方法,认为很合理的同学有69.04%,认为不如传统考试方式的同学占8.10%。
2.5学习中存在的主要问题
在本次调查中,学生在学习中自感存在的主要问题如表5所示。有一定比例的学生存在的问题是与教师的教学有关,提高教学的语言艺术水平,注重用通俗易懂的语言讲授,把握好适当教学进度是下一步改进教师教学效果的主要措施。
3分析
本次的调查结果显示,学生的学习兴趣和算法与数据结构课程成绩之间存在正相关关系,学习兴趣越高,课程成绩越好。这提示我们在今后的算法与数据结构课程建设工作中要积极探索如何更有效地激发学生的学习兴趣。
从本次调查结果可知,学生的学习兴趣与学生的专业基础背景有一定的关系,尤其与学生在一年级时学习的专业基础课程如线性代数、离散数学、高级程序语言这几门课程的学习情况有关,在这些课程中,学习成绩较好的同学后续学习算法与数据结构课程的兴趣也较高。由于算法和数据结构中涉及了许多对算法进行分析的数学工具,因此学好这些课程是学好算法与数据结构课程的基本概念和知识的基础,同时,学好这些课程也可以增强学生的学习信心,有利于提高学习兴趣。
除专业基础课程之外,与学生学习兴趣有关的另一个因素是对学习算法与数据结构课程必要性认识。调查结果显示,虽然有66.9%的学生认识到作为未来的计算机专业技术人员,学习算法与数据结构课程是很有必要的,但是仍有33.1%的学生对此没有认识,这反映出有些学生对于课程的学习比较盲目,学习目的性不明,从而学习动力和兴趣不足。因此,今后的课程建设要进一步加强实践性教学和以案例为先导的理论课教学,案例可以取自教师的实际科研课题,也可以是企业或其它实体的实际课题。通过让学生接触这些实际案例,引导学生树立算法与数据结构课程学习重要性和必要性的认识。要做到这些,对教师的自身业务素质有较高的要求,因此,培养一支高业务水平的教师队伍也是课程建设的重要任务。
从2000年开始,在大学一年级学生中开展“国际大学生ACM程序设计竞赛”培训班,有许多学生都积极参加了程序设计竞赛培训。本次调查显示,一年级时参加了程序设计竞赛培训的学生,后续学习算法与数据结构课程的兴趣高于不参加的学生。由于程序设计竞赛培训主要是训练学生的算法设计与实现的能力,通过参加培训班的学习,可以使学生的实际动手能力得到锻炼,从而使学生能灵活运用所学的知识来解决实际问题。因此,教师应当鼓励学生在学有余力的情况下,积极参加“国际大学生ACM程序设计竞赛”培训,以提高学生的专业素质和技能。
本次的调查结果显示,实施教改方案后,有超过50%的学生对于学习算法与数据结构课程有高和较高的学习兴趣。这在一定程度上反应出教学改革取得了一定的成效,有效地激发了学生的学习兴趣;此外,课程成绩综合评价方式也得到了同学们的欢迎,有60%以上的同学对于课程成绩的综合评价方式给予了充分的肯定。这种课程成绩的综合评价方式结合课程实践和平时的努力来评定成绩,避免了传统的考试方法重理论轻实践,一张试卷定成绩的弊端,应而能客观地评价学生的学习成绩,这种成绩评定模式是今后要继续坚持和不断完善的。
课堂互动式教学是教学改革尝试的内容之一。但是,在本次调查中,有34.88%的学生对互动式教学不感兴趣。互动式教学具有活跃课堂气氛,有效激发学生的计算思维能力的优点,但有如此高比例的学生对此不感兴趣,这反映出教师在课堂上与学生的互动存在一定的问题。不断摸索出有效的互动式教学方法是今后课程建设和教学改革的工作之一。
就学生们学习中存在的主要问题,与教学相关的有:不理解教师对教学内容的表述和不能跟上教师的讲课进度。因此,提高教学的语言艺术水平,注重用通俗易懂的语言,深入浅出地讲授教学内容,适当把握好教学进度是下一步改进教学效果的主要改革方向。
4结语
通过对算法与数据结构学习兴趣影响因素的分析,我们更加认识到学习兴趣对教学质量的提高具有重要的促进作用。教学质量与学习兴趣两者既有共性特征,也有各自的个性特征。在课程的教学中要通过多样化的教学形式,增进教师感染力,激发学生的学习兴趣,充分调动学习积极性,不断提高教学质量。
参考文献:
[1] 张焕庭,李放. 教育辞典[M]. 南京:江苏教育出版社,1989:23-45.
[2] 高光珍,胡象岭,刘生庆. 中学生物理学习兴趣量表的修订与检验[J]. 物理教育探讨,2004,22(23):16-18.
[3] 何晓群. 现代统计分析方法与应用[M]. 北京:中国人民大学出版社,1998:102-123.
[4] 高惠璇. SAS系统 SAS/STAT软件使用手册[M]. 北京:中国统计出版社,1997:112-169.
Analysis of the Relationships between Learning Interest of Algorithms and
Data Structures and Influencing Factors
WANG Xiao-dong1,2, WU Ying-jie2, YU Chun-yan 2, WANG Yi-lei 2, FU Yang-geng 2
(1. College of Computer Science, Quanzhou Normal University, Quanzhou 362000, China;
2. College of Computer Science, Fuzhou University, Fuzhou 350002, China)
关键词:数据结构;课程设计;教学质量
数据结构是计算机专业的核心课程之一,是计算机软件技术的基础,以数据为中心讲述问题如何在计算机程序中得以实现。该课程的教学不仅要注重学生对理论知识的理解,更要培养学生能针对具体问题,设计合理的数据结构,对数据进行有效的存储、操作,并能完成相应的高效算法。课程设计的教学是整个教学环节中非常重要的一环,它弥补了课堂教学中实践少的缺陷,其教学目标不仅要培养学生缜密的逻辑思维和数据抽象能力,更要培养学生在软件设计领域科学的思维方式,将算法理论和编程实践完美结合,能够在工程实际中灵活应用。因此不断改进课程设计的教学方法,提高教学质量是培养高素质软件人才的迫切要求。
1存在的普遍问题
1.1编程语言基础差
数据结构课程设计通常是在大二进行,算法是基于C/C++语言。虽然学生之前已先修过这些课程,但C++本身规则复杂,面向对象的思想不容易掌握,而学生又没有经过系统训练,普遍存在编程语言基础薄弱、对调试程序的方法不够熟练、程序结构设置不合理、代码编写可读性差等问题。不少同学反映算法能听懂,看教师演示一些实例也觉得简单,但轮到自己编程就无从下手。这种状况直接制约了学生完成课程设计的质量[1]。
1.2缺乏系统的软件开发思想
计算机专业的课程体系中,软件工程通常安排在数据结构课程设计之后,这样学生在进行课程设计时,尚不具备软件开发的思想。遇到问题时,只考虑怎么实现,没有进行整体软件开发的过程规划,忽视了软件的性能、质量、甚至于需求都不甚明确就急于动手编写程序。这样的做法使得课程设计的完成效率很低,经常需要返工。
1.3教师的指导“过多”或“过少”
课程设计中,教师的指导相当重要,但是目前存在两个极端,有的教师对每个课程设计都讲解得面面俱到,如何实现,用什么样的存储结构,所得结果等都作了交代,学生只是被动的接收者,这种“填鸭式”的教学方式制约了学生的创新能力。而另一个极端,有的教师认为课程设计是由学生上机完成的,教师督促学生,最后给出考评,对学生完成课程设计的过程关注太少,很多学生因此敷衍了事。教师如何把握指导的度,如何指导是学生能力能否得到提高的一个重要因素[2]。
1.4考评制度不合理
长期以来,课程设计报告被看成是评定学生成绩的一个重要依据,而对学生软件开发的过程关注不多,学生只要上交了报告就能获得成绩[3]。这样的做法导致学生过度追求报告的整洁度、实验结果的正确性等。甚至部分同学抄袭、直接从互联网上下载报告交差。一个学期下来,除了交了几份报告,学生的收获甚少,课程设计教学效果甚微。因此,必须改革考评制度,才能真正培养学生的动手能力、创新能力。
2提高课程设计教学效果的措施
2.1规范软件开发的过程,培养良好的编程习惯
在学生开始课程设计前,教师首先通过一个具体的实例,从需求分析、概要设计、详细设计、编程测试等各个方面出发,让学生了解完整的开发软件过程。在数据结构课程教学中,所有算法均用可运行程序讲解,避免出现懂算法不懂编程的现象。有意识地让学生强化编程的技巧、调试方法、面向对象思想等内容。
我院数据结构课程组教师采用面向对象的思想,将数据结构中基本算法全部用C++模板类实现,学生通过多看、多读这些规范的程序,取得了不小进步。
2.2梯度命题,循序渐进开展课程设计
课程设计以往是教师根据实验指导书布置课题后由学生完成,部分学生感到难度很大,无从下手。现阶段我们将课程设计改为验证型、验证设计型、设计应用型多种层次,针对各种基本数据结构,教师首先用模板类实现,学生在课程设计时先用实例验证程序,在此基础上,设计出预留的一些函数接口,实现该类的部分功能。最后再针对某一具体问题,由学生开发出完整的程序。这是一个由易入难的循序渐进的过程,学生通过验证型实验更加牢固掌握基本数据结构,再由验证设计型和设计应用型实验学会如何应用数据结构,如何在计算机中实现存储,实现各种需求的功能。
下面以二叉树部分内容为例,首先实现二叉树的模板类如下:
/*二叉树类*/
template
class BinaryTree
{
public:
BinaryTree():m_root(NULL){} /*构造函数*/
~BinaryTree()//析构函数
/*按以先序次序输入结点值的方式建立二叉树的接口函数*/
void Create1(ElemType ch[],const ElemType &endChar);
/*以二叉树的先序和中序次序建立二叉树的接口函数*/
void Create2(ElemType ch1[],ElemType ch2[],int );
/*先序递归遍历二叉树的接口函数*/
void PreorderTraverse (void (*visit)(const ElemType &));
/*中序递归遍历二叉树的接口函数*/
void InorderTraverse (void (*visit)(const ElemType &));
/*后序递归遍历二叉树的接口函数*/
void PostorderTraverse (void (*visit)(const ElemType &));
……
private:
BTNode *m_root;
/*按先序次序输入结点值的方式建立二叉树*/
void _Create1(BTNode* &,ElemType ch[],const ElemType &,int &);
/*已知二叉树的先序遍历次序及中序遍历次序,建立二叉树*/
void _Create2(BTNode * &,ElemType ch1[], ElemType ch2[],int ,int ,int &);
/*先序递归遍历二叉树*/
void _PreorderTraverse(BTNode* ,void (*visit) (const ElemType &e));
……
};
对于这样的模板类,设定的验证型实验为:给定一棵二叉树,验证其先序中序和后序遍历结果。在掌握了二叉树遍历的基础上,设计出模板类中预留的两个接口函数create1和create2。最后,安排设计型实验为创建表达式树;分别用三种遍历方式遍历该树,比较它与实际的波兰式、中缀式和逆波兰式之间的区别;完成给定表达式树的表达式求值运算。这样有梯度地安排课程设计,一方面强化了基本概念,另一方面引导学生完成更复杂的设计。对基础薄弱的同学来说,验证型实验难度不大,基本都能完成,大大增强了自信;对优秀学生来说,挑战设计型实验更能提高自身的能力。
2.3抽丝剥茧,层层深入启发
学生遇到复杂问题时,往往一筹莫展,不知如何下手。教师应教会学生如何从问题本身出发,层层分析,应采用哪种数据结构,用到什么样的操作,在这样的操作需求下应用何种存储方法比较合适,最后细化到具体的函数实现。
如教学计划编制问题[4],要求根据课程和课程之间的先修关系,得到合适的教学计划安排。首先分析这个问题是对有向图进行拓扑排序,课程和课程之间的先修关系可用有向图描述出来。数据结构为有向图,存储方式为邻接表,应用的操作是拓扑排序。拓扑排序的基本思想是先输出有向图中入度为零的顶点,再从图中删除该顶点和所有以它为尾的弧,重复执行,直至图中所有顶点均输出为止。要完成拓扑排序,首先要求出图中所有顶点的入度。拓扑排序算法中还用到了一个辅助的数据结构栈,因此还需要初始化栈、出栈,入栈,判定栈空等操作实现。这样层层分析下来,程序中需要的函数一一明了:创建有向图、邻接表的建立、求顶点入度、初始化栈、出栈、入栈、判定栈空、拓扑排序等。函数层次关系图示如图1所示。
图1函数层次关系图
通过这样的教学方式,学生学会了带着问题去思考,逐步学会将大的程序化解成若干小函数,最终经过整合完成整个设计开发。
2.4加强团队合作,调动每位同学积极性
在课程设计中,针对每一种数据结构安排了一个工程性综合实验,这个综合实验由几名同学组成小组合作完成。团队成员分工明确,一名同学担任组长,负责组织和控制组内的工作进程,强调任务落实到组内每一个同学。
教师布置任务后,每个团队将软件开发流程应用到课程设计中,实质性进行问题规划、模块划分、项目整合等工作。只有团队中每个成员都积极面对,整个团队才能获得优秀成绩,无形之中鞭笞每位同学认真对待。在一个团队中,大家集思广益,可以跟伙伴一起交流,互相学习,形成共同进步的良好局面。
最后在验收答辩时,团队中每个成员都应汇报自己所做工作,教师和其他团队可以提问,交流开发过程中的心得。
2.5改革考评制度,从多角度综合考虑成绩
合理的考评制度可以对课程设计过程进行有效的监控,通过考评体系可以反馈各阶段的进展情况,便于总结经验,找出不足,保证课程设计的质量和效果。课程设计考评有别于普通的课程评分,我分院数据结构课程设计的成绩由几个方面综合决定:课程设计的内容、课程设计的实现以及实验报告。各项考评指标均有一定的权重,能够比较客观公正地确定学生成绩。其中课程设计的内容主要考虑学生所选课题的难易度、工作量多少。实现过程主要考虑完成情况、软件代码规范化、文档规范化、答辩质量等,最后由学生提交设计报告进行总结和讨论。设计报告除了包括常规的系统需求分析,概要设计,详细设计,调试分析和实验结果外,还鼓励他们提出优化方案,对于每个课程设计再“多想一点”,即其他可能存在的求解方法,如已经使用了链式存储结构实现,那使用顺序存储结构如何实现?各种设计的优缺点是什么?如何提高时间空间性能?通过总结,学生对问题有了更加深入全面的理解,锻炼了扩散思维方式,培养了创新能力。同时教师对评价优秀的学生或团队给与奖励,促使学生之间形成你追我赶的良好学习氛围,整体提高教学质量。
3结语
数据结构作为计算机专业的重要基础课程之一,对学生软件开发习惯的培养至关重要。提高课程设计教学质量不仅可以巩固基本知识,还可以让学生适应快速发展的软件开发技术,激发学生学习和研究的兴趣。本文从五个方面讨论了提高课程设计教学质量的措施,通过一个学期的教学实践,从效果上来看,这届学生分析问题、解决问题的能力,综合创新能力,学习积极性都比前几届学生有了明显提高,绝大部分的同学都能顺利完成课程设计并获得较好成绩,这为他们后续的课程打下了坚实的基础。
参考文献:
[1] 庞晓琼. 案例驱动的数据结构课程设计教学改革实践[J]. 计算机教育,2009(1):53-64.
[2] 陈越,何钦铭,冯雁.“数据结构”综合性课程设计教学探索与实践[J]. 计算机教育,2008(8):54-55.
[3] 李群,赵玉霞,庄波.《数据结构》实验课程设计与探讨[J]. 中国现代教育装备,2007(3):27-28.
[4] 严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,2006:180-182.
Discussion and Practice on Improving Teaching Quality of Data Structure Course Design
XU Chong, WANG Libo, JIANG Juan
(College of Computer Science, Hangzhou Dianzi University, Hangzhou 310018, China)
Abstract: Data Structure course design is an important professional practice lesson for computer major in university or college. According to the current situation of the low teaching quality for course design, based on the experience in our college, the paper puts forward several steps on improving the teaching quality, and then have been analyzed and discuissed.
摘要:“数据结构”是计算机专业课程体系中的一门较重要的必修课程,但因其理论性强、思维抽象、理解难度较大等特点,实际教学效果往往不够理想,因此,本文对“数据结构”课程教学过程中存在的问题进行了分析,并就如何提高“数据结构”课程的教学效果,提出在教学改革方面的一些设计。
关键词:高等职业教育;数据结构;教学方法
中图分类号:G642
文献标识码:B
1引言
“数据结构”是计算机专业一门重要的必修课,是高职专升本、本科考研的必考课程之一,在整个课程体系中处于承上启下的核心地位。一方面扩展和深化在“离散数学”、“程序设计语言”(目前以C、C++语言居多)等课程学到的基本技术和方法,另一方面为进一步学习“操作系统”、“数据库原理”、“软件工程”、“编译原理”等专业课奠定坚实的理论基础,可以说,对“数据结构”课程的掌握程度直接影响到学生对计算机专业知识的学习。因此,我们有必要探讨“数据结构”课程教学中存在的问题,并且结合高职学生的实际情况,总结设计出一套有效的教学方法。
2 “数据结构”课程教学中存在的问题
学生在学习“数据结构”这门课程时,普遍对课本内容理解困难,对算法设计题感到无从下手,上机调试程序时更不知如何操作。对此情况我们进行了认真分析,得出如下结论:
(1) 学生对本门课程的误解,造成学习积极性不高。“数据结构”课程是专业基础课,但是它既不像网页设计那样生动有趣,又不像Visual Foxpro等课程直接可以应用于将来的工作中。在学习过程中,学生感到“数据结构”不过是一些理论和程序的堆砌,常常问老师:“‘数据结构’学完后有什么用?”,由于学生不能正确认识该课程的作用,故学习的积极性不高。
(2)“C语言”(或其它程序设计语言)课程开设不足,为“数据结构”课程教学埋下隐患。“C语言”(或其它程序设计语言)为“数据结构”的前导课程之一,学生对它的熟悉及掌握程度直接关系到“数据结构”课程的教学效果。
特别是对“数据结构”中使用频率最高的C语言中的结构体、指针的认识和理解不深,对函数参数、函数调用的知识点不熟练。这些内容在“数据结构”的教学过程中,尽管老师费劲唇舌,学生仍然模糊不清,致使教学效果不理想,部分学生还产生畏难和厌学情绪,甚至丧失对该课程学习的兴趣和信心。
(3) 课程自身问题,导致教学效果不佳。“数据结构”的逻辑性强、内容抽象、琐碎、概念多,所有内容均自成体系,相互之间的衔接线索很少,总体感觉内容零散,没有一个整体的知识框架体系,特别是部分知识点和算法难于理解,大部分学生常常觉得教科书中的内容与具体的算法相距甚远,无从下手,甚至在课程学习结束以后,都不知道自己到底学了些什么。
(4) 实践教学课时少,导致学生动手能力差。“数据结构”是一门理论与实践并重的课程,现在的上机课时仅为20课时,实践教学严重不足。还有些教师往往只注重理论教学,把实践教学的课时全部变为了理论教学,这样学生学起来更是枯燥乏味,对程序与算法之间的转换就更难以实现。
3教学改革设计的实施
通过对上述存在的问题总结分析后,我们从以下几个方面对“数据结构”课程进行了改革设计。
(1) 运用联系的观点阐述课程作用,激发学生学习的兴趣。“数据结构”课程是计算机体系中不可或缺的一个重要环节。在教学中我们采用联系的观点,把“数据结构”课程纳入整个计算机体系教学,学生就能认识到课程的重要性,从而激发学习兴趣。例如我们讲到链表时,可以有意把内容延伸到操作系统中计算机内存分配;讲树型结构时,可以与文件夹结构联系在一起;讲图结构的最小生成树,可以联系局域网的设计;讲查找技术,可以涉及网络的搜索引擎等等。这样不仅讲课活泼生动,而且还能引起学生联想,刺激学生学习的兴趣,收到良好的教学效果。
(2) 解决C语言的不足。“数据结构”课程教学过程中主要运用的是C语言的指针、函数、数组作为函数参数以及结构体类型来分析和解决问题。对于大部分学生来说,C语言运用能力不是很强,如果在上课时直接切入主题,就会使学生有云山雾罩的感觉。要解决这个问题,应该在教学中注意做到以下两点:一是与“C语言”的授课教师做好教学的沟通工作,统筹安排各部分的授课时间,保证指针、函数、及结构体等内容有足够的时间,并将其作为重点讲授并加强上机实践,让学生掌握C语言的精华。二是在学习“数据结构”课程初期,指导学生有针对性地复习指针、函数、及结构体等知识点,并强调它们在数据结构课程中的重要性。例如在课堂上以一个实例的形式对这些知识点进行复习,尤其指出学生难理解、易混淆和犯错误的地方,另外布置大量涉及这些知识点的作业,通过批改作业发现存在的问题然后反复进行讲解。
(3) 注意课堂语言的艺术性、趣味性,以激发学生的求知欲。“数据结构”是一门理论性很强的课程,其概念特别抽象。高职学生的理论基础普遍较弱,所以如果像本科教学一样,单纯地用课堂语言教学,高职学生理解起来有一定难度,而且会感到枯燥,因此,教师在授课时要讲究语言的艺术性,结合学生的实际,使用更加通俗、形象、生动、直观的教学语言进行讲授。例如堆栈的结构和运算可以和生活中的洗碗结合起来;队列可以和学生去食堂排队买饭结合起来;无向图可以和城市的公路交通网(若无单行道)结合起来,有向图可以和来水主管网结合起来。通过这样的比喻说明,学生不仅听起来有兴趣,易于理解,而且效果也比只单纯地“照本宣科”讲定义要强的多,能够达到事半功倍的效果。
(4) 抓好实践环节,提高算法设计能力。“数据结构”是实践很强的一门课程,不仅要学习理论知识,更要注重上机实践。通过上机实践来验证理论内容并加深对各种算法的透彻理解,结合高职学生学习能力不足的实际情况,我们从以下三个方面加强和改进了实践教学:一是学期初两周内给出适当的上机实验题目复习C程序语言中的指针、结构体和函数等知识点,并根据上机实验的情况对数据结构中常用及易出错的地方进行集体重点讲解,为后面算法的上机实验打好编程语言基础。二是为打消学生实现类C语言算法描述和C语言源程序的转换的畏难情绪,前两次上机实验时,教师可以先给出完整的源程序,让学生在主函数中添加语句来体验数据结构的基本操作的执行,再逐步过渡到自己编写完整的源程序。三是精心设计上机习题同时注意进行分层次的个性化教学。从不同学生的实际水平、基础出发,来设计不同难度的实验题目,给出不同的实验条件和要求,尽量让所有学生通过自己的努力获得实验的成功并掌握基本知识,从而最大程度地提高学生实验的积极性。例如,对堆栈可以设计建栈、出栈、入栈和后缀表达式求值实验;关于树可以设计二叉树的建立和遍历及给定一棵二叉树,打印指定结点的双亲和所有的孩子结点实验。基本操作实验学生可以根据自己的实际情况来选择完成。另外对于难度小的实验要求每个学生独立完成,而对实验难度稍大的允许以2到3人以小组形式完成或给出部分代码或提示。
(5) 对教学内容进行优化和归纳提炼。由于高职学生自学能力薄弱,再加上“数据结构”课程内容繁多、零散,不具备一个整体性,因此在教学中要求做到如下两点:一是教师要分析清楚数据结构的知识体系结构,在授课时始终贯穿“一中心、四结构、两存储”的原则。“一中心”是算法设计建立于逻辑结构,算法实现依赖与逻辑结构。“四结构”是指集合结构、线性结构、树型结构、图形结构。“两存储”是指顺序存储、链接存储。二是把握重点。在贯穿“一中心、四结构、两存储”的原则讲授内容时,要把握好重点,有选择有层次地教学。例如,线性表是最常用且最简单的一种数据结构,栈和队列是操作受限的线性表,树和图往往要做线性化处理,因此要把线性表作为重中之重的内容进行透彻的剖析。对于线性表的两种存储结构顺序表和单链表,把单链表作为重点和难点来讲授和上机实验。再如,二叉树的遍历操作为重点来讲授和上机实验,而哈夫曼算法作为可选的上机实验内容。
4结束语
由于“数据结构”是计算机专业的核心课程,以理论为主,而高职教学是以实践教学为主的教学。因此,如何将这门理论性很强的课程同高职的实践性教学相结合,值得我们进一步研究。在高职课程改革进行的如火如荼的今天,可以相信,只要我们从思想上重视“数据结构”课程改革与设计,不断提高自身的教学能力,采用合理的教学方法,“数据结构”课程的教学必将取得良好的效果。
参考文献:
[1] 严蔚敏,吴伟民.《数据结构(C语言版)》[M]. 北京:清华大学出版社,2001.
[2] 顾翔. 数据结构实践教学探讨[J]. 信息技术,2005,(30):110-112.
[关键词] 数据结构; 独立学院; 教学改革; 实践能力
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2012 . 10. 075
[中图分类号] G420 [文献标识码] A [文章编号] 1673 - 0194(2012)10- 0129- 01
数据结构课程是计算机科学与技术专业的一门核心专业基础课,它是操作系统和数据库原理的重要先修课程,也是从事计算机软件开发的基础课程。独立学院的人才培养目标是培养应用型人才,所以在授课时既要注重理论知识,又要锻炼实践能力。而独立学院的自身特点决定了理论性课程的教学难度较大。本文主要针对独立学院数据结构课程教学中存在的问题,提出了相应的教学改革方案,实践证明,通过这样的教学改革,明显提高了学生的学习兴趣和学习效率。
1 传统教学中存在的问题
(1) 数据结构课程是以C语言或C++语言为先修课程的,所以对这两种编程语言的掌握程度直接影响了本课程的教学效果。如果学生在编程语言的学习中存在很多模糊不清的问题,会使学生很快对本门课程失去学习兴趣,影响学习效果。尤其是独立学院的学生,对C语言或C++语言课程的熟练掌握有一定困难,再加上数据结构课程本身的理论性较强、较抽象,很多学生在授课的前半程就放弃了学习。
(2) 数据结构课程本身的理论性和实践性都很强,尤其是对各种不同数据结构的逻辑结构和物理结构的理解、算法思想的理解以及算法的上机实践,都让很多学生觉得很难一下接受。学生在学习时不能很好地建立知识结构,导致学了新知识就忘了旧知识,不能形成知识体系。
2 针对独立学院的教学改革与实践
2.1 选用适当教材
针对独立学院学生的特点,本课程选用的教材中所讲授的程序和算法难易程度适当,学生容易接受,比较适合64学时的教学要求,同时本套教材还配备了完整的实验指导书,方便教师授课和同学学习。
2.2 调动学生的学习兴趣
数据结构教学具有理论性和实践性兼顾的特点。因此在授课中,不能急于介绍理论,而要适当强调实践。应改变以往教师强行灌输的“填鸭式”教学方式,增加课堂的互动学习环节,通过提问、列举学生比较熟悉的案例、小组讨论等互动环节,让学生主动发现数据结构在实际中的应用,以此来调动学生的学习积极性,激发学生学好这门课的愿望,同时锻炼学生运用理论知识分析问题和解决问题的能力。
2.3 巩固先修课程,弥补学生C语言(C++语言)的不足
C语言(C++语言)程序设计是数据结构的先修课程,学生对C语言(C++语言)的掌握程度,直接关系到数据结构课程的教学效果。C语言(C++语言)是计算机编程语言的基础,但对于大部分学生而言,不能做到运用自如。而且C语言中指针、函数、数组等都是难点,如果上课时直接要求学生用C语言(C++语言)描述数据结构中的线性结构、树形结构和图结构,会很快打消他们的积极性。为了解决这个问题,在授课时,利用前几次课的时间来复习C语言(C++语言)的相关知识,例如数组、指针、结构体等。在复习中要重点讲解与本课相关的知识点,不必大篇幅地详细讲解。这样既可以巩固程序设计相关的知识,又减轻了学生对数据结构课程中实践环节的心理负担,培养了学习兴趣,为数据结构课程的教学打好基础。
2.4 教学内容的归纳总结
数据结构这门课程不但理论性很强,还具有一定的抽象性,在“教”与“学”方面都存在困难,作为教师首先应对概念、理论、算法思想和算法实现的相关知识进行加工、处理、总结,把握课程的重点和难点,能够将前后内容联系起来分析,寻找共性的、有规律的知识进行归纳与总结。例如在数据结构中每种数据结构(线性表、链表、栈、队列、树、图)都会涉及到它的逻辑结构、物理结构和算法实现。在讲授的过程中可以用这三方面内容作为主线贯穿全书,每讲到一种新的数据结构时都可以拿出这条主线,这样学生学起来就会觉得知识有系统性。
2.5 多种教学手段配合使用
现代的教学多采用多媒体技术进行,它可以帮助老师在最短的时间内传授最多的知识,并且可以通过动画来形象的描述数据结构的动态变化,避免了单纯语言描述的抽象性和板书静态性的缺点。但是作为教师,不能过分依赖多媒体课件,在相关算法的讲解过程中不能忽略了板书的重要作用。所以在教学中要现代教学和传统教学手段相结合,同时配合互动式教学环节,才能最大限度地提高学习效率。
2.6 强化实践教学
为使学生真正学好数据结构, 除了要采用多种多样的教学方法和手段外, 还要让学生多动手,多上机,多实践。实践的首要环节是要多做习题, 能听懂但不动笔是不行的,学生不仅要做习题,而且要求交作业,教师通过对作业进行批改, 对出现的问题及时进行总结、归纳、讲解。讲评时要着重讲解题思路,强调解题的注意事项,并再让同学做相同的类型题,做到举一反三。其次就是上机实验。上机实验能提高学生灵活运用数据结构和算法的能力,使学生在程序设计、代码编写、上机操作、程序调试等方面都受到严格的训练。实验可分两部分,一是验证实验,学生可以对在课堂上学到的基本算法进行验证;二是设计实验,教师根据课堂学过的基本算法提出实际应用题,让学生自主完成算法的设计与实现。
【关键词】项目驱动;课程设计;应用型院校
Abstract:Project driven teaching method is a teaching activity of the teachers and students carry out a complete“project”together,the traditional project driven teaching methods focus on the task-driven in the process of teaching and cultivate students’learning enthusiasm in class,however the“project-driven + course design”of teaching and testing mode not only emphasizes on classroom teaching,but also pays more attention to learning effect.First,it will break up the teaching contents and integrate them according to the knowledge task modules,then group the students and organize the discussion according to the knowledge task in different stages.In the end,it hands in the learning results in the form of a report and then completes the process of learning.This kind of teaching process is particularly suited to the applied college students.This paper is based on the“data structure”of the computer professional course teaching,provides the method of division of knowledge task modules to the teachers and helps teachers guide students to ask questions,analyze problems in practice and solve the problem at last,so as to improve students'learning enthusiasm and initiative,make students'theoretical level and skills operation reach a new level.
Key words:project driven;course design;applied college
1.《数据结构》课程授课现状
《数据结构》课程是计算机及其相关专业的核心基础课程,是一门理论与实践相结合的课程,在整个计算机专业教学体系中处于举足轻重的地位,特别在软件方向的课程体系中处于承上启下的中心地位。长期以来,《数据结构》课程的教学备受相关学院领导高度重视,然而,大部分高校《数据结构》课程的教学效果都不尽如人意,影响教学效果的原因大致如下:
(1)理论教学与实践教学严重脱节。目前对于《数据结构》的理论教学主要是教师首先讲解基本的结构思想,然后再引导学生读懂由类C++语言编写的算法,最后布置作业让学生思考针对这些算法的问题。在实践教学方面,学生通常要做的事是将课本上写的很详细的代码翻译成相应的高级程序语言并调试通过,甚至不会去自己解决一个稍微复杂点儿的综合问题。基于上述两种原因,学生在学习的过程中可以不用费神思考就能将问题解决,但是离开课本遇到一个新的具体的问题就不知所措,体现不出学生独立思考问题的能力,实践教学环节更是流于形式,加之学生程序设计的基本功不扎实,久而久之对学习编程和思考问题失去兴趣。
(2)传统单一的考核形式,不能体现学生的技能水平。现阶段大多数高校对于《数据结构》课程的考试形式总是以笔试为主,考核的内容还是单一的理论知识,尽管最后有编程题目或者分析题,但是均不能体现学生的技能掌握的如何,90%的学生感觉学习了《数据结构》这门课程对自己以后的学习和工作没有用处,进而减弱了学习的信心,导致学生再学习后续的数据库和编程方面的课程的时候,缺乏模型构建的能力。
2.项目驱动教学法在《数据结构》课程中的应用分析
项目驱动教学法是以学生为主体,以项目知识为主线,教师参与引导的教学方法,它不再是“教师讲,学生听”的被动教学模式[1]。该教学方法的主要目的是让学生真正的参与到课堂中来,培养他们主动思考问题和创新的能力,特别适合于像《数据结构》这种内容延伸性强、抽象思维要求特别高的课程。
2.1 项目驱动教学法的特点
项目驱动不同于简单的任务驱动,它更侧重于培养学生解决未遇到的关键问题的能力,在教学过程中表现为以项目为本位、以学生为主体的重要特征,要求教师设计的项目要具有一定的应用价值,并且最好与企业实际生产过程或具体问题有直接的关系。项目教学法的特点如下:
(1)具有实践性:项目的主体与现实世界密切相连,学生的学习内容更加的具有针对性和实用性。
(2)具有自主性:学生自由、自主的分组进行学习,根据自己的理解发挥想象力,从而促进学生创造能力的发展。
(3)具有发展性:长期项目与阶段项目相结合,构成为实现教育目标的认知过程。
(4)具有综合性:项目的设计本身需要综合多个学科,所以培养了学生综合运用知识的能力。
(5)具有开放性:学生需要围绕问题进行探索和解决,所以学生的学习形式不再局限于课堂[2]。
2.2 师生角色的相互转变
项目驱动教学方法要求每位学生均要真正的参与课堂中来,在老师的引导下,发挥想象、参与研究、参与创造。因此,项目驱动教学法较以往的传统教学实现了两个打破:
第一,打破教材章节顺序,以项目为主线完成课程的培养目标。教师须在完全吃透课程培养目标的基础上,熟悉教材知识点,然后根据要传授的知识点结合该专业的就业方向和岗位构建项目,教师的主要精力应放在项目的设计、布置和引导方面,教师设计项目的优劣直接影响学生的学习效果。另外,在教学的初级阶段,教师还应该全面把握项目实施过程中学生可能出现的问题以及如何解决。在项目的实施阶段,教师只是起到引导和督促的作用,而不参与讨论,当各组学生都提出普遍不懂的问题时,可以先引导其查阅相关的资料或略微指导一二,教师在整个的过程中完全成了一名向导和顾问。当然,如何引导学生在项目实践中发现新问题和掌握新知识,这对老师提出了更高的要求。
第二,打破教师在台上泛泛的讲,学生在台下静静的听的局面。项目驱动教学法要求先将学生分组,每一组学生接到教师的项目后就开始自行分配任务,并且在指定的时间内将相关的问题解决,这期间可能会查资料、相互讨论、请教师长等,学生的教材理所当然的当成了查找知识的工具书,或者有些教材甚至可以不用给学生征订,节约了教育成本。这样,我们的教学才真正做到了注重过程、以学生为本。
2.3 项目驱动下的《数据结构》课程划分
以《数据结构》课程的教学为例,在采用了项目驱动教学法后,我们将课程的知识点划分成了10个项目:
表1 《数据结构》课程项目示例表
项目名称 相关知识点 参考课时
通讯录信息管理系统 线性表、查找、排序 6
某高校学生成绩管理系统 线性表、串、查找、排序 6
婚姻的稳定性情况调查 数组、栈 8
理发馆的经营状况分析 线性表、队列 6
十进制四则运算器设计 栈、树结构、浮点数运算 8
汽车零部件的库存模型设计 广义表、查找、排序 8
因特网域名查询系统 树结构、查找 6
小型汽车牌照的快速查找系统 线性表、查找、排序 10
管道铺设施工方案设计和选择 图结构 8
文章系统设计 文件、查找、排序 10
受现阶段高校授课时间的限制,针对不同的学生层次,这10个项目可能不能全部做完。根据学生的特点,教师可以有针对性的选作期中的5-8个,进而分配相关的课时。实践证明:在标准课时之内,只有30%的学生能够完成一个完整的项目,但是90%的学生能够利用课后的时间积极的查阅资料和咨询老师,这种授课方法对学生的主动学习起到了一个积极的推动作用,并且学生愿意牺牲课后休息的时间泡在图书馆。
3.具体项目实施过程
下面以“通讯录信息管理系统”为例,阐述在《数据结构》课程中实施项目驱动教学法的过程。
3.1 项目名称:通讯录管理系统。
3.2 培养目标:第一,使学生掌握线性结构的特点、线性结构的表现形式。第二,使学生领会数据在计算机中存储的概念,并掌握两种重要的存储形式。第三,掌(下转第179页)(上接第171页)握线性表和链表的区别,能够根据实际情况选择不同的存储结构。第四,能够对实施的算法进行性能评价。
3.3 项目预备知识:C语言编程基础、线性表的定义、线性表的存储结构、线性表的创建、线性表中元素的查找、插入、删除、修改等操作。
3.4 项目延伸知识:线性表中元素的排列(按照某种规则进行排序)。
3.5 项目的功能描述:该系统是普通的电话通讯录管理系统,要求实现能够根据姓名或者电话号码查询一个用户,能够实现对新用户的添加操作和删除一个用户,能够统计出该通讯录中的用户总数。比如:用户有一个电话号码,但不知道此电话号码是谁的,则需要输入号码来查询该号码是不是此通讯录中已记录的人的号码,若是可以输出该号码及姓名,若不是可以输出“无记录”。同学们在此基础上发挥想象力,结合实际可以扩展更多的功能。
3.6 项目实施步骤:
(1)根据学生的特长进行团队划分。按照一个班级35人的标准,我们将学生分成5-6个团队,每个团队在5-6人,然后推荐一名队长。
(2)教师开始下发项目书,要求每一个团队根据项目书撰写项目的可行性报告,每个团队以文字的形式上交一份报告,在此期间至少要保证每个团队的队长明白项目的完成目标,然后由队长写出项目过程的具体划分和阶段性成果。
(3)教师要不间断的引导,当完成项目的可行性报告之后,每个团队就开始查找资料和相互讨论,教师在旁边起到一个引导和监督的作用,对于学生普遍问及的问题可以进行统一解答。教师有目的的讲课,学生有目的的听课,所以实现了共赢的局面。
(4)教师总结阶段,每个项目完成之前,教师要对各个团队的成果进行演示和评价,指出每个团队的不足之处。
(5)学生整改阶段,学生根据教师的评价,完善自己的不足,然后形成阶段性课程设计报告。
4.《数据结构》课程的考核形式及评价
《数据结构》课程不同于其他的专业课,该课程中所设计到的算法和思想具有可收缩性,它应强调对于问题求解能力的培养,我们需要在学生的课程设计过程中,鼓励学生对其解决问题的方案进行理论分析和实验分析,鼓励学生积极主动的创新并大胆提出优化设计方案。对于该课程的考核形式是让学生根据自己平时的课程项目,将项目整理成课程设计报告,最终上交纸质的课程设计报告书,然后教师对报告进行评价。
考虑到《数据结构》这类课程一直以来是计算机相关专业学生学历层次提升考试的重要专业课,在进行课程考核的时候,有些学校除了让学生形成最终的课程设计报告书之外,还让学生参加一次笔试考试,以了解学生对于基础知识的掌握水平。
采用了项目驱动+课程设计的教学模式以后,学生普遍反映对数据结构的学习非常感兴趣,老师们则感觉采用这种方式以后,学生的学习积极性提高了,但是同时老师们的教学压力也变得大了,因为增加了老师准备课堂的负担,但是总体感觉是利大于弊的。
5.实施项目教学法的总结与展望
通过《数据结构》教学中实施项目驱动教学法,我体会到项目教学在专业基础课中实施的必要性,当然该教学方法也不是万能的,它不是适合于所有的课程,通常来讲:这种教学方法比较适合实践操作性强,学科比较综合的课程,同时,我有如下几点体会:
(1)项目教学法重要的是项目的设计,它可能直接影响教学的效果。在进行项目设计时,我们需要考虑学生对项目的理解、项目包括的知识点的范围、课程的前驱后继关系等,否则,我们设计的项目将是没有意义的。
(2)教师的有力引导是确保项目顺利完成的重要保障,学生在进行项目设计的过程中遇到棘手的问题需要老师第一时间进行指导。再者教师要事前全面掌握学生的学习层次,进行有目的性的指导,并能给学生留有思考的空间。
(3)做过的项目必须要有总结。作为教师除了开课前需要对所有的教学项目设计明白了之外,对于每一组学生做过的每一组项目必须都要有总结,这样一方面可以让学生觉得教师对他们的重视,另一方面是通过总结可以让学生之间取长补短、互相提高。
与传统的教学方法相比,项目教学法对教师和课堂提出了更高的要求,切实提高了学生对于知识的综合运用能力,切实提高了学生的实践操作能力,也切实增加了老师的教学工作量。但是,整个的教学过程中,教师发挥了主导作用,也体现了学生的主题地位,所以整个课堂的教学教师和学生的心态都是愉悦的,使课堂的教学效果有了很大的提高。
参考文献
[1]李萍.浅谈项目教学法[J].企业导报,2011(10):235.
[2]徐肇杰.任务驱动教学法与项目教学法之比较[J].教育与职业,2008(11):36.
[3]章亚钧.创新项目教学法在通信技术课中的应用探讨[J].中国教育技术装备,2011(11).
[4]郑丽娟,付宇明,宜亚丽,陈革新,曾达幸.项目教学法下对教师角色的思考[J].教育教学论坛,2010(24).
肖文杰(1985-),男,助教,主要从事计算机网络教学,研究方向为计算机网络,数据挖掘。
摘 要:《数据结构》在传统教学模式的教学过程中,存在诸多现实问题:学生与老师的互动性较差,学生自觉参与意识不强和学生实践动手能力差等。针对以上问题进行分析,结合《数据结构》课程特点,论文提出了“PBL与CBS相结合的教学模式”。从教学应用和实践效果看,采用这一教学模式后,学生不仅在笔试成绩上有大幅度提高,而且实践能力也得到大幅度提升,同时对提高学生的综合素质有很好的帮助。
关键词:数据结构;PBL教学法;CBS教学法;教学模式
《数据结构》课程,既是计算机专业核心的专业基础课,同时也是众多其它专业的重要的选修课程[1]。在采用传统教学模式进行教学时,笔者发现教学过程中,学生无论是在课堂还是课外,学习自觉性和主动性不是很高,教学间缺少有效的互动环节等。这种教学模式,学生很容易产生了消极态度,最终导致教学效果不是很理想。
为了解决这些问题,笔者结合自己多年教学经验,在借鉴前人研究成果基础上,利用基于问题学习法(Problem-based Learning,PBL)和基于案例学习法(Case-based Study,CBS)相结合的教学模式运用在《数据结构》课程教学中,希望通过此教学模式的运用,能改变这种现状。PBL和CBS两种教学模式,最初都是运用在医学教育中的教学方式。其中PBL是起源于20世纪50年代,是近年来比较流行的一种新型教学模式[2-3]。PBL强调以问题为学习主轴,以学生为主体,以教师为导向的启发式教育,以培养学生的能力为教学目标[4-5]。基于案例学习的教学法,强调以案例为教学核心,是一种对案例进行分析的教学模式[6]。
1.研究对象及实施过程
对于具体教学活动的实施,分别在南昌工学院和南昌师范学院(原江西教育学院)两个学校同时进行。
1.1研究对象
在南昌工学院选取2012级软件技术专业三年制专科学生,共106人和2012级网络工程专业四年制本科
学生,共84人。在南昌师范学院选取2012级软件技术专业三年制专科学生,共122人。具体实施教学过程中,将学生随机进行分组教学,即分成传统模式教学组和PBL与CBS相结合教学组。
1.2授课教材和教师
授课教材的选择:相同专业学生选用同种教材。而参考书学生根据需要自己选择。授课教师都为具有多年教学经验的双师型教师。另外,在进行PBL与CBS教学之前,首先对授课教师进行PBL和CBS教学模式的相关培训,对PBL和CBS教学理念和方法进行了系统学习。
1.3教学模式实施过程
1.3.1传统教学模式
《数据结构》的传统教学方法,主要采用“多媒体+黑板”方式进行课堂授课,在此教学模式中,整体采用“预习-课堂授课-课后复习-考试”的一个教学思路,即在实施过程中,要求学生对上课前对课本进行预习,正式上课过程中,主要以教师为主进行授课,授课过程中,适当安排提问和互动环节,在课后,也同样要求学生对课堂所学的进行复习,最后进行期末考试。
1.3.2PBL与CBS相结合的教学模式
PBL与CBS相结合的《数据结构》课程教学,是
指在《数据结构》教学过程中,授课教师采用PBL教学理念,同时结合CBS教学法,采用“设置问题―小组讨论―问题总结”三段式,展开教学活动。教学中,
以学生为主体、以问题为基础、以案例为载体,进行引导式的综合教学。教师具体实施教学过程中,将引导同学们按如下步骤学习:
(1)设置问题和资料准备阶段。在这个阶段,授课教师在授课前一段时间内,事先按照《数据结构》课程的教学大纲和授课计划要求,结合学生学习层次和现有的知识水平结构,对将要学习的知识点进行提炼,同时配合使用具体案例,设置好若干个问题点,并同时为学生提供必要的教学素材,以供学生学习使用。学生在收到这些问题后,对其进行分组参与学习。各小组之间,进行协调分工,根据设置的问题和教师提供的素材,进行预习,借助于网络资源、图书馆资源,查阅相关资料。
(2)小组讨论和交流阶段。在这一教学活动环节中,以学生为主体、教师辅助参与。授课教师首先利用简短时间对本堂课程知识进行简单介绍,对基本定义、算法和应用进行概括性的点拨。然后各小组进行交流和讨论。讨论中,通常会要求每组选出小组代表,进行小组发言,同时与教师和其它各小组进行交流。
(3)问题总结和教师评价阶段。在课堂规定的时间内,完成交流和讨论后,这时,再由授课教师对本次课堂学习进行总结和归纳。首先,授课教师对各小组对问题的讨论结果、解决问题的方法和存在分歧给出点评。其次,在实施PBL与CBS相结合的教学模式下,授课教师还应对各小组在解决问题过程中的方法和表现情况等进行总结和点评。
2.考核与评价
为了比较传统组和PBL与CBS相结合教改组在《数据结构》教学过程中的实施情况,采用笔试+实践、学生自我评价和教师评价三种考评方式。
2.1笔试、实践考核设计及效果
教学考核设计,建立由笔试和实践操作组成的考核办法。为了保证试题的公平性和客观性,笔试题均从学校试卷库中随机抽题组成试卷,题型包括:单选题、填空题、综合应用题和算法设计题等;而实践考试包括课程设计和小型项目实践操作等题。
通过笔试和实践操作考试,经统计和整理,得出传统组和PBL与CBS相结合教改组(简称教改组)的考核结果。笔试成绩情况如表1所示;实践操作考核情况如表2所示。(注:实验组和传统组,每组人数总数为30人)
从表1和表2中,我们可以发现,无论是笔试成绩还是实践操作成绩,教改组学生都明显高于传统组学生。
2.2学生自我评价与问卷调查分析
另外,在考核中我们增加了学生自评考核手段。为此,我们设计了614份调查问卷,实际发放了610份,最后收回有效的调查问卷为598份。经对调查问卷整理和统计,得出了教改组学生的一些自我评价结果。调查中发现,在运用PBL与CBS相结合教学模式下教学的学生(即教改组),对于学习积极性、学习兴趣和自学能力提高等方面都表示更多的赞同和支持。
2.3教师评价分析
本次调查中,也对参与教学实践的授课教师采取了座谈和调查。据授课教师的普遍反映,在《数据结构》课程教学中,运用PBL与CBS相结合的教学模式进行授课,学生们自觉参与教学过程的热情大幅度得到提高,学生与老师、学生与学生之间的交流和互动机会明显增多。同时,学生对于作业的完成情况也比原来有很好的改善和进步。
3.PBL与CBS相结合教学模式在《数据结构》教学中的理性总结
3.1有效的提高了学生的学习成绩
从考核的结果来看,在PBL与CBS相结合教学模式下授课的学生(教改组),对于《数据结构》这门课程的成绩,无论是笔试成绩,还是实践考试成绩都比传统模式下授课的学生有较大的提高。教改组学生在综合应用题和算法设计题得分率,明显高于传统教学模式下的学生。
3.2有利于促进学生学习动机的形成
《数据结构》是一门理论和实践结合比较紧密的课程。在传统教学模式下的“灌输式”授课,学生缺乏实践及亲身体验的过程,老师通常讲什么学生就去学什么,完全处于一种被动学习状态。学生主动学习意识和主观能动性无法得到很好的好培养和训练。PBL与CBS相结合教学模式通过“问题+案例”为核心,学生以问题为基础,学生带着问题去查询资料、学习、实践、最终去解决问题。这种模式,倡导以教师为主导、以学生为主体,能够充分调动学生主动能动性。
3.3促进批判性思维和质疑精神的培养
在《数据结构》课程中,批判性思维主要体现在对数据结构问题的确定、分析及问题的解决的能力。学生只有具备良好的批判性思维,才能对问题进行界定和分析,利用数据结构的知识解决实际问题。在以教师为主体的传统教学模式中,学生无法发挥主动探索性和对问题的质疑性。PBL与CBS教学模式,对于学生的批判性思维和质疑的培养具有明显优势。
3.4对学生综合能力的培养和训练有帮助
PBL与CBS相结合的《数据结构》教学实践中,采用小组的方式进行学习,无论对问题分析、问题讨论和问题的解决过程中,都需要小组成员的共同努力和协作去完成。在这种以团队形式教学实践中,学生要学会与人沟通、交流和和合作。在这种不断以小组形式的学习过程中,学生们的信息获取能力、与人交流能力和团体协作能力等都会得到较好培养和训练。
4.结束语
笔者将PBL与CBS相结合的教学模式运用于《数据结构》课程教学,将近有两年的时间。结合考核结果、学生自评和教师评价来看,该组合模式在《数据结构》课程教学中,取得了良好的效果,学生对于《数据结构》课程学习的兴趣有了很大提高,考试成绩也有比较好提高,另外,学生问题分析与解决能力、团体协作能力等综合素质都有不同程度提升。
另外,在运用PBL与CBS相结合进行《数据结构》课程教学中,我们也发现存在一些问题,有部分学生反应对该授课模式不太适应和缺乏系统性等。这对授课教师提出了更高的要求:
(1)授课教师在授课前应有充足的备课基础。不仅包括对课程的授课知识有充分熟悉,而且要求对授课中的问题设置、计划安排、节奏的控制等都要有很好的把握等。
(2)授课教师要有更强的自我学习能力。要能够主动地自我学习,不断地加强对新知识、新技术、新观念、和新方法等的学习,以提高自身的综合素质。(1.南昌工学院信息学院;2.浙江大学计算机系统工程研究所;3.吉首大学旅游与管理工程学院)
基金项目:2012年江西省教学教育改革研究课题(基金号:JXJG-12-24-2)。
基金项目:吉首大学2013年实验教学改革研究项目2013SYJG038资助
参考文献:
[1] 宁子岚.PBL教学法在《数据结构》课程中的应用[J].现代计算机(专业版),2011,9:30-31.
[2] 万里勇,徐新爱.基于PBL的《数据库原理及应用》教学实践研究[J].江西教学学院学报(综合版),2012,33(3):70-72.
[3] 李东,张英涛,宋颖慧.“基于问题的学习”及其在计算机组成技术教学中的应用[J].计算机教育,2011,22(11):43-46.
[4] 叶晓鸣,杨力.PBL与CBS相结合的软件测试课程教学模式研究[J].科教文汇(下旬刊),2011,02:44-45.
关键词:知识逻辑结构图;思维导图;KM教学法;C程序设计
教学方法是教员为完成教学任务所采用的手段,对教学目的的实现具有重要意义。在确定了教学目的,有了相应的教学内容之后,为了取得预期的教学效果,就必须采用适当的教学方法。教学方法要与学员的认识规律相适应,要与训练指导思想和教学原则相适应。因此,教育工作者在教学方法上作了大量的改革和创新,比如已有的问题教学法[1]、任务驱动法[2]、专题式教学、引导发现教学法以及KM教学法[3]等。其中,KM教学法符合教学方法赖以存在和发展的认知机理,能够系统而有重点地组织教学内容,符合学习思维的逻辑认知过程,它贯穿于教学的主要环节,具有实用性和通用性。
1KM教学法的思想
KM是指在“知识逻辑结构”(Knowledge Logic Structure)的总体架构下融入“思维导图”(Mind Mapping)进行微观演绎。知识逻辑结构(K)是通过知识逻辑结构图的形式给出所论知识系统的总体框架,表示了其中各知识子系统间的内在联系,是从宏观层面而论的,而思维导图(M)则是从微观层面揭示了知识子系统中思维过程的一种自然导向的表达。
在教学过程中,先讲框架或结构,把课本知识变“薄”,使得学生对所学知识全貌一目了然,有一个
宏观的认识,并且很容易理清知识总体条理;然后在框架中填充知识,也就是把课本知识变“厚”,而在介绍微观知识的过程中,借助思维导向启发学生对知识进行逐层深入的研究;最后再把填充知识概括起来,即把知识变“薄”回到主框架中,使得学生加深对知识的理解和掌握以便进入下一部分知识。从而形成以知识逻辑结构为主体贯穿、将思维导图融入进去的一种综合集成、多层次递阶的知识认知系统,完全符合学生学习和认知事物的科学规律。
2“C程序设计”课程的KM教学法
“C程序设计”课程是计算机专业及相关专业中重要的一门程序设计基础课程,在人才培养中占有战略性的地位和作用。学习C语言编程的一般方法和步骤,可以使学生掌握传统的结构化程序设计的一般方法,培养学生严谨的程序设计思想、灵活的思维方式及较强的动手能力,并以此为基础,让学生逐渐掌握复杂软件的设计和开发手段,为后续专业课程的学习打下扎实的理论和实践基础。因此,“C程序设计”还是一门逻辑性很强、思维很灵活的课程,适用于KM教学法。
2.1“C程序设计”课程的逻辑思维过程
“C程序设计”的关键是掌握结构化程序设计的
基金项目:中国高等教育学会“十一五”教育科学研究规划重点课题“研究生教育创新工程中KM教学方法论系统的研究”(2006[28]06AIJ0010007)。
作者简介:张桃红,女,江苏句容人,副教授,硕士生导师,博士,研究方向为计算机仿真与计算机集成。
思路。任何一个C语言程序都可以看作由4个步骤组成:定义数据、输入数据、计算数据、输出数据。
定义数据就是要定义数据存储的结构,在C语言中有最初的基本数据类型(int、float、double等);为了便于存储有序的数据集合,提出了数组的概念;更高层次数据结构还有指针、结构体和共用体。
有了数据的定义,才可以输入数据。从基本的直接赋值输入及调用基本输入函数scanf的格式化输入方法,到数组的输入方法特别是其中字符数组的输入,最后还有从文件中输入数据。
计算数据是关键、核心、难点。要实现合理的计算,必须采用恰当地结构控制(顺序、选择、循环)。具体语句的书写,最常用的是由运算符和表达式组成的表达式语句;还可以把处理数据的过程交给一个子程序(函数),通过函数调用的形式来完成;还有位运算方法。
输出数据方法与输入数据方法相对应,这里不再累述。
“C程序设计”的整个知识内容通过概括所有知识点而得。以谭浩强老师主编,清华大学出版社出版的《C程序设计(第三版)》[4]为例,书中第一、二章为概述;从第三章的数据类型、运算符和表达式到第四、五、六章的顺序、选择、循环控制结构,完成了第一层次初级程序设计;第七章的数组、第八章的函数、第九章的预处理命令为第二层次较高级的程序设计;高级程序设计涉及到了第十章的指针、第十一章的结构体和共用体、第十二章的位运算以及第十三章的文件操作。这样就把知识经纵向与横向的剖析,将知识要点按初学者到高级程序员分成3个阶层(见图1所示),学习者根据所处的阶层有目的、有针对地学习知识,避免贪多嚼不烂而导致的学习混乱。每个阶层的学习都以数据结构加算法为指导思想,从而将“C程序设计”课程从浅层次的语法学习上升到强实践性带有算法思想的程序设计。
从图1可以归纳出著名计算机科学家沃思提出的一个公式:程序=数据结构+算法。由此看见,KM教学指导下的C程序设计逻辑思维图符合计算机程序设计的认知规律,是一种科学的教学方法。
2.2“C程序设计”课程的KM教学方法
在教学方法上,采用“薄―厚―薄”的教学思路,逻辑衔接地、有侧重点地讲授知识。具体而言,首先给出知识的总体架构,然后按照思维导向实施启发式教学,逻辑衔接地把知识铺展开来,最后给出相应思考题目供学生练习并对知识进行总结。
就数组知识这部分,如图2所示,首先向学生讲明数组的学习就3点内容:数组定义、引用、输入和输出。数组分为一维数组、二维数组及字符数组3种,然后就每一部分数组的知识点进行详细讲解。以一维字符数组为例,因为字符数组中每个数组元素为字符型,由一维数组的定义可以联想到定义字符数组时只需要把数组类型改为char即可。
图1C程序设计课程知识的逻辑思维图
同样在引用字符数组元素时,数组下标是从0到数组长度减1。同理,采用数组最基本的输入方法用scanf语句,只是格式控制是%c;然而这种方法一次只能接受一个字符,而且需要循环控制输入;能否一次接受一串字符呢?由此引入了scanf的%s格式控制语句,但用%s输入中会存在遇空格结束的情况,gets(字符数组名)输入方法则可以一次接受一行包括空格在内的任意字符,强调后两种方法是应用重点并能够进行区别。教师可以采用这种提问、扩展、深入等思维诱导的方法很恰当地将知识内容融为一体,融入到整个逻辑结构中。最后再次概括总结,并给出一个例题让学生独立完成字符串的3种不同方式的输入和输出。
同理,可以把“C程序设计”课程的逻辑思维图中各个知识环节按照数组逻辑思维图的过程进行知识的组织、牵连和铺展,由此形成了树型结构。它包括一个根节点(课程逻辑思维图)、多个子结点(各知识结点的逻辑思维图),子结点下还可以生成子结点(知识子结点的逻辑思维图)。
当然,KM教学法不是独立的,它要配合其他教学手段、练习题目、作业及设计性题目等,通过多方面的支持让学生积极参与以达到事半功倍的效果。
图2C程序设计中数组知识的逻辑思维图
3结语
教学的关键就是教授学生学习知识的思路及学习课程的方法。KM教学法就是一种便于抓住事物本质、高效掌握知识的符合认知规律的科学方法。本文
针对逻辑性较强的“C程序设计”课程,提出了“C程序设计”课程的KM教学法的具体思路,在知识逻辑结构的宏观架构下融入思维导图进行微观演绎,将所有知识融为一体。教学实践证明,这种方法对教学及学生学习都是非常有效的。
参考文献:
[1] 吕伟. 应用问题教学法改革材料力学的课堂教学模式[J]. 力学与实践,2001(2):64-65.
[2] 胡宁. 计算机教学中的任务驱动法[J]. 辽宁师专学报:自然科学版,2005(02):18-19.
[3] 杨炳儒,张桃红. 理工科课堂KM教学法研究[J]. 现代大学教育,2006(4):83-85.
[4] 谭浩强. C程序设计[M]. 3版. 北京:清华大学出版社,2006.
The Research of KM Pedagogics in the Course “C Programming Design”
ZHANG Tao-hong1, PENG Zhen1,2, YANG Bing-ru1, XIE Yong-hong1
(1. Information Engineering School, University of Science and Technology, Beijing100083, China;
2. Computer Department, Northchina Institute of Science and Technology, Beijing101601, China)
关键词:数据结构;实验教学方案;栈;队列
中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2016)24-0274-03
一、引言
实验教学是学生从学习理论知识到走向社会的桥梁,对提高学生综合素质、培养学生创新精神和实践能力有着理论教学不可替代的特殊作用[1]。特别是主干课程的实践教学,它是应用型人才培养中的关键环节[2]。课内实验是指与理论课相捆绑的实践教学,即嵌入到专业基础课或专业课内的实验实践教学[3]。它是与理论教学并行实施的实践教学环节,能够帮助学生深入理解和掌握所学的专业知识。
数据结构是随着处理对象的复杂性不断增加而发展起来的一门课程,作为计算机专业的核心课程,在专业人才培养链条中占有举足轻重的地位[4-7]。数据结构主要研究数据在抽象视图和实现视图中的表示和处理方法[8,9]。抽象视图涉及的是数据结构的理论性部分,实现视图主要体现的是数据结构的实践性,理论指导实践,实践支撑理论,因此设计有助于课堂理论教学的实验教学方案是非常有必要的[10]。它可以解决学生对所学知识缺乏必要感性认识的问题,将知识传授、技能训练、能力培养融于一体,使所学理论知识在实验中得到验证和应用[11]。
栈和队列是两种非常重要的数据结构,它们有非常多的实际应用并且是实现其他复杂结构的基础,因此为了帮助学生掌握并灵活运用这两种结构,本文给出一种栈和队列的实验教学方案。该方案的设计思路也可以应用于其他数据结构或课程的实验教学方案的设计。
二、认识两种重要的数据结构――栈和队列
栈和队列是两种运算受限的线性表,它们的插入和删除运算都被限制在表的端点处进行,只是具体的受限规则不一样[12,13]。
(一)学习对象
栈(stack)是运算受限的线性表,它被限制在表的一端进行插入和删除操作。能进行插入和删除的一端称为栈顶,另一端称为栈底。正是由于它插入和删除操作上的限制使得它具有了一种独特的“后进先出”(LIFO)的特性。栈的LIFO特性使得它具有非常多的应用,如:符号平衡问题、中缀表达式转换为后缀表达式问题、后缀表达式的计算问题、函数调用的实现(包括递归函数的实现)、在股票市场中查找划分、Web浏览器中的网页访问历史、文本编辑器中的撤销序列等。此外,栈还是其他很多算法的辅助数据结构和其他数据结构的组成部分。
队列(queue)也是一种运算受限的线性表,它被限制在表的一端进行插入操作,在表的另一端进行删除操作。进行插入操作的一端称为队尾,进行删除操作的一端称为队首。正是由于它插入和删除操作上的限制使得它具有了一种独特的“先进先出”(FIFO)的特性。队列的FIFO特性使得它具有非常多的应用,如:操作系统中的作业调度、异步数据转换、多道程序设计等。此外,队列还是其他很多算法的辅助数据结构和其他数据结构的组成部分。
(二)学习目标
学习这两种重要的线性结构需要学生重点消化的知识点有:(1)栈/队列的概念、类型定义及基本操作的定义和实现;(2)栈/队列的结构特性;(3)栈/队列的灵活应用。
为了配合栈和队列的理论教学,帮助学生理解和掌握上述知识点,我们需要精心设计栈和队列的实验教学方案。
三、栈和队列的实验教学方案设计
(一)实验题目设计
根据栈和队列的学习目标和遵循循序渐进的学习和教学原则,实验题目被分为以下三个层次:基础型实验题目、设计型实验题目和加强理解型实验题目。
所谓基础型实验是指围绕课程讲授的栈/队列的物理实现和其基本运算的实现来设置的实验题目。设计基础型实验的目的是,通过实践的方式验证课堂上讲授的重要知识点,给学生切身的感受,摆脱“纸上谈兵”的感觉,这种立体的感受有助于学生深入理解和掌握这些知识点。设计型实验要求学生能分别运用栈/队列解决简单应用问题。这类实验题目主要是用来引导和加强学生对栈/队列的灵活运用。设计加强理解型实验的目的是强化学生对栈和队列的结构特性的理解和体会。为了达到这个目的,加强理解型实验题目的设计思路有两个方面:(1)引导学生去思考并解决这样两个问题:能否利用栈的LIFO特性来实现队列的FIFO特性?能否利用队列的FIFO特性来实现栈的LIFO特性?(2)让学生实现其他更为复杂的栈和队列。
在栈的理论教学过程中可以开设栈的基础型实验,在栈的理论教学结束后可以开设栈的设计型实验,在队列的理论教学过程中可以开设队列的基础型实验,在队列的理论教学结束后可以开设队列的设计型实验和加强理解型实验题目。表1给出了具体的实验安排。
学生必须在相关内容的理论教学过程中利用自己的课外时间完成全部基础型实验题目,教师根据学时安排选择1~2道设计型实验题目让学生在上机课上完成,未选择的题目应向学生提供完整的源代码和设计说明。相关内容的理论教学结束后,学生必须利用自己的课外时间完成加强理解型实验题目中的第1题和第2题,剩下两题可以选做。
(二)教学方法
因为三种类型实验的要求、难易程度不同,因此在学生参与形式、教师参与程度、教师参与方式等方面需要区别对待。表2给出了对三种类型实验在上述这几个方面的设计。
基础型实验要求每位学生利用课外时间独立完成,教师全程参与指导。所谓全程参与指导是指从算法基本思想到算法实现的各个环节(包括编程技巧、程序调试与测试等)都要参与指导。参与方式多种多样,例如利用QQ等即时通讯工具进行指导,约定时间和地点进行答疑,等等。
设计型实验要求每位学生在上机课上独立完成,教师前期参与指导。所谓前期参与指导是指教师参与学生在算法设计环节的讨论,教师可以给出提示,同时鼓励学生设计不同的算法。参与方式是面对面的交流。
加强理解型实验要求每位学生利用课外时间独立完成,教师后期参与指导。所谓后期参与指导是指教师在收齐学生提交的源码和设计报告后,对其进行分析总结,并将总结结果以班级为单位采用面对面的方式反馈给学生。
(三)考核方法
对三种类型的实验采用不同的考核办法。表3给出了这方面的设计。
对基础型实验不做专门考核的原因是学生基础型实验完成的好坏会直接影响设计型实验和加强理解型实验的完成,因此对其他两种类型实验的考核间接考核了基础型实验。
对设计型实验的考核分两个部分:一是本次上机课上实验的完成情况,包括程序是否调试成功、程序的运行结果是否正确,代码编写的质量等;二是本次上机课结束后提交的实验报告的完成情况,包括内容是否完成、书写是否规范等。
对加强理解型实验的考核主要是考核学生提交的源代码和设计报告的完成质量。
设计型实验的成绩占总实验成绩的70%,加强理解型实验的成绩占总实验成绩的30%。
四、结语
数据结构是一门理论性和实践性很强的课程,其理论教学环节与实验教学环节相辅相成。栈和队列是两种重要的线性结构,为了提高它们的教学效果,增强实验教学对其理论教学的促进作用,本文提出了一种栈和队列的实验教学方案。该方案的设计思路同样适用于其他数据结构或课程的实验教学方案设计。
参考文献:
[1]朱金秀,金纪东,周妍,等.实践教学与就业能力培养相融合的研究与探索[J].实验室研究与探索,2011,30(4):105-107.
[2]荣瑞芬,闫文杰,李京霞,等.实践教学课程考核评价模式探索[J].实验技术与管理,2011,28(3):232-234.
[3]张纯容,施晓秋.问题与案例驱动的课内实践教学分级模式探索[J].实验室研究与探索,2012,31(1):145-148.
[4]教育部高等学校计算机科学与技术教学指导委员会.高等学校计算机科学与技术专业人才专业能力构成与培养[M].北京:机械工业出版社,2010:143-147.
[5]董丽薇.数据结构课程教学方法的改进[J].沈阳师范大学学报(自然科学版),2012,30(2):307-309.
[6]刘城霞,董宛,蔡英.数据结构中基本教学案例的研究[J].计算机教育,2010,(03):144-146.
[7]韩建民,钟发荣,赵相福,等.基于ACM-ICPC训练模式的数据结构实践教学探讨[J].计算机教育,2013,(10):103-107.
[8]沈华.数据结构、算法和程序之间关系的探讨[J].计算机教育,2013,(04):58-61.
[9]沈华.数据结构入门教学中的实例法[J].计算机教育,2013,(24):64-66.
[10]沈华.数据结构课内实践教学方案[J].实验室研究与探索,2013,32(10):396-400.
[11]刘光蓉.以计算思维能力培养为导向的C程序设计实验教学[J].实验技术与管理,2013,30(1):154-156,191.