时间:2022-07-11 18:55:59
开篇:写作不仅是一种记录,更是一种创造,它让我们能够捕捉那些稍纵即逝的灵感,将它们永久地定格在纸上。下面是小编精心整理的12篇数据结构课程设计总结,希望这些内容能成为您创作过程中的良师益友,陪伴您不断探索和进步。
数据结构是计算机专业的核心课程之一,是计算机软件技术的基础,以数据为中心讲述问题如何在计算机程序中得以实现。该课程的教学不仅要注重学生对理论知识的理解,更要培养学生能针对具体问题,设计合理的数据结构,对数据进行有效的存储、操作,并能完成相应的高效算法。课程设计的教学是整个教学环节中非常重要的一环,它弥补了课堂教学中实践少的缺陷,其教学目标不仅要培养学生缜密的逻辑思维和数据抽象能力,更要培养学生在软件设计领域科学的思维方式,将算法理论和编程实践完美结合,能够在工程实际中灵活应用。因此不断改进课程设计的教学方法,提高教学质量是培养高素质软件人才的迫切要求。
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.
Data Structures Practice Teaching Exploration
MU Cui-xia
(China Women’s University, Beijing 100101, China)
Abstract:On the basis of analyzing the present status of the practice teaching of data structures in China Women’s University, the teaching reform and adjustment measures for the practical teaching in recent years are introduced. And the key points of future reform are pointed out..
Key words:Data Structures; practice teaching; hierarchical teaching; Micro-Course Video
1 引言
数据结构课程是计算机科学与技术专业的专业基础课和核心课,也是计算机程序设计的重要理论和实践基础,其学习效果直接影响到学生的数据抽象能力和程序设计能力[1]。数据结构实践课与理论课相辅相成,是学生验证、掌握和应用数据结构理论的重要途径[2]。,但是课程特点、学生的整体素质水平和基本程序设计能力等多因素影响了实践教学进度和效果,进而影响了整个课程的教学效果。
2 数据结构实践教学现状
1)首先,要客观地认识到,不同层次高校的学生整体素质,尤其是学习能力确实存在一定差距。只有坦然地承认差距,才能认真、耐心地了解学生学习过程中的困难和需求,才能坦然地采取一些虽不够“高大上”,却符合教学对象实际情况的教学措施,从而实实在在地提高教学质量。
2)数据结构教学是在第3学期,学生在第2学期刚学完C程序设计基础。但学生在C程序设计基础课程中主要学习和接触的是简单数据类型和单个函数程序,侧重于基本语法学习,而对数据结构实践中大量用到的头文件、结构体、指针、递归、多个函数的定义调用及在主函数里测试等实践得相对少,理解较浅。因而对于数据结构课程,不少学生觉得上课能听懂,上机时无从下手或者程序错误很多。
3)传统的数据结构实践教学形式,教师布置实验任务,适当指导,学生独立完成,然后由教师验收。这种方法的优点是能够充分发挥学生在算法设计方面的主观能动性,不足是数据结构设计和程序设计的难度较大,学生可能会感到无从下手,教师进行指导难度较大,实践进度和效果不好控制[2-3]。
4)教材的选择上,最初选择了大部分高校采用的经典教材严蔚敏C语言版,也是考虑到考研参考书目需求。在教学过程中,也发现教材不适合我们学生的实际情况,比如类C的算法描述,使得程序设计思想和实践能力还不太成熟的学生在理解上有困难,在实践时觉得难以开始[4]。
5)另外,新实施的教学计划中课时减少也是一大挑战,需要对理论教学内容和实践内容进行调整,首先抓好数据结构的基本和重点内容,而不能面面俱到。
3 数据结构实践教学改革和调整措施
在具体分析数据结构实践教学现状的基础上,可增设C程序课程设计,加强基础知识实践要求,调整课程大作业安排,发掘贴近实际案例和知识背后的故事,灵活运用微课等措施,进一步增强学生实践积极性,提高实践教学质量。
3.1增设C程序课程设计环节,弥补课程衔接问题
为了进一步提高学生动手编程实践能力,一定程度上解决因学生基础薄弱导致的课程衔接问题,可增设两周共16学时的C程序课程设计。
在数据结构学习中,学生觉得在理论课上算法思想能听明白,一到上机就感觉无从下手;觉得代码出错误时,调试修改难。这说明三方面有待加强:一是从分析问题到给出解决问题算法步骤的能力,二是从理清算法步骤对应到编写源代码的能力,三是程序调试实践能力。因此,在此课程设计环节中要加强问题分析训练,根据给出的问题,分析出解决的主要思路,进而给出细化的伪代码或者流程图。要加强编码和调试训练,学生根据细化流程图编写出源代码,调试测试程序。因此,教学中采取具体改革措施如下:
1)时间和内容安排:在第3学期的前两周,开展C程序课程设计,数据结构从第3周开始。结合多年来的教学经验,针对学生上学期C程序设计实践的薄弱点和数据结构实践的具体需要,专门编写了课程设计指导书。为了进一步强化学生编码规范,指导书中给出了明确的代码书写要求和编码原则,在实践过程中进行督促并纳入考核点。为了让学生复习和掌握基础的知识要点,并能灵活运用在实践案例中,设计了基础和提高层次的例题和实训题目。在例题中强调算法分析,采用伪代码或者流程图进行算法分析训练,并给出参考源码。在掌握例题的基础上,要求学生独立完成实训题目。涉及的知识要点包括输入输出、常用数据类型和函数、分支结构和循环结构、数组、函数、结构体、指针以及文件等。然后进行分组合作完成一个综合课程设计,让学生从软件开发的角度开始分析问题、解决问题,教师对开发过程进行适当指导。另外,指导书中给出了两个完整案例给学生参考,拓展案例由小到大、由?\入深,使设计的功能越来越完善。指导书努力做到帮助学生从低到高的逐步提高编程和动手能力。
2)实践考核方式:以考核方式引导整个实践过程。考核总成绩由基础练习(例题和实训题)和综合课程设计两部分组成。根据衔接数据结构课程教学需要以及学生的具体学习基础情况,为了最大程度调动学生实践积极性和能动性,基础练习比例从40%逐步调整到70%,课程设计比例从60%调整到30%;从只有综合课程设计答辩,调整为当前的基础练习也进行抽查答辩,答辩内容包括设计思想、代码分析、结果分析、经验体会等,进一步突出基础的重要性。四次共16节课中都明确给出任务清单,并及时了解每次课的任务完成情况,针对具体问题及时集中或者个别指导。考虑到实践内容较多,基础练习答辩一般安排在第2和3周,另外由于跟数据结构内容的连贯性,答辩可适当占用前2周数据结构上机时间和课外时间。但是,综合课程设计的答辩会适当延长到第5周,为了促进分组合作的有效性,每个人对合作都要负责任,采取当天随机抽取一人负责答辩的方式。另外,下一步计划尝试基础练习采取2人一组,共同讨论分析完成,以应对任务多时间短、基础薄弱学生压力大等问题。还将设计细化的课程教学效果调查问卷,深入了解学生需求,调整教学内容和方式等。
3.2在数据结构教学中不断加强基础知识的上机实践要求
考虑到学生的实际情况,在课堂教学中主要采取源码形式来讲解各种结构和算法(线性表、栈、队列、二叉树、查找、排序等)的实现,基础实践就是要求编写函数代码实现并在主函数中测试各种数据结构的基本算法,完成后提交源码即可。为了夯实基础知识,提高基础编程能力,不断调整对基础知识实践的要求,加强对基础知识进行复习的书面作业要求,重要基础知识点都留书面作业,将书面作业成绩计入平时成绩,并提高分值比例,这样可以引导学生重视并加强。然后,将基础知识的实践作业提交情况和抽查答辩情况都计入平时成绩,并调整分值比例。通过期末考试试卷平均成绩能较明显看到重视基础的效果。另外,学生学习基础和能力确实存在差异,明确分层要求哪些是必须掌握的基础,哪些是可以扩展选做的,也是很有必要的[3-4]。
3.3调整课程大作业的安排和要求,让不同基础和能力的同学都能有所收获[3]
在数据结构教学过程中,会有同学疑问,学了数据结构到底有什么用。虽然概论一章曾经讲授过一些实例,但终究不如自己实践体验来得深刻。通过课程大作业,利用掌握的基础知识,实现一个贴近生活的实例,是加深理解和提高能力的有效途径。利用堆栈实现迷宫游戏,很多同学答辩完后表示很有成就感,但也确实经历了克服困难的过程,而这一克服困难逐步解决问题的过程,也正是学生能力提高最快的阶段。但也不可避免地出现了问题,比如基础比较弱的同学,完成基础练习都很吃力,大作业就会觉得太难,最后效果也就不理想。因此,在大作业的难度设置上,首先要考虑大部分同学的能力情况,还可以考虑有适当难度差异的题目供学生选择。同时,如何避免学生趋向选择小难度以及考核公平性,这是需要继续探讨的问题[5]。
这几年教学中,有个思路调整,就是首先夯实基础、抓好主线,在此基础上进行拓展。比如,有学生在大作业答辩过程中,能很清晰表达算法思想、分析代码等,但平时基础练习却做得不好,期末考试成绩也不理想。因此,课程大作业在总成绩中占分比例调整降低。另外,为了满足基础好的同学的学习需求,可以适当提供完整的有趣或者贴近生活的扩展案例代码,进行读代码这种形式的学习,也可提供同学间分享交流机会。
3.4小举措增强学生自信心,提高学习积极性
1)在教学中多从正面引导和肯定,增强学生自信心。如果学生有抵触或者畏难情绪,肯定会影响学生的学习效果。教师在教学中确实需要正视学生的学习基础和能力的现实情况,必须承认不同层次学校的学生之间学习基础和能力差距的存在,才能理直气壮地安排合适的教学内容和方式方法。作为中华女子学院唯一的工科系,较大比例学生不是第一志愿入学计算机专业。经过一年的学习时间,每位学生对计算机专业了解和接受程度不同,大学二年级更是关键的一年。因此,老师在实践教学过程中更需要细致的情绪关怀,及时了解学生在实践过程中碰到问题,给予积极回应或帮助。尤其在学生学习困难或者压力大时,更要理解和尊重,耐心疏解,正面引导,具体指导,多正面肯定每次哪怕小小进步。同时,在教学进度安排上要考虑整体学生情况,抓牢主线夯实基础为先,并注意教学内容的螺旋式进展,这样可以一定程度上减小学生心理压力,进而增强自信心[4]。
2)联系实际应用,,关注技术背后的故事,激发学生学习兴趣。比如,实现了队列的基本操作之后,带着学生一起分析和实现医院就诊排队应用,加深对队列逻辑结构特点的理解以及数据结构在解决较复杂问题中的应用。实现堆栈的基本操作之后,带着学生先玩迷宫游戏,再一起分析利用堆栈如何实现走迷宫。在讲赫夫曼编码前,先引入赫夫曼当初发明赫夫曼编码的背景故事,引起学生的好奇心和求知欲。类似这些小举措却可以激发学生的学习兴趣。
3)一起?I造分享、合作、互助和积极的学习氛围。鼓励学生在实践过程中多讨论,大作业合作完成,遇到困难互相帮助。发现有优化算法的例子,老师及时表扬并让学生跟大家一起分享讨论,从而营造积极的集体学习氛围。
3.5发挥微课在数据结构实践教学中作用
互联网+时代的教育改革,将以学生和学习为中心,创造性地利用信息技术,提高教与学的效率,改善教与学的体验,更好地满足个性化的学习需求。“翻转课堂”模式中,学生在课外通过看视频讲座、阅读功能增强的电子书等形式,自主规划学习内容、学习节奏、风格和呈现知识的方式来完成知识的学习。而在课堂上教师答疑解惑,有更多的时间与每个人交流,学生之间也可以讨论,可以开展知识运用的实验实践等,最大程度地满足学生的个性化学习需要。微课是实现“翻转课堂”教学组织形式的一种常用的课件设计方案,它基于学科的核心知识点设计而成,以短小教学视频为核心的、具有明确教学环节的结构化和微型化在线教学课件。基于微课的翻转课堂教学模式能更好地做到分层教学、因材施教,而且更有利于学生的个性发展。
分析女院计算机专业学生的具体情况,结合数据结构课程本身的特点,完全实现翻转课堂难度极大,但是将微课作为传统课堂的一种延伸和补充,将会更好地满足学生的学习需求,改善教学效果。在算法设计实践过程中,最容易发现学生的不同学习能力和需求,也更适宜开展微课应用,也利于教师不断总结和完善重点和难点的教学方法方式[6-7]。比如稍慢于实践进度的,有疑问可通过微?n进行回顾,自行安排学习和实践进度。快于实践进度的,可通过补充视频自学来加大实践力度,拓展学习和实践内容。
另外,本学期选择了李春葆版的数据结构教程,属于升级微课版,书中附带了一些微课,直接扫描二维码即可看视频,方便了学生预习和复习。另外总结学生实践过程的常见问题等需求,自行制作相应微课资源,比如vs2010使用指南微课,常见错误调试方法,赫夫曼编码预习微课等。这样可以更好地补充和辅助学生的课堂内外的学习与实践,满足学生个性化需求。
关键词:数据结构;教学方法;实践
中图分类号:G642 文献标识码:A文章编号:1007-9599 (2011) 19-0000-01
"Data Structure" Teaching Reform and Research
Zhang Mingwei
(School of Computer Science&Engineering,Anhui University of Science&Technology,Huainan232001,China)
Abstract:For the course characteristic of"data structure",and combining the prombles which exists in learning this course,the auther introduced the teaching methods and experimental procedure of this course.
Keywords:Data structure;Teaching methods;Practice
一、前言
《数据结构》是计算机专业及相关专业中一门重要的专业基础课程,它涉及的内容和方法在计算机科学中有许多广泛的应用,学好这门课为学生今后从事理论研究、应用开发、技术管理工作提供了坚实的理论基础。数据结构这门课主要研究非数值型数据三方面的问题,一是数据内在逻辑关系,二是数据在计算机内的存储,三是对数据的运算(操作)以及对运算的分析。这三方面问题是紧密联系的,对每一种数据结构都从这三方面来进行梳理,这是数据结构教与学的主线,所以说数据结构是形散而神不散。但该课程具有相当的抽象性,对计算机编程的能力要求也较高。笔者通过长期教学实践不断总结经验,为了解决学生学习中现存问题,从教学方法、教学手段上进行改革,从而提高了教学质量。
二、数据结构学习困难分析
首先是这门课较抽象,内容丰富,学习量大。怎样从现实问题中抽象出三种数据结构即线性结构、树型结构和图型结构,怎样理解非数值型数据的这三种逻辑结构,怎样使抽象的数据逻辑模型转化为物理存储,对应于各种存储上操作怎样实现,这些问题对于初学者来说较抽象,涉及的知识点较多,一时之间难于把握这门课的重点,学生学起来感觉晦涩难懂,久而久之就会丧失学习的信心。
其次是这门课程所用的教材大多是基于C的,那么数据结构的前置课C语言的学习就至关重要,C语言是学生开的第一门程序设计课,由于课时的局限和考虑到学生的接受能力,教师在讲解指针的时候没有深入地讲解,线性链表多局限于简单介绍或者不讲,这就增加了数据结构的教学难度,有的同学理解了某种数据的逻辑结构,也能把逻辑结构映射于物理存储,但是在讲解算法的时候就不明白了,特别是涉及二级指针和结构体的时候。
最后就是教学方法不得当,在教学的过程中以教师为中心,没有很好的与学生互动,有些老师对“数据结构”知识掌握、理解的好,教授也到位,但在教学的过程中没有照顾到学生的具体水平和接受能力,只是按教学内容把知识点灌输给学生,学生的接收效果并不尽如人意,这种教与学分离,学生学习的兴趣也不高,感觉越学越难,陷入教与学的恶性循环。
三、教学改革的措施与方案
针对《数据结构》课程的自身特点和以上在教学中存在问题,从教学改革、学生学习和教学实践方面展开探讨。
对于数据结构抽象性强,难于理解的特点,教师可以在讲解的时候多注重于每一种数据结构的应用,以实例引出每一种数据结构,这样不但使同学对这种数据结构的认识形象化,而且提高同学的学习兴趣,另外还要与学生互动,及时掌握同学们的接受情况,在讲解每一种数据结构时,可以本着提出问题、分析问题、解决问题的思路,例如在讲解图这种数据结构时,以著名的七桥问题引入图的概念,然后提出怎样对图进行存储,结合前面所学二叉树的可让同学回答问题,然后分析由图的特性,得出图的两种存储结构,问题得以解决。另外由于课时的局限性,也为了提高同学的自学能力,在每次课最后总结完本次课学习内容后,留几道下一堂课主要解决的问题,供同学们课下预习的时候思考,下一次上课的时候可以直接让同学回答他对这些问题的理解,老师可以纠正理解不到位或错误的地方。这样对同学们对学过的知识点印象会更深刻一些。
数据结构教程中大多是基于C的,这样C语言的学习就至关重要,可以适当的加大C语言的授课学时,另外就是尽量提高同学学习的主观能动性,教师可以把在数据结构中用的较多指针、结构体等的知识点的讲解和相关程序放到教师主页上供同学参考学习,学生有什么问题可以在网上留言,教师在网上及时解答问题,当然这里还是要强调学生学习的兴趣,教师要调动学生的非智力因素,教师要多介绍这门课程的作用和学习目标,培养学生的自信心,从就业和未来发展的角度帮学生分析利害关系,督促同学尽最大努力来学习。
数据结构的实践课是非常重要的,是课堂教学的必要延伸,是理论学习的战场,实践课如果上的好,能起到深化理解理论和灵活解决实际问题目的。在数据结构的实践课中一般分为实验部分和课程设计部分。对于实验部分,特别是开始上实验的时候,首先要使同学们消除恐惧心理,多给同学们信心和鼓励,不要觉得课堂教学难,实践课就更难,另外要多加引导,在实验课前把用到的知识简略的串一下,刚开始给同学出的实验题目要相对简单些,例如线性表的操作,可以给出程序框架,让同学把某些算法如求线性表的长度、插入元素等补齐,以后再逐渐加大题目的难度,对于学生参差不齐的状况,实验中可以加几道选做题,以满足做得快的同学,结合多年教学经验,如果同学把线性表、栈、队列部分实验做的好,二叉树和图部分也能做的好,可见好的开始是很重要的。对于课程设计课,由于是综合练习题目,包括问题分析、总体结构设计、用户界面设计、程序设计等,可以分组进行,多人合作,这样同学即可以互相学习,又培养了同学互相协作的能力。总之实践课是提高学生的实际动手能力、对数据结构的学习兴趣的培养和对这门课的扎实掌握是很重要的环节。
关键词:CDIO教学模式;数据结构;项目
中图分类号:G642 文献标识码:B
CDIO原本是工程教育领域内的一个概念,它是构思(Conceive)、设计(Design)、实现(Implement)、运作(Operate)的集合体,是2001年由瑞典查尔姆斯技术学院、瑞典林克平大学、美国麻省理工学院、瑞典皇家技术学院合作开发的一个新型工程教育平台。它以工程项目(包括产品、生产流程和系统)从研发到运行的生命周期为整体,让学生主动地参与到理论到实践的转化过程中来,是一种倡导“做中学”和“基于项目的教育和学习”的新型教学模式。CDIO既注重抽象理论知识的“教”和“学”,又强调了教学过程中“做”的重要意义;既增强了学生的动手能力,又培养了学生的创新意识、项目设计的能力和团队协作的精神。CDIO教学模式应用于我国的一些高校,已经取得了初步成果。比如清华大学工业工程系的顾学雍教授就曾创造性地将CDIO方法运用于“数据结构”和“数据库原理”两门课中,取得了突出的成效。笔者也在本院计算机专业“数据结构”课程的建设过程中遵循CDIO原则,进行了一系列教学实践与探索。
1CDIO能力培养大纲
CDIO模式以构思、设计、实现、运作为主线,将基础知识、个人能力、团队协作与社会环境融合在一起,注重理论与实践的结合。图1为CDIO大纲的主要内容。
大学计算机专业也是实践性很强的学科专业,借鉴CDIO大纲对工程师的培养目标,我们对于专业性人才的培养也应该首先立足于加强学生对专业基础性知识的学习和基本技能的掌握,倡导产学研相结合,在实践中培养学生的专业技能与合作沟通的能力,最终让毕业生满足企业对人才的需求并服务于社会。
2“数据结构”课程的重要性
“数据结构”是整个计算机学科体系的一门核心课程,也是计算机相关专业的专业必修课。学好这门课程,不仅可以为软件开发奠定良好的编程基础,也可以培养学
生良好的编程思想和编程风格。这门课程主要介绍各种离散结构,如表、树、图、集合等在计算机内的存储和处理,以及各种常用算法及其应用。课程除了要求学生有较好的离散数学基础外,还应至少掌握一门程序设计语言(Pascal、C、C++、Java等)。因为课程既包含抽象的理论,又强调算法的实践,所以一直以来都被学生认为是最难学的课程之一。
3基于项目的学习
CDIO教育模式要求学生基于工程项目的全生命周期进行学习与实践,项目最好来源于企业的真实题目或结合教师的科研课题组织和设计,以项目作为基础知识传授与基本技能掌握的载体。考虑到“数据结构”课程一般开设在计算机专业大学本科二年级,此时学生刚刚学习了一至两门程序设计语言,对编程语言的运用还处在初级阶段,还没有经过软件工程的系统培训,所以教师在设计项目时,还必须讲究方式方法,结合学生的实际情况来组织教学。
3.1课堂讲授
课堂讲授是贯彻CDIO教学大纲,学习基础知识的主要方法,要求教师对“数据结构”课程中所有的知识点、重点及难点有很好的设计。在讲授教学内容时,教师可以适当地引用实际项目,引导学生体会产品从构思、设计、实施到运作的完整过程。
比如在讲解树结构时,引入ERP企业资源计划系统中的BOM(Bill of Material)物料清单的实例。BOM是一种描述配套件结构的零件表,包括所有子件、零件、原材料的清单以及制造一个配件需要的所有物料数量。BOM是制造业信息系统的一个核心部分,在ERP系统的MRP分析、制定生产计划、采购及销售控制及生产过程控制等环节都具有重要的作用,设计合理的BOM结构可以取得事半功倍的效果。针对对BOM特点和作用的简单讲授和对树型结构的分析,教师可以引导学生从实例入手,锻炼学生从分析实例产品的构成和用户的实际需求出发,构思并设计合理的数据结构,促进学生对树型结构的掌握。
3.2课堂讨论
课堂讨论是课堂讲授教学内容的有效补充形式。现代教学理念主张启发式教学,在适当的时候抛出一个问题,给学生5~10分钟的自由发言或分组讨论时间,效果会更好。比如上一个问题,教师可以在讲解BOM的时候直接给出树型结构的解决方案,但是如果教师在讲授了基础知识和问题背景后,让学生自行讨论设计方案,自由发言或由小组代表提出设想,再由全班讨论,经教师总结后给出结论,则可以充分地激发学生的积极性,也让学生体会了“提出问题―分析问题―解决问题”的过程。在这个过程中,教师要注意对学生的思路加以引导,对学生所提的方案加以鼓励,帮助学生树立创新意识,让他们不墨守成规,学会从多角度思考问题。
3.3课后作业
课后作业是对课堂教学内容的延伸和对课堂教学效果的验证。在教学时间紧任务重的前提下,科学地设计课后作业可以弥补缺憾,也可以促进学生主动学习。比如可以针对具体项目,让学生通过上网查阅资料补充项目背景知识,也可以让学生查找相关问题的其他解决方案,或对课堂提出的算法进行代码实现。教师可以从这些内容中挑选出精彩的部分,安排合适的时间,在课堂上由学生进行汇报讲演,交流心得。这种形式既对课堂教授有很好的补充,又有效杜绝了学生的作业抄袭现象。
4通过课程实践体会“做中学”
CDIO理念是总结了欧美20多年来工程教育改革的产物,目的是能够培养出全面发展的工程师,他们不仅要具有扎实的专业知识和熟练的专业技能,理解构思―设计―实施―运行一个完整系统的复杂性,还要能够在一个现代的、合作的环境中让这个产品升值。CDIO强调学生的工程能力不是单纯的理论知识或直观技能,而是两者的综合运用,也就是所谓的“做中学”。
“数据结构”课程的实践环节由两部分组成:课内上机和课程设计。课内上机一般有2~4个学时,以验证性实验为主,侧重学生对每章知识点的上机验证和内容的延伸;课程设计时间相对较长,一般有20~40个学时不等,学生可以在这个过程中完整地体验一个项目的设计和实施。
4.1项目的选择
课程实践的项目最好来自企业一线,或者是一些具有实际意义的题目,考虑到学生知识的局限性,教师可以对这些题目稍作改动。比如“北京市城市轨道交通咨询模拟系统”要求参考北京地铁运营线路图,见图2,以无向图的形式描述城市轨道交通状况,给出从甲地到乙地的最优换乘方案。此项目来源于实际问题,学生很容易理解题目的要求和最终的结果。由于实际地铁运行线路中站点比较多,所以布置题目时可以适当简化,比如减少站点数目(但要保留换乘站),忽略两站之间的运行时间和每站的停靠时间,以途经的站数来作为最优路径的计算依据等。
在课程设计阶段,学生首先选择自己感兴趣的项目,然后从问题需求入手,设计合理的数据结构,明确输入和输出信息,进行模块设计,最后进行详细代码的编写和模块测试。整个过程始终遵循CDIO“做中学”的原则,让学生在实际动手的过程中不断增强解决实际问题的能力。部分能力较强的同学还在原题的基础上进行功能扩展,形成了一个带有友好人机界面的可视化软件,既提高了学生的学习兴趣,又激发了学生的创造力。
4.2分工与合作
《礼记•学记》上讲:“独学而无友,则孤陋而寡闻”。由于CDIO强调的项目具有完整性和综合性,一个学生很难在短时间内完成,因此可以考虑采用分组的形式,由多名学生组成小组,由组长负责安排整个项目的进度。这种团队的形式最能锻炼学生的协作精神、沟通能力和领导能力。李开复教授在给中国学生的信中这样写道:“像Windows 2000这样的产品研发,有超过3000名开发工程
师和测试人员参与,写出了5000万行代码。没有高度统一的团队精神,没有全部参与者的默契与分工合作,这项工程是根本不可能完成的。”CDIO模式就是要让学生在不断的碰撞和沟通中学会相互支持,共同讨论,共同进步。
4.3项目考核
课程设计结束时,教师要对项目的完成情况进行考核,CDIO教学模式的标准之一就是要对学生个体进行评估验收。考核的形式可以是多样的,比如采用“答辩”的方式,由学生演示程序的运行结果,然后针对自己在小组
中的分工情况,详细介绍具体算法和遇到的问题,最后提交项目总结报告。较之传统的考试,这种考核方式更加强调学生的表达能力和科技文章的撰写能力,既分享了学习经验,又拓宽了知识面。教师在考核过程中要起到主导作用,要站在企业、用户或用人单位的角度来设立问题,将学生置于一个大的环境中,使学生具备业界所需要的素质和能力。
总之,通过将CDIO教学模式运用于“数据结构”课程,倡导“做中学”和“基于项目的教育和学习”,使学生在掌握基本专业知识和技能的同时,既提高了学习兴趣,又增强了从业所要求的各项素质,对学生毕业走上社会的可持续发展起到积极的作用。
参考文献:
[1] 陶勇芳,商存慧.CDIO大纲对高等工科教育创新的启示[J].中国高教研究,2006(11):81-83.
论文摘要:在建构式教育理论的指导下,以就业需求为目标,针对数据结构教学中教与学目标不明、学习信心和动力不足、编程基础薄弱等问题,提出建构式的数据结构教学方法,在实际教学中取得较好的教学效果,这些措施也可作为其他计算机专业课程教学的参考。
近年来,在产业界急需大量软件开发人员的情况下,普通本科院校计算机专业学生的就业率持续走低。网络、报纸等媒体对计算机本科教育现状多有批评,甚至出现了大学不如培训公司的极端观点,严重影响了学生对专业课程的学习兴趣、动力和信心。数据结构是计算机专业的核心基础课程,上承程序设计语言、离散数学,下启操作系统、编译原理等课程,其重要性不言而喻。一方面,数据结构学科具有难度大、抽象层次高、概念繁杂等特点,学生很难掌握,更不要说将抽象理论与就业实践需求相结合。另一方面,国内主流数据结构教材和相应的传统教学模式侧重于培养学生的计算机学科基础理论素养,而将如何通过组织数据结构教学活动积极推动就业的问题留给了任课教师[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.
关键词:数据结构;微课;思维导图
一、背景
数据结构课程作为计算机专业的核心基础课程,学好数据结构才能为许多后续课程的学习打下良好的基础。课程要求学生通过理论与实践学习之后,能掌握各种数据结构以及与之相关的算法的知识,并将这些知识应用到对具体实际问题的分析中。参照ACM/IEEE-CS的《ComputeCurricula2001》报告中提出的数据结构课程内容主题[1]有几十个,即课程的教学内容多,覆盖面广,而且由于很多重要知识的理论性较强,特别是一些难点知识比较抽象而难以理解,所以数据结构是被学生广泛认为难学、难懂、难实践的课程。学习的过程通常由“信息传递”和“吸收内化”两个阶段构成,采用信息化技术手段开展以微课、慕课、云课程、翻转课堂为代表的数字化教学是实现知识信息传递的有效手段[2]。微课一般是在课堂教学之外,由学生主动参与的轻量化、碎片化、结构化的学习方式,通过良好的课程结构设计,结合短视频、动画、语音等手段,能有效地将抽象的知识转为形象化的内容,从而高效促进学生“吸收内化”的进程。
二、微课及设计方法
微课(Microlecture),是指运用信息技术按照认知规律,呈现碎片化学习内容、过程及扩展素材的结构化数字资源[3]。微课课程平台是学生在课堂教学外的细化教学知识,实现“自主学习”和“个性化学习”的环境,在微课平台上,学生可按需选择学习,既可查漏补缺,又能强化巩固知识,是课堂学习的一种重要补充和拓展。从逻辑结构角度看,一个完整微课课程通常由一系列微课单元构成,一个微课单元除了用来讲述该教学主题知识点的课堂教学短视频及与短视频配套的描述或解释的短文这一最重要的核心部分之外,通常还包含与该教学主题相关的练习测试及师生交流等辅教学资源,这些资源共同组成了一个主题式、半结构化的微课教学单元。一个设计良好的微课单元通常具备主题选题精准和内容组织合理的特点。选题精准就是一个微课单元是一个教学主题,在设计这个主题时,要注意这个选题所覆盖的知识或原理应较为简单[4],其涵盖知识点可选2—3个;内容组织合理就是知识内容的组织和分解简明,将一个教学主题核心知识点和目标分解为若干个子知识点或步骤,这个核心知识点的分解最好只要一层逻辑,尽量不要在子知识点下再分解。
三、数据结构微课设计过程
数据结构课程要求学生能合理选择数据结构,并把与问题相关的数据组织起来实现准确和高效计算处理,所以数据结构的核心概念由数据的逻辑结构及其定义在逻辑结构上的运算、数据的存储结构以及运算的实现、运算算法的复杂度分析三个方面构成,而且在课程中数据的结构又与其相关的算法缠绕在一起[5],使得在微课设计时所做的知识点分析必须循序渐进地展开,采用由浅到深、由易到难的步骤,再从这个课程的知识体系出发,选取其中的重点、难点、疑点、考点、易错点、热点和扩展点,设计和制作一系列既相对独立,又环环相扣的微课主题单元[6]。
(一)知识点分析与微课主题单元划分
设计数据结构课程的微课时,首先按照课程内容的知识结构来完成各个主题单元的设计和划分。我国的大部分数据结构与算法的教材[7-8]把课程的知识体系对应到教学内容之后,分成了基本概念和基础知识、线性数据结构及相关算法、树形结构及相关算法、图结构及相关算法四个教学组成部分,这四个组成部分又可分别分成若干子模块,每个子模块又可再分成若干主题单元;划分方法可以使用表格或思维导图来协助完成。思维导图是表达发散性思维的有效图形思维工具,能直观地把各级主题的关系用相互隶属与相关的层级图表现出来[9]。借助思维导图,我们能有效完成微课课程知识结构的设计工作,图1是我们设计线性数据结构及相关算法部分的微课主题单元思维导图。
(二)微课主题单元设计
在完成对课程的教学内容主题划分之后,开始对每个教学主题单元做设计。设计主题单元时要以学生为中心,其内容选择先考虑突出主题单元中的重点知识点,同时需要保证学生能看懂、能听懂,就是尽量以生动形象的语言和动画表达知识点,特别是难点和常见疑点必须演示或解释得详细清楚。这里以单链表主题单元为例。单链表是最简单的链式存储结构,是深入学习树与图(非线性结构)的基础,其概念及其实现是本节教学的重点和难点内容,我们按照内容介绍的次序来绘制思维导图,图中带星号的是重点知识点。在制作微课资源时,可以针对不同特点的知识点采用不同的讲解形式。对于概念性的内容,只需用语言或文字以学生容易理解的方式讲述清楚概念,而对一些抽象的内容,可采用图形、对比表格、动画等方法来讲解。如单链表结点与单链表结构的知识点,我们采用的是图形动画演示配合语音讲解方法;在讲解单链表的实现时,我们采用了代码单步执行分析与图形动画演示相结合的方法来讲述,取得了较好的教学效果。
Xue Chunyan
Xiamen University, Zhangzhou, 363105, China
Abstract: In the course of data structure, there is a phenomenon that theory and practice are separated from each other, so that students can not apply that knowledge of data structure into practice. For these cases, according to the characteristics of the students in the independent institute, the writer discusses the practice of teaching from three aspects: organize teaching content, experiment content settings, laboratory assessment and other aspects of the course.
Key words: independent institute; data structure; practice teaching
数据结构是计算机专业的一门基础课程,也是课程体系中的核心课程之一,在计算机学科的主干课程中起到承上启下的作用。数据结构课程对基本数据的逻辑结构和存储结构进行分析和阐述,并介绍其具体实现的算法和实际应用。数据结构课程教学的目的是使学生学习、分析、研究计算机加工的数据对象的特性,学会数据的组织方法,以便选择合适的数据逻辑结构和存储结构以及相应的操作,将现实中的问题转换为可以在计算机中表示和处理的问题。
实践教学作为数据结构教学中的一个重要环节,是对数据结构课程理论教学的延伸,也是对数据结构理论知识的综合应用。
作为独立学院,我校践行技术应用型本科的教育理念,树立面向市场的办学宗旨,着力于加强学生基本技能和实践能力的培养,构建“以实践教学见长”为特色的课程体系,培养适应市场需要的应用型人才。教师在教学过程中将学生实践能力的培养放在首要的位置上,对实践教学的设计、实施等各个环节不断进行探索,并总结经验教训,逐步改进,取得了较好的教学效果。
1 数据结构课程教学过程中存在的问题
数据结构是研究程序设计过程中如何设计和使用合理数据结构来解决具体的问题的课程,是一门实用性很强的课程。但是在教与学的过程中,往往出现教学与实践脱节的问题,不能把教学和实践很好地联系起来,影响了教学效果。同时,独立学院生源的特殊性也给授课带来一定的困难。
笔者在教学过程中发现了如下问题:
1.1 内容抽象,逻辑性强,不易理解
数据结构课程的特点是概念多、内容抽象、逻辑性强。学生在学习的过程中不知道数据结构讲什么,可以用在哪里。造成只注重理论学习应付考试,而不考虑在具体程序设计中利用数据结构设计和解决具体问题的应用实践。
1.2 教学脱离实践,实践课效果不理想
1.2.1 验证性实验达不到实践教学目的
数据结构的实验大部分是验证性实验。验证性实验仅仅要求学生对教师课堂讲述的内容用C语言进行翻译,只需调试通过即可,对掌握利用数据结构的知识解决具体问题的思路和方法不做要求。因此,学生在解决实际问题时,不能将所学数据结构应用到实际中。学生做课程设计时无从下手、思路混乱,不知道如何选择数据结构。
1.2.2 实验题目结构单一,不能满足不同层次学生的需要
数据结构实验题目内容差别小,缺乏应用性和实效性,很难调动学生的学习兴趣。另外,基础较差的学生在完成难度较大的题目时存在一些困难,而学习较好的学生感觉题目太简单,没有挑战性。
1.3 学生基础较差,相关课程之间衔接不好
从生源质量看,独立院校的学生由于入学分数低,学生整体水平不高,基础不好,对所学知识的理解和掌握不到位,学习主动性不强,特别是对数据结构这类理论比较抽象,不好理解的学科学习兴趣不高。学生动手能力和编程能力普遍不强。
从课程衔接来看,数据结构与C语言程序设计两门课程联系密切。C语言程序设计的学习一般安排在数据结构课程的上一个学期,而且在后者学习过程中要用到前者的函数、指针和结构体部分,但是这些内容往往是学生掌握得最薄弱的部分。很多学生对熟练使用指针和结构体等内容的数据结构的实验有畏难情绪,直接影响了数据结构实践教学的效果。
2 数据结构实践教学探讨
2.1 案例讨论教学将理论教学与实践教学相互结合
为了提高数据结构的实践教学效果,笔者改变原有的教学方式,采用案例讨论的方式授课。在案例讨论教学法中,笔者将学生分成若干个小组,以小组为单位进行讨论,学生在讨论过程中提出问题,笔者针对提出的问题讲解相关知识,引导学生利用所学知识提出解决方案,并最终编程实现。在实现的过程中,还可以进一步深化数据结构算法的讲解,鼓励学生不断地改进和完善程序,提高程序的性能和效率。
例如:针对线性表结构的讲解,以学生最为熟悉的宿舍管理系统为例进行研究讨论。
首先,引导学生分析基本的数据信息和功能需求。基本信息包括学生信息和宿舍信息。基本功能包括增加、修改、删除、读写、排序和查找。进一步讨论数据的特点,操作对数据的结构需求,从而引入线性表结构的知识,帮助学生建立学生信息和宿舍信息的数据结构。
其次,分析各个功能的实现方法,从而引入线性表基本操作的具体实现。
最后,通过分析各个操作的优缺点总结线性表的特点,引导学生通过顺序表和单链表两种方式实现,经过比较和分析,最终掌握线性表的结构特点、表示方法、各种操作的实现以及不同实现方法的比较分析。
通过学习案例,学生深切地体会到了线性表的特点以及具体应用的过程。理论教学与实践教学相融合,达到了很好的教学效果。
我们为每种数据结构都设置了一个案例,具体情况见表1。
表1 数据结构案例情况表
这种案例讨论的教学方式改变了传统的教师为主的教学模式,学生由被动学习变成了主动学习,调动了学生学习的主观能动性,增加了师生之间的交流和互动,活跃了课堂气氛,提高了学生分析和解决问题的能力。
2.2 打好语言基础,扫清障碍
针对独立学院学生基础较差的客观情况,教师在授课初期实验开始之前,应先为学生扫清编程语言的障碍。笔者针对学生C语言学习中存在的问题,结合数据结构课程中涉及的C语言的知识点有针对性地进行讲解和练习。对C语言中函数、指针、结构体部分的知识进行系统回顾,并安排学生做一些和数据结构相关的C语言练习题,帮助学生扫清数据结构学习中的障碍,减轻学生对编程的畏难情绪,轻装上阵,更好地学习数据结构课程的内容。
2.3 实验题目设置多层次、多种类
2.3.1 多层次
我校学生的水平参差不齐,我们针对不同水平的学生提供不同难度的实验题目。实验题目类型分为:基础题、进阶题、提高题、综合项目题。
例如:针对二叉树实验,笔者设置了三类题目。
基础题:二叉树的顺序实现和链式实现。
进阶题:一个单位有10个部门,每个部门有一部电话,但是整个单位只有一根外线,当有电话打进来时,由转接员转到内线电话。已知各部门使用外线电话的频率(次/天)为5,20,10,12,8,4,3,5,6,9,如何设计内线电话号码,才能使接线员拨号次数最少?(哈夫曼树的应用)
提高题:编写程序判断一棵二叉树是完全二叉树、满二叉树还是普通的二叉树。
综合项目题:身份证信息管理系统。
要求:(1)能够进行身份证信息的录入,包括身份证号、姓名、地址和手机号。(2)能够快速根据身份证号进行信息的查询,并输出相关信息(地址、生日、性别)。(3)可以修改身份证号码对应的其他信息,如姓名、地址。(4)可以完成身份证信息的删除。(5)可以根据姓名查询身份证信息。对于重名的人,能够给出所有重名的人的身份证号和其他信息。
多层次的题目可以让学生从易到难、循序渐进、逐步提高编程水平。基础较差的学生,可以从最简单的题目进行基础训练,一点一点提高难度,这样可以帮助学生建立信心,提高学习的积极性。学习能力较强的学生,可以直接做比较难的题目来检验自己的学习效果,这样也可以激发学生的学习兴趣,提高学习效率,其学习能力也能获得更大的提高。
2.3.2 多种类
题目的种类应是多样性的。多种类的题目可以通过不同方式、不同角度考查学生知识掌握的情况。
基础题中包括一些选择题、填空题、写程序结果、程序改错以及基础编程题;进阶题和提高题主要以编程题为主;综合项目题一般采取小组合作的方式,不仅可以锻炼学生的实践能力,还能够培养学生的团队合作精神。多种类的题目有利于调动学生的学习兴趣。学生可根据个人情况选择自己喜欢的题目类型进行训练,提高了学习主动性和积极性。
2.4 完善实验考核制度
我校设有数据结构实验课程,该课程实践教学大部分在实验课中完成。我们对实验课的考核方法也进行了改进和完善,具体成绩构成见表2。
表2 数据结构实验成绩构成情况
通过对数据结构课程实践环节的严格考核,学生养成了认真做好实验记录的习惯,培养了严谨的学习态度,形成了踏实的学习风气,减少了上机过程中出错的次数。
2.5 增加设备投入,完善现代化教学手段
增加设备投入,完善现代化教学手段,对提高教学质量尤为重要。我校充分考虑数据结构课程的实践性特点,尽最大可能补充和更新计算机设备,并建立了专门的数据结构实验室,配备了品牌电脑和所需的软件,确保软、硬件设施设备满足教学需要。同时,还建设了数据结构教学辅导网站,用于课程资料下载、在线测试、在线答疑等,为学生学习数据结构课程提供了很好的平台。
数据结构主要研究数据的各种逻辑结构,存储和组织方式,以及相应算法的性能分析等。本课程在计算机相关专业课程教学体系中,具有举足轻重的地位。这门课程的学习不仅能提高学生的程序设计能力,培养学生的编程技巧,而且为后续课程(如:算法设计与分析、数据库和操作系统等)打下良好的理论和实践基础。数据结构实践作为安徽师范大学数学计算机学院软件工程专业的一门独立的专业实践课程,一方面使学生加深对《数据结构》理论的理解,另一方面培养学生利用理论知识进行实践设计的能力,从而提高学生的学习能力。
1 数据结构实践教学中存在的问题
由于数据结构本身概念较为抽象,算法也较难以理解和掌握。因此,在长期的教学过程实践中,通过课题组连续2年对我校209名软件工程专业同学进行跟踪调查问卷发现,数据结构实践课程存在这样一些问题和困难。总结如下:
1.1 基础编程语言较为薄弱
我校主要选择C语言作为数据结构实验和实践的工作平台。但课题组调查发现,仅有近30%的学生能够掌握和较为熟练运用C语言进行程序设计。进一步的跟踪调查发现,大部分学生对C语言的困惑主要体现在:1)对一些抽象概念的理解。例如,对指针相关的概念的理解,特别是当指针与数组、函数关联在一起时,学生犹如雾里看花,很难把握。2)动手编程能力。课题组调查发现有近47%的学生编写代码的总量少于1000行;有近41%的学生能够理解理论知识,但编程遇到困难,只有不到20%的学生能够理解理论知识,并能够熟练编程实现。
1.2 实践内容繁多, 学生灵活运用知识能力不足
数据结构课程知识点繁多,而且理论概念较为抽象。教师在教学过程中基本采用每个知识点进行独立的讲解和分析的教学方式,这种方式最大的优势是能够重点强调和解析所要讲解的知识点,但带来的弊端是学生很难从整体上把各个分散的知识点进行融会贯通,灵活运用于对具体问题的解决。调查发现有近60%的学生认为教师讲解过程过分强调理论的讲解,而缺乏对具体的例子进行特定问题特定分析。同样,调查也发现近60%的学生更期望采用自顶向下的教学方法,即针对特定的问题,对问题进行相应的分解,分析和讲解其中利用到的知识点,从而最终解决特定的问题。也有88%的学生期望能够定期讲解经典算法设计的案例。
1.3 缺乏对学生兴趣的培养
心理学研究表明,兴趣既能够改善学习的过程,也能改进学习的效果,导致质与量更优越的学习。Schiefele等人(1992)的研究结果也表明,兴趣和成就之间有接近30%的相关性。数据结构是一门非常抽象的课程,而实践过程又是枯燥、费时费神的工作,没有浓厚的学习兴趣是很难坚持和深入学习的,也很难体会到学习过程带来的乐趣和成功带来的愉悦。课题组跟踪调查发现,在学习该课程的前后,对该课程很感兴趣或感兴趣的学生的比例下降了近27%。
1.4 缺乏必要的师生互动
教学不仅是一个教与学的过程,更是一个教学互动的过程。即是师生之间进行交流,探讨和不同思想碰撞的过程。因此,教学,一方面包含着教师的教和学生的学,同时也包含着学生的反馈和教师的学习的过程,更重要的是也包含着学生的质疑,教师的理性的说服甚至争辩。师生之间的互动是教学中重要的环节,也是必要的过程。然而,在实际的教学中,教师依然采用填鸭式教学,只管知识的传授,而忽略了与学生的互动。而学生也不愿或者不会主动与教师进行交流、讨论甚至争辩。调查发现,绝大部分学生由于各种原因很少或者不愿参与各种讨论和互动,即使学生当遇到问题时,也只有不到10%的学生会向老师请教讨论,仅有20%学生和同学进行讨论,有近60%的学生会通过其它方式(如互联网)来解决问题。这一方面反映学生会利用先进的信息技术来解决自己的问题,同时也反映出师生间互动的缺乏。
2 数据结构实践教学的探讨
针对实践教学过程出现的问题和困难,课题组对数据结构实践的教学内容和教学方法进行了深入的探索和不断的改进,从而形成了一套较为完整的教学体系。
2.1 强化实践教学,明确教学目标和内容
为强化实践教学,数据结构实践已经被作为安徽师范大学软件工程专业的一门独立课程开设。该课程具有统一的教学大纲,教学计划和课程设计大纲,每周安排4个学时,共计68个总学时实践教学。对该课程也设定了固定的课题组,其核心人员由2位具有副教授以上职称人员构成,并配备一定数量的助教人员。这些为实现课程的教学目标和任务提供了必要的保证。
数据结构课程包含的内容众多,教学任务繁重,但各个教学内容和任务间并非孤立。因此,课题组的首要任务是教师自己要精通并让学生能从整体上把握整个课程的体系,明确课程研究的目的和内容。具体而言就是:数据结构课程主要研究内容是各种数据的逻辑结构、存储结构,以及建立在这些结构的算法及其性能分析,其主要学习目标对这些内容的掌握和理解。因此,在教学实践过程中,一方面要把握“一条主干,四种逻辑结构,两种存储表示”这样一条主线。即一条主干就是数据及其结构表示和存储,四种结构就是集合、线性结构、树形结构和图结构,两种存储就是顺序存储和链式存储。另一方面,要理解四种逻辑结构的区别和联系,以及两种存储结构的各自优势及不足。
2.2 加强教学环节设计,注重运用知识能力的培养
数据结构实践课程,既要稳固和加强对理论知识的理解,又要培养学生的实践设计能力,从而培养学生灵活运用知识的能力。因此,在实践过程中,课题组采用层次设计的思想进行教学实践。具体而言就是:对每个知识点,课题组要求学生进行验证性的设计练习,从而达到加深对理论知识理解的目的;对每种逻辑结构,课题组都构造出一套设计性的试题,让学生自己动手进行实践设计,培养学生灵活运用多种知识进行实践设计的能力;最后,课题组设计出一套综合的设计试题,让学生利用学到的理论知识,进行综合性的设计和实践,从而培养了学生综合利用各种知识解决具体问题的能力。
2.3 加强对学生学习兴趣的培养,培育良好的师生关系
心理学研究表明,良好的评价和反馈能够激发学生学习的兴趣。为了激发和培养学生的学习兴趣,课题组一方面对每个实践到的知识点进行总结概括,让学生能够知其然并知其所以然。另一方面,对每个学生的实践设计的内容,进行认真的评阅,给出相应的反馈和评价,并对实践的内容给出具体的讨论和分析,激发学生学习的潜在动力和兴趣。另外,在实践过程中,课题组会有意识鼓励学生自己动手设计和实践一些课题,而不仅仅实现和模仿书本的内容。这一方面可以培养学生的自主学习和设计能力,同时也可以让学生感受到学习的乐趣和成功的喜悦。
良好的师生互动,能够培育出良好的师生关系,也有助于学习兴趣的培养。课题组跟调查发现仅有不到20%学生是因为基础不好无法交流而不愿参与教学互动,有超过80%的学生是由于信心不足或者没有参与讨论的习惯而不愿参与教学互动。因此,在教学设计过程中,课题组采用引导和鼓励的方式,让学生积极参与各种讨论和互动中。具体而言就是:对与设计类和综合类试题,课题组首先采用小组的方式(学生自由组合,每小组原则上不超过3人)进行实践活动,鼓励小组成员间进行交流互动。进一步,定期选择优秀的实践设计进行公开讨论,让其小组成员汇报自己工作,课题组和其它小组进行相应的评价和反馈,从而鼓励小组间进行交流互动。这种教学方式既增加了师生间,学生间的互动,同时也培养了学生团队合作精神,更激发了学生主动学习的积极性。.
2.4 加强基础语言的学习,培养程序编写能力
C作为数据结构课程的工作语言,对数据结构的实践教学具有非常重要的作用。为了使学生能够掌握和熟练的运用该编程语言,课题组首先要求C语言课程的授课教师要加强对C语言的内容讲解和训练,特别是与数据结构课程联系比较紧密的知识点(如指针及相关的概念)要进行精讲精练。同时,课题组对数据结构中相应的知识点涉及到的C语言知识,会进一步进行讲解和分析,确保相应的实践能够顺利进行。
【关键词】C语言 教学目标 程序设计思想 软件工程
目前,有相当多的高等学校不但将C语言列为计算机专业学生的必修课,而且是理工科非计算机专业的必修课。对于计算机专业学生来说,C语言程序设计是一门专业基础课,对后续专业课程至关重要;对于非计算机专业的理工科学生来说,这是一门公共基础课,是各专业学生的计算工具。专业不同,教学目标就应该有所差别。但是,现在很多高校并没有一定的区分,而是统一的教学目标,统一的教学模式,过于注重语句、语法和一些细节,基本上是以高级语言自身的体系为脉络展开的。这样,就给计算机专业学生学习后续课程及研究生阶段的课题研究留下了隐患。在这里,笔者对计算机专业C语言的教学目标做一个简单的探讨。
一、程序设计思想的培养
对于计算机专业学生而言。程序设计以及后来的软件设计是整个计算机专业发展的一个重要方向,因此,程序设计思想的培养对于学生来说至关重要。思想的培养不能单单通过做大量的题目,而是要有一定的方法,循序渐进才能做到事半功倍的效果。
计算机编程思维的形成并不是一蹴而就的,对于从未受过算法设计训练的学生来说,刚开始编程时,可能会感到无从下手。对此,我们可以从整体到具体细节,一步步引领学生来进行编程。
1.把程序设计简单归纳为数据输入、加工处理与结果输出三个部分。学生遇到问题时,首先,分析已知的数据是什么,需要求解的数据是什么。然后,就是由已知求未知的过程,把这一过程用C语言描述出来就可以了。对于讲解的每一道题目,我们都让学生这样来分析,慢慢地,学生就会有一个整体的认识了。
2.针对“由已知求未知的过程”,就是我们所说的算法了,它是程序的灵魂。算法就是我们的思考过程。但要把思考过程一步步描述出来还是不简单的。首先,我们可以通过放慢我们的思考过程或加长我们的思考过程来实现。例如,5个整数求最大值。有的同学说,我一眼就看出来了,根本不需要思考。那我们如果来求50个数或者100个数的最大值,这次我们就不会一眼看出答案了,这时候,我们的思考过程就清晰了,先求出前两个数的最大值放到变量max中,在拿max和第三个数比较,最大值仍放到max中,max再和第四个数比较……以此类推,最后max里放的就是所有数据的最大值。这就是一种算法。把它用C语言描述出来就可以了。其次,我们需要通过做大量的题目或阅读大量好的程序,来积累一些好的算法。
3.把算法描述为C程序。这一步,需要学生们认真掌握C语言的语法规则。学生需要做大量的针对性的单项练习,一个一个规则来掌握。还要在具体的程序编写中进行综合练习。有具体的使用环境中,这些语法的掌握应该是不难的。
二、与后继课程密切联系
过去的C语言教学多注意基本概念的掌握,对于算法与程序设计的风格未能系统的训练,与后继课程《数据结构》的教学严重脱节。C语言的教学重点固然是C语言的各种数据类型及应用,但是《数据结构》中的许多基本概念与思想也应渗透到C语言的教学中去。
1.C语言的发明就是为了方便操作系统的开发,因此具有丰富的指针结构与位操作功能,这在unix操作系统中已经得到了很鲜明的体现。操作系统的设计涉及许多复杂的数据结构。为了实现这些结构,C语言构造了许多复杂的数据类型,如函数指针,结构指针函数,不一而足。这些模式很简洁地描述了数据的关联模式。显然。C语言许多数据类型本身就是复杂的数据结构的抽象,这一抽象过程就构成了这种结合的基础,这种交叉、渗透还是学生高涨学习情绪的最好切入点。
2.通过C语言中的数据排序,数据查找这些题目的实现,对于数据排序和查找算法的分析比较,我们就可以和数据结构课程中的查找、排序章节结合起来,对查找排序的各种方法作进一步的了解。
3.学习指针这一章时,通过链表的建立、插入、删除等的学习,可以和《数据结构》课程的线性表中的单链表建立联系,再通过与数组知识的结合,又可以和线性表的顺序存储结构,静态链表产生联系。这样不仅使学生们对后继课程有个较详细的了解,加强了课程之间的联系。还进一步提高了大家的学习热情。
三、把软件工程的思想融入教学
随着学生对程序设计语言的学习进步,自然地产生了软件设计的渴望,老师要适时引入一些软件的基本设计方法,对启迪学生悟性很有好处,也使学生找到学习的门路。主要可以从两个方面加以引入。
1.在教学中加入面向数据流的设计方法,这是一种传统的结构化软件设计方法(简称SD),对于初学者易于理解,尤其是在C语言程序设计的课程设计中有很好的效果。让学生了解软件设计的一般方法,程序的模块化结构和数据的输入/输出结构,明确模块间的控制关系,从总体上把握软件的结构,在课程后期的综合练习中有特别的意义。
2.在编程过程中加入程序健壮性、安全性的问题
在程序设计中,适时提醒点拨学生注意编程安全很有必要。例如,在设计“学生成绩管理系统”时,键盘录入的某课程成绩或者在数据文件中提供的成绩数据的范围、属性是否正确的检查,就是编程的安全问题中的被动式保护性编程。在整个程序设计课程中,到处都是编程安全例子。例如・数组界限是否正确?表达式中是否有0分母情况?使用链表结构时,须要检查其连接情况,等等。
再者,对于程序的健壮性,使学生们认识到,一个程序。不仅仅输入一个合法数据能得到一个正确的输出。这个程序就是正确的。而输入一个非法的数据,他也能给出一个合理的输出,这才是一个正确的、健壮的程序。例如,输入三角形的三边,求面积。如果我们输入三个数据。就出一个面积数据,那这就不是一个健壮的程序,必须是输入的三个数据能构成三角形,才输出面积;如果构不成三角形,就应该输出一行提示:输入非法。这样的程序才是个正确的程序。
,
关键词: 数据结构;教学方法;实践
中图分类号:G642文献标识码:A文章编号:1009-3044(2009)32-9017-02
A Exploration for Teaching Reform of Data Structure Course in the Application-oriented Undergraduate Colleges and Universities
WANG Jun, ZHOU Ming-zheng
(Dept. of Comp. Sci. & Engn, Anhui University of Technology and Science, Wuhu 241000, China)
Abstract: Under the background of popular education, it is important to improve teaching effectiveness for computer major courses "data structure" in the application-oriented undergraduate colleges and universities. In this paper, for the purpose of cultivating application-oriented undergraduate, analyzing the problems in the current teaching data structure, a preliminary exploration of the reform is put forward for data structure course materials and teaching methods with some thoughts, which is expected to enable students to have a better knowledge of the course.
Key words: data structure; teaching method; practices
在当今的大众化教育大背景下,对于应用型本科高等院校,计算机科学与技术专业的培养目标已经发生了改变,其主要培养的不再是理论性的研究型人才,而是培养掌握计算机硬件、软件与应用的基础理论、基本知识、基本技能和方法,有一定系统级的认识能力和抽象能力、具备很强的设计能力和工程实践能力的应用型人才。
针对这种情况,“数据结构”课程在整个专业中的教学体系也要随着这种培养目标的改变而改变。“数据结构”是计算机学科的一门综合性的专业基础课,也是计算机学科的核心课程,在整个学科知识体系中占据非常重要的地位。通过该课程的学习,不仅为后续课程打好理论基础,而且相对于培养目标的“很强的设计能力和工程实践能力”来说,提高学生对数据的组织能力,利用程序设计处理数据的能力更为重要。
本文在分析当前应用型本科计算机科学与技术专业“数据结构”课程教学中存在的问题的基础上,针对数据结构课程内容的高度抽象性和实践性强的特点,从教材到教学方法进行了一系列的改革实践。不再强求对数据结构中抽象数据类型的重点掌握,而是从应用出发,着重强调培养学生对数据的组织和处理能力的提高,以编程实践为主要实践手段,达到提高学生解决实际问题的应用能力和工程实践能力。
1 应用型本科计算机专业“数据结构”教学中存在的问题
“数据结构”课程内容多、概念多、方法多、逻辑性强、高度抽象、技巧性强、实践性强。沿袭精英教育的“数据结构”教学多以传授知识、抽象描述数据结构及算法为主, 辅以一定的编程实践, 大部分学生在学完该门课程后, 普遍感到能看懂数据结构的算法描述, 却无法根据实际问题动手设计数据结构及其算法, 更不用说应用所学知识编程解决问题了。造成这种原因是多方面的,笔者根据大学扩招已来几届学生的数据结构的教学体会,认为主要问题表现在以下几个方面:
1) 数据结构的预备知识掌握不牢。由于其前导课程掌握不好或没能熟练掌握,导致学习本课程困难。数据结构所需的预备知识对不同的专业可能有所不同,但一般必须要先行修过“离散数学”和一门高级语言的程序设计(如PASCAL、C、C++等)。计算机作为以数学和电子技术为基础发展起来的学科,里面用到很多数学理论,在进行抽象数据类型的介绍时,要有一定的代数理论;作算法分析时,就必须有一定的概率理论作基础;作非线性结构的分析时,就必须用到离散数学中的树形结构和图论的知识。而作为计算机专业的最基本的程序设计语言来说,“数据结构”中的算法大多由类PASCAL或类C、C++语言描述而成,在学习数据结构前PASCAL或C或C++已经讲授过了,但由于学生刚刚开始接触程序设计语言,对程序设计语言的掌握往往集中在计算机语言的语法上,而忽略了程序编写能力的培养,实践能力很弱,没有建立起基本的程序设计思想,不能利用计算机解决问题,更谈不上把所学的知识融会贯通,学生在学完程序设计之后,甚至对程序设计有了恐惧情绪。
2) 教材理论性、抽象性太强。在“数据结构”课程教材的选择上,很多高校沿袭精英教育时代选择清华大学严蔚敏老师的《数据结构》教材,该教材曾获“第二届普通高等学校优秀教材全国特等奖”和“1996年度国家科学技术进步奖三等奖”。严蔚敏老师的教材理论完善,逻辑性、抽象性强,对培养计算机专业学生的逻辑思维,数据抽象能力有很好的效果,成为中国高等院校计算机专业的最为经典的教材之一,累计发行超过了100万册,对我国的计算机教育的发展作出了杰出贡献,笔者当年也从该教材中获益匪浅。但从1992年出版已来,实质内容一直没有发生根本的改变,只是根据算法的描述语言进行了修改。在大众化教育的今天,在以培养应用型的计算机工程技术人才的普通高等院校,该教材笔者认为在理论上显得深了些,特别是该教材严格采用算法设计的语言来描述算法,对于计算机语言不是很熟练,程序设计思想尚未完全建立的学生来说,很难将课本的中的含有一定设计技巧的算法转换为程序,上机调试通过,在一定程度上挫伤了学生编写程序的积极性,阻碍了学生实践能力的提高。
3) 教师本身的教学方式和方法单一,不能充分地调动学生的情绪,使学生的思维跟上教师的思维。在传统教学中,教师为了让学生理解相关的概念、算法等内容,常需要大量的板书配合文字、图表等加以说明,学生随着教师的思路分析问题,,能有充分时间作笔记,但由于课程内容抽象难懂、教师多忙于板书和讲解,学生忙于作笔记,双方严重缺乏互动,课堂气氛沉闷,学生提不起学习的兴趣,往往出现“一边教师唾沫横飞、嘶声力竭,而学生则唉声叹气、一脸困惑的情景”。采用多媒体课件后,教师可以充分利用多媒体技术将算法、图表等内容形象、生动地表现,学生学习兴趣也有很大提高,却又容易导致学生既要关注屏幕内容又要忙着作笔记,无暇思考问题,课后难以消化,“听课”则又变成了“看课”。
2 应用型本科计算机专业“数据结构”教学的几点思考
大众化教育大背景下,由于普通高校生源质量的下降,对“数据结构”课程的预备知识掌握不牢,对于应用型本科高等院校“数据结构课程”的教学,不能再强求对数据结构中抽象数据类型的掌握,而是从应用出发,选择合适的教材,采用多种教学手段的综合,着重强调培养学生对数据的组织和处理能力的提高,以编程实践为手段,达到提高学生解决实际问题的应用能力和工程实践能力。
2.1 教材的选择
由于应用型本科高等院校的计算机专业培养目标是很强的设计能力和工程实践能力的应用型人才,因此教材的选择,笔者认为理论性、抽象性太强的教材不一定适合这一层次的高校使用。一方面学生的学习能力不能和研究型大学相比,理论性、抽象性太强的教材学生往往不能够掌握,学得很吃力。另一方面教师不仅要将算法原理讲述清楚,有时,为了学生能够将算法转换为程序,还需要额外的学时将算法如何转换描述清楚,甚至要补讲程序设计语言的内容,造成学时不够。例如,在算法描述的时候,对于数据类型,绝大部分的教材都是利用抽象数据类型的形式描述算法,这样学生在实践的过程中将算法转换为程序时,出错较多,基础差点的甚至根本就不会转换,给学生造成该门课程我用的错觉,打击了学生学习的积极性,不利于学生编程能力的提高。因而,应用型本科高等院校的“数据结构”教材,在描述算法时,应该尽量用贴近编程语言的形式描述算法,降低学生将算法转换成程序的难度,同时为了兼顾算法的描述,可以对比较复杂的算法以流程图的形式先行介绍算法思想。
2.2 教学内容的组织
在教学中,始终以算法实现的两种基本的存储结构顺序结构和链式结构为主线,对数据结构的三种数据组织形式线性结构、树型结构、网状(图形)结构,以点线面体的形式进行立体组织授课。整个教学体系是在线性表、树、图各个数据结构知识点的基础上,以数据组织的两种存储结构为贯穿整个课程的两条主线,注重培养学生掌握各个知识点之间的联系,形成数据结构的理论教学面;在数据结构的实验教学方面,同样采用顺序和链式两种存储结构为主线,以编程实现线性表、树、图的数据组织和算法为手段,提高学生的动手能力;最后将理论和实验两者结合起来进行数据结构课程的课程设计实践,进一步提高学生解决实际问题的能力。例如对线性结构的教学,重点讲授线性结构的两种存储结构下的实现,而对线性结构的抽象表示以线性结构特征的形式体现即可。由于数据的线性组织方式是整个“数据结构“课程的基础,务必让学生掌握透彻,提高对该门课程的兴趣。在完成理论教学之后,实践上以应用为切入点,提出线性结构的数据组织和处理的实例,进行编程实践,培养学生的工程实践能力。
2.3 综合运用多种教学手段
根据数据结构这门课的特点,在不同的教学阶段运用不同的教学手段。单一的教学模式和教学手段在数据结构教学中是不适合这门课的特点的,效果也肯定不会很佳。勿庸置疑,现代教学手段能提高教学效果,现代的多媒体教学课件,网络资源,立体化教材等,对提高某些课程的教学效果作用很大,但对理论性很强的数据结构课程的课堂教学,只能起一定的辅助作用。在讲某种数据结构,如线性表、树、图等,是可以辅以多媒体课件直观表示,但完全用多媒体教学效果就不一定好,在讲述算法思想的时候学生更喜欢教师用粉笔边写步骤边解释。现代教学手段有它的用武之地,也有它的适用范围,不应在什么方面都用现代教学手段。笔者认为,对数据结构中的数据的组织形式和算法的实现可以利用多媒体进行演示,而对于算法思想的讲述,在黑板上虽然讲解速度慢但比多媒体对学生的影响更深刻,这样结合,可发挥两者的长处。
3 结束语
《数据结构》是一门理论性和实践性都很强的课程,笔者认为,对于应用型本科而言,理论教学固然重要,但应将着重点放在实践环节,强调学生编程动手能力的培养。以培养学生的动手实践能力为主线,兼顾理论教学,在实践中总结理论,综合运用多种教学手段比较适合应用型本科学生的接受能力,也符合培养目标的要求。
参考文献:
[1] 汪军,周鸣争,《数据结构》课程教学方法的改革与实践[J].兰州工业高等专科学校学报,2004(3):20-22.
[2] 周鸣争,汪军,计算机科学与技术课程综合化的尝试[J].高等工程教育研究,2003(4):74-76.
论文摘要:该文分析了程序设计在计算机学科中的地位以及程序设计有关的知识和能力构成,结合自己多年的计算机专业教学实践,探讨了在计算机教学中培养学生程序设计能力的有效策略。
计算机科学是一种创造性思维活动,其教育必须面向设计。计算机的本质是“程序的机器”, 只有懂得程序设计,才能懂得计算机,真正了解计算机是怎样工作的。培养学生程序设计能力对计算机专业的学生来说不仅是培养职业技能的需要,也是培养大学生创造性思维的重要途径。学习程序设计语言可以培养学生运用算法来解决实际问题的能力,这种解决问题的方式是计算机所独有的,也只有通过对计算机的程序设计语言和程序设计方法的学习才有可能获得这种解决问题的能力。
1 程序设计在计算机学科中的地位
程序设计是利用某种计算机语言,编制完成某一特定功能的程序的过程,是涉及描述、开发及有效实现求解的一系列活动,是利用计算机实现自动化的重要手段。
计算机学科主要是系统地研究信息描述和变换的算法过程,包括它们的理论、分析、设计、效率、实现和应用。可以这样说,一切算法的基本问题是“什么能被自动化”以及“如何有效地自动化”。这个自动化的过程就是程序设计的过程。
程序设计语言是人们学习计算机的最基本的工具,也是人们学习计算机基础与应用知识的基本课程。通过学习,使学生掌握程序设计的基本概念、基本知识和基本方法,养成良好的程序设计风格,得到一定的程序设计训练,具备初步编写程序解决实际问题的能力。程序设计也正是有形表达抽象思维的方法,在程序设计过程中贯穿阅读判断、分析思考、工具利用、抽象表达、综合创造等多项技能,是理论、抽象、设计和应用的综合能力培养过程。因此程序设计是计算机学科教学的重要内容之一,对计算机专业人才素质的培养至关重要。
2 程序设计的知识和能力构成
根据循序渐进的原则,与程序设计有关的教学内容主要有:计算机基础知识和操作、程序设计语言和基本的程序设计方法、最基本的数据结构及其基本算法、常用的算法设计方法等。在学习这些知识的同时,必须与能力的训练有机地结合起来。程序设计能力表现在以下几个方面:
1)自然语言能力。要有较强的运用自然语言描述现实事物的能力,只有运用背景知识正确且清晰地陈述问题及其求解目标,才能确定程序的功能。
2)数学描述能力。程序设计是为了告诉计算机做什么和如何做。这就需要利用定义、定理、公式、函数等数学工具把问题形式化,建立数学模型。
3)数据结构设计能力。选择合理的存储结构,在计算机中表示数学模型,是程序设计的一个重要方面。
4)算法构造能力。好的程序由精心构造的、好的算法构成。给出问题求解的离散化计算过程,是程序设计中最具有创造性的工作。
5)程序编码能力。用某种程序设计语言表达算法,尽管这种能力往往被认为技术含量不高,但也需要对程序设计语言的熟练掌握和对算法设计的深刻理解。
6)程序调试能力。程序调试能力是一种专业综合技能,需要对程序设计语言和程序结构有深刻的理解,需要熟练的操作技能,需要会设置测试数据和设置程序断点,这些都有待于学生在实践中逐步积累经验。
可以说,程序设计能力的高低很大程度上反映在驾驭自然语言、数学语言和计算机语言的能力上。这3种语言是人们毕生有用的3种通用智能工具。前两者是后者的基础,良好的英语和数学训练是学好程序设计语言和培养程序设计能力的重要基础。
3 培养程序设计能力的有效策略
知识的价值在于运用,知识的运用需要技能,而技能的形成则依赖训练。程序设计知识的学习和能力的培养需要各方面的知识基础,它是一个系统的教育训练过程,需要多个教学环节的紧密配合才能完成。
1)明确教学要求
程序设计语言课程一般是为应用性教学而设置的,因此,课程的教学不仅仅是传授知识,而且应该强调应用性,应该以培养学生的能力为主。程序设计语言的内容比较丰富,在教学中如果面面俱到,必会耗费较多课时,而且教学效果不一定好。因为过分强调程序设计语言的系统性和完整性就可能会转移学生对课程重点的注意力,关键在于教会学生如何正确运用程序设计语言编写程序,训练实用编程能力。所以必须突出重点,突出应用性,侧重教思想,即把程序设计语言的基本思想、基本环境、基本概念、基本知识和基本方法教给学生,使他们在学习中对硬件、软件环境、程序设计的基本思想和基本技巧,所学程序设计语言的基本概念和使用方法以及编程技术有一个比较全面的感性认识,从而提高解决实际问题的能力。
2)打好数学基础。严格的数学训练是程序设计能力的基础,学习和加强排列与组合、数列、数学归纳法等离散系统的数学方法对提高程序设计能力尤为重要。问题描述和建立数学模型是程序设计的前奏,数学归纳法、穷举法、构造证明法等证明技巧是算法设计方法的基础。
3)强化英语水平。程序设计语言的符号系统以英语为基础,程序设计文档语言首选英语。英文资料是计算机最新和最大的技术资料来源,英语水平是我国软件产业发展和参与国际竞争的制约因素。
4)重视阅读训练。从某种意义上来说,程序设计是用程序设计语言和方法进行的一种写作。可以想象,如果学生没有阅读过一份完整、规范、有实用价值的标准程序,即使记住了有关语言的语法规则,也不可能写出像样的程序。所以,大量阅读、分析、修改和扩充典型的算法和程序,是提高程序写作能力的有效途径。而这个重要学习环节往往未得到应有的重视,缺乏配套的程序设计阅读分析教材。教师应经常指导学生阅读程序,理解程序,提高学生分析程序的能力。
5)注重算法设计,突出数据结构内容。瑞士科学家、PASCAL语言和MODULA-2语言的发明者沃思(Wirth)教授提出了著名的公式:程序=算法+数据结构。这个公式表达了程序的实质,说明对于一个程序设计问题来讲,算法与程序设计是紧密联系的,绝不能脱离数据结构去讲解算法设计。程序设计语言的教学应该结合数据结构的基本内容。对于同一个计算问题,选用不同的数据结构,其算法大不一样,算法的优劣程度也不同。因此,要教会学生对不同的问题选择合适的数据结构。在整个程序设计课程中,必须强调算法设计方法,通过不断的算法设计训练,使学生切实掌握迭代、枚举、递归、分类等常用算法设计方法。
6)更新教学内容。计算机学科是一门综合性学科,而且程序设计语言的应用领域在不断扩大和发展。因此,在教学中应结合专业的特点和教学的要求,将软件工程的思想方法贯穿于整个教学过程,介绍程序设计语言的最新发展和应用,重视面向对象程序设计方法的引入,搞好教材内容的更新。如图形程序设计、下拉式或弹出式菜单、计算机病毒防治等等。这样不仅能把最新的知识和最新发展动态充实到教学上来,大大丰富了教学内容,而且使学生加深对程序设计语言的理解和掌握,保持对信息技术和专业的兴趣,及时跟上信息技术日新月异的发展趋势,在今后工作中保持领先地位。
7)采用先进教学手段。用传统的课堂教学方法讲授动态的算法和数据结构是十分低效的,像排序、递归等抽象动态的内容讲解就常常是费力不讨好。应该根据课程特点,采用先进的现代教学方法,如直观教学方法:利用挂图、教具等讲解,以及计算机辅助教学(CAI)和计算机辅助学习(Computer Aided Learning,简称CAL)进行教学,通常开发利用与课程内容与教学特点相适应的多媒体课件进行教学。它们是讲解算法和进行程序设计训练的最佳教学平台,既能增加学习的趣味性,又可利用图形的直观性帮助抽象和动态过程的理解。
8)加强实践环节,强化创造性思维能力培养。在教学中,常常听到学生提出这样的问题:“程序设计语言有什么用?”,有的学生还反映:“程序设计语言并不难学,就是不知道如何应用?”一些学生学到了一定的科学知识,但上机动手水平低。这种现象与普遍忽视实践环节有关。为了扭转这一局面,在整个教学过程中,必须强调实践环节的重要性,充分安排上机实践时间,加强系统训练和实践能力的培养,强化创造性思维能力培养。根据课程特点,在教学中,采用案例驱动教学,进行兴趣引导;在实践中,可以精心组织一系列由易到难、由浅入深、配套衔接、结合学科学习、有一定设计技巧的程序设计作业,最后再安排一次综合性强、有一定难度的课程设计实践,对学生进行项目训练,提高学生应用能力。通过上机作业和课程设计的完成,使学生独立思考,各显才干,总结经验,培养他们的动手能力和编程能力,以及分析问题和解决问题的能力。
4 结论
总之,培养学生计算机程序设计能力的方法和途径很多,但是编程序不难,编好程序不易。作为教师,必须从培养学生编程思维的角度出发,按照以上策略认真进行编程知识的教学和技能的培养,加强实践,提高学生科学思维的能力,真正学会程序设计的真本领。
参考文献:
[1] ,王楠.浅谈程序设计语言课程教学方法[J].吉林大学学报(信息科学版),2005(S2).
[2] 徐进华.提高学生程序设计能力的几个措施[J].计算机时代,2005(11).
[3] 李凌.浅谈高级语言程序设计课堂教学方法[J].淮北职业技术学院学报,2005(04).
关键词:课程;课程群;课程群建设
精品课程建设项目是高等教育质量工程的主要组成部分。德州学院从2003年启动精品课程建设工作以来,先后建成23门省级精品课程、160多门校级精品课程,在课程建设上取得了长足的进步,学校的教学质量也有了更进一步的发展。由“离散数学”、“数据结构”、“数学建模”和“复变函数论”组成的信息与计算科学专业基础平台课课程群,经过几年的建设取得了明显的教学效果,于2012年被评为省级精品课程。由其组建的信息与计算科学教学团队被评为省级教学团队,促进了教学质量的提高和特色专业的建设。
1. 课程群建设的内涵
关于课程群的建设,目前学术界有多种论述,归纳起来不外乎两种情况:一是基于学科划分的课程群;再就是突破学科限制的课程群。但两者有一个共同的特点,就是同一课程群的课程之间内容必须密切相关。我们认为,课程群就是内容紧密联系、内在逻辑性强、属于同一培养能力范畴的课程的有机整体,可以是同一学科的,也可以是不同学科的。
专业知识结构可分为五个层次:知识点、知识单元、课程、课程群、专业教学计划,由此可见,课程群建设是专业建设的子集,是课程建设的超集,它打破了课程内容的归属性,从培养目标层次把握课程内容的分配、实施和技能的实现等。研究课程群建设,更易于专业教学计划的实施,更易于培养目标的实现。
课程群建设把传统的教学组织的两层架构进化为三层架构,使技能要求独立于课程,形成目标明确的课程群层次,嵌在课程和培养方案之间。由课程群承载技能培养目标,协调课程之间的关系,使目标明确。课程群建设弱化了课程的独立性,强化了课程之间的亲和性,凸显它们为确定的共同培养目标的服务特征,突出各课程所蕴含的技能定位,把围绕一个技能培养目标的、含有若干课程中的技能点抽象出来,在一个更高层次上连贯起来,使该技能的培养随课程教学的推进而不断递进、加深和拓展,逐步实现与培养目标的重合。
一个课程群一般要由3门以上的课程组成,各课程教学内容具有不可重复性,同时知识点之间存在相对独立和离散性,知识点之间关系亲和,教学实践环节或技能培养环节是连贯、递进的。课程群的建设要符合在组织、内容、结构等方面的教学规约,具有显著的技能属性,教学目的性更明确,培养方向性更突出,技能培养的过程连续并不断加深,外延不断拓宽,课程的开放性更友好。课程群注重技能培养,弱化课程个性概念,强化课程内容之间的融合、交叉和关联。
2. 课程群建设的目的与原则
对于信息与计算科学专业基础平台课课程群建设,我们认为必须涵盖普通高等院校人才培养所必需的基础理论、专业基础理论、专业基本技能和专业核心技能的精华。在此基础上,信息与计算科学专业基础平台课课程群建设首先要有助于专业培养目标的定位和培养目标的实现。确立信息与计算科学专业基础平台课课程群,以集中人力、物力来加强课程的研究和建设,从而加速专业素养和专业技能的培养,提高教学质量,取得重点突破的效果。这是课程群建设的目的所在。
课程群建设,要坚持五个“有利”的原则。一要有利于专业教学计划的组织和实施;二要有利于深化教学改革、整合教学内容、提高教学质量;三要有利于教材建设和其他教学资源建设;四要有利于学生综合素质和实践技能的培养;五要有利于学生的就业。
3. 信息与计算科学专业基础平台课课程群的建设
(1)专业基础平台课课程群的构建。信息与计算科学专业基础平台课课程群建设应侧重于“理论与实践并重”的要求,问题的分析与计算模型的设计。而“离散数学”、“数据结构”、“数学建模”、“复变函数论”等属于理论与实践并重、计算模型设计类的专业基础平台课。“离散数学”是以研究离散量的结构及相互关系为主要目标,充分描述了计算机科学离散性的特点。通过该课程的学习,训练学生具有严密的思维方法,严格证明的推理能力,应用自如的解题技巧,以及训练有素的演算能力,使学生能掌握处理各种离散结构事物的描述工具与方法,为后续课程“数据结构”、“复变函数论”、“数学建模”的学习奠定了良好的基础。数据结构主要研究数据的各种组织形式以及建立在这些结构之上的各种运算的实现,为计算机语言进行程序设计提供方法性的理论指导。通过该课程的学习,培养学生对算法的计算复杂性进行正确分析的能力,为“数学建模”和“复变函数论”中的编程解决实际打下坚实的基础。复变函数论(双语)主要研究解析函数。通过该课程的学习,培养学生的逻辑思维能力和抽象思维能力,同时提高学生编程解决实际问题的能力。“复变函数论”课程中的应用部分,要用到数学建模的思想、技术以及数据结构算法的思想,并且通过该课程的双语教学,可以提高学生的英语表达能力和英语写作能力,为学生参加美国大学生数学建模奠定良好的外语基础。数学建模是一门理论与实践相结合的课程,主要讲述建模方法、运筹学模型、微分方程模型、统计分析、插值与拟合、预测与评价等理论内容,以及用MATLAB、SPSS等数学软件编程求解各种数学模型的实践教学内容。数学建模作为联系数学与实际问题的桥梁,是数学在各个领域广泛应用的媒介,是数学理论知识和应用能力共同提高的最佳结合点。数学建模的思想也融入了其他3门课程的教学中。通过该课程的学习,培养学生学会运用数学方法建立数学模型,并应用数学软件解决实际问题。由此可见,离散数学、数据结构、数学建模和复变函数论4门课程具有强相关性,将其组合在一起共同建设,对于学生形成合理的知识结构、促进知识的交融、利用所学知识解决实际问题有着重要的作用。
(2)专业基础平台课课程群教学团队建设。加强精品课程建设是提高高等教育教学质量的根本措施。要建好精品课程,最关键的是教学团队建设。由离散数学、数据结构、数学建模和复变函数论4门课程的骨干教师组成的教学团队由16人组成,其中教授4人,副教授8人,具有博士学位的教师4人,具有学科交叉背景的教师4人,2人为校级教学名师,1人为校级学术骨干。团队中教学名师和学术骨干分别来自不同的著名高校,具有先进的教育理念、活跃的学术思想、强烈的开放意识、严谨求实的优良学风和突出的质量意识。由于对课程群建设的重视,经过多年的建设,已形成了一支学术思想活跃、教学科研紧密结合、学术严谨、老中青结合的教学团队。这也是我校教学团队建设的基本特色和基本经验。
(3)教学内容和教材的整合与优化。由于信息与计算科学专业基础平台课课程群中各门课程之间存在门数多、学时多、相互之间内容重复、实践环节薄弱等不足,我们重新修订完善了教学大纲,制定了新的教学计划。对不同课程之间内容重复或交叉的部分进行了有机的整合,更好地体现了“专业性”和“基础性”;对各门课程的理论课时数和实验课时数进行了调整,使之更合理;设计了体现课程间关联的综合性和设计性实验,力求理论与实践的紧密结合,突出了学生实践技能的培养;在内容安排上,力求符合学生的认知规律,优化知识结构,突出专业培养特色。
该课程群中的每一门课都有完整的、较好体现培养目标和教学大纲要求的教材,对教学内容进行了整合和优化,加强了实践教学环节,并且都配有实验指导、多媒体课件、习题答案等,符合立体化教材建设的要求,更好地体现了课程群建设的思想,突出了课程之间的联系和融合,突出了学生综合利用所学知识解决实际问题能力的培养。
(4)教学模式和教学方法改革。在教学中,采用“三结合、四训练、五注重”的教学模式和双主线的教学设计、三层阶梯式的教学架构、四级实践教学体系。三结合是指“教学内容与上机实验相结合”,“课堂教学中理论与实例相结合”,“课程设计与创新能力培养相结合”。四训练是指基础训练、技能训练、综合训练和开发训练。五注重是指在教学中,注重通过情景创设激发学生的求知欲,注重通过问题质疑培养学生发现问题的能力,注重通过探索导引培养学生解决问题的能力,注重通过项目合作培养学生的合作意识,注重通过问题扩展培养学生的创新意识和自学能力。双主线的教学设计是指,第一条主线就是教学过程中贯穿从简单到复杂的认识过程,第二条主线是教学过程中贯穿解决实际问题能力的培养。三层教学架构是指在教学过程中引入创新思维,对课程的教学内容、教学模式和教学手段三个方面进行了相应的研究与设计。四级实践教学体系是指采用兴趣与项目双驱动的实践教学模式,强化实践能力和创新精神培养,通过实验强化基础理论、课程设计锻炼基本开发能力、创新大赛激发实践热情、学生科技创新项目与教师实际科研项目双重交叉实训等培养解决实际问题的应用能力。
在教学方法方面,我们主要采取了“启发式”、“双向互动式”、“研讨式”等教学方法。①启发式教学法:坚持以学生为主体,教师为主导的原则,以启发式教学理论为导向,构建以准备、诱发、释疑、转化、应用为基本要素的传动结构的教学模式。在课堂教学中,教师通过精心设计的问题进行诱发导引,并结合课堂练习精讲启发,及时总结学生讨论交流结果,针对学生普遍存在的疑难问题进行讲解,突破教学难点,将知识迁移转化为学生能力,从而让学生掌握解决实际问题的技能技巧,进而实现备教材、备教法、备学生的三结合。②双向互动式教学法:教学中既要注重教师的教又要注重学生的学,采取合作互动的方法,即在老师的指导下,让学生自己学会提出问题、分析问题、解决问题,充分发挥学生的积极性。变以“教师为主”的教学方式为以“学生为中心”的教学模式。③研讨式教学法:首先教师精心设计问题,然后学生按教师传授的方法进行独立探索,并展开交流讨论,最后由教师进行归纳总结和讲评。这种教学模式突出了学生在学习过程中的主体地位,能够充分调动学生的学习积极性和创造性,有利于培养学生的综合能力,提高学生的综合素质。
(5)课程网站建设。课程网站资源建设是课程教学改革中最重要的“物”的因素,是实现现代教育思想与理念、推行现代教学模式与方法、革新教学内容的有力载体和工具。我们开发了各门课程的课程网站,网站资源丰富,实现了在线学习、在线交流等多种功能,为教师和学生的交流和学习提供了良好平台。
4. 信息与计算科学专业基础平台课课程群建设取得的成效
通过课程整合优化,密切了不同课程之间的联系,增强了不同专业和不同课程之间的相互交融,减少了课程之间的相互重叠,增加了实践环节的课时。由于各课程之间内容不再重复,知识具有递增性,理论教学与实践教学课时分配更趋合理,综合性设计实验密切了课程之间的联系,应用技能为主的思想得到更好的体现,因而促进了课程体系的整体优化和协调发展。
课程群中的课程都开设了不同层次的实验项目,以强化学生实践能力的培养。通过基础实验巩固学生所学课程的理论、方法和基本技能;通过综合实验,培养学生的创新意识及探索技能;通过开展课程设计,培养学生解决实际问题的实践能力;通过组织学生参加全国大学生数学建模等科技竞赛活动,进一步培养学生通过分析问题来建立数学建模、编程实现解决实际问题的能力。
通过对课程的整合优化,更加明确专业发展方向,并在不同课程群的建设中实现分类施教、差异培养的人才培养目标。学生在学习过程中,积极性、主动性增强了,兴趣更加浓厚,同时对企业和社会的适应能力更强,系统观念、整体观念和分析能力都得到较好的培养,并且对自身的认识和发展方向更加明确。对教师来说,教学改革积极性空前高涨,多门课程之间甚至跨学科之间的交流和研讨进一步加强,教师在教学、研究、技术开发等多个领域打开了更多的空间与通道。通过课程整合优化,形成了独特的专业优势。
实践证明,信息与计算科学专业基础平台课课程群的建设取得了较好的教学效果,对于其他课程群的建设有很好的借鉴和示范作用。
参考文献:
[1] 李慧仙.高校课程群的建设与评审体系[J].理工高教研究,2006(5).
[2] 胡发胜,刘贵真.国家精品课程运筹学的教学改革与实践[J].中国大学教学,2006(7).
[3] 孙烔,郝建文,杨联贵.数学精品课程建设的实践与思考[J].中国大学教学,2008(1).
[4] 谭萍,庹清.高等学校精品课程的内涵建设研究[J].高等理科教育,2009(5).