摘要:在具体分析数据结构实践教学现状的基础上,重点阐述近几年来针对数据结构实践教学进行的教学改革和调整措施以及下一步实践教学中的改革探索要点。
关键词:数据结构;实践教学;分层教学;微课
中图分类号:G642.0 文献标识码:A 文章编号:1009-3044(2018)15-0019-03
Data Structures Practice Teaching Exploration
MU Cui-xia
(China Womens University, Beijing 100101, China)
Abstract:On the basis of analyzing the present status of the practice teaching of data structures in China Womens 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)一起營造分享、合作、互助和积极的学习氛围。鼓励学生在实践过程中多讨论,大作业合作完成,遇到困难互相帮助。发现有优化算法的例子,老师及时表扬并让学生跟大家一起分享讨论,从而营造积极的集体学习氛围。
3.5发挥微课在数据结构实践教学中作用
互联网+时代的教育改革,将以学生和学习为中心,创造性地利用信息技术,提高教与学的效率,改善教与学的体验,更好地满足个性化的学习需求。“翻转课堂”模式中,学生在课外通过看视频讲座、阅读功能增强的电子书等形式,自主规划学习内容、学习节奏、风格和呈现知识的方式来完成知识的学习。而在课堂上教师答疑解惑,有更多的时间与每个人交流,学生之间也可以讨论,可以开展知识运用的实验实践等,最大程度地满足学生的个性化学习需要。微课是实现“翻转课堂”教学组织形式的一种常用的课件设计方案,它基于学科的核心知识点设计而成,以短小教学视频为核心的、具有明确教学环节的结构化和微型化在线教学课件。基于微课的翻转课堂教学模式能更好地做到分层教学、因材施教,而且更有利于学生的个性发展。
分析女院计算机专业学生的具体情况,结合数据结构课程本身的特点,完全实现翻转课堂难度极大,但是将微课作为传统课堂的一种延伸和补充,将会更好地满足学生的学习需求,改善教学效果。在算法设计实践过程中,最容易发现学生的不同学习能力和需求,也更适宜开展微课应用,也利于教师不断总结和完善重点和难点的教学方法方式[6-7]。比如稍慢于实践进度的,有疑问可通过微課进行回顾,自行安排学习和实践进度。快于实践进度的,可通过补充视频自学来加大实践力度,拓展学习和实践内容。
另外,本学期选择了李春葆版的数据结构教程,属于升级微课版,书中附带了一些微课,直接扫描二维码即可看视频,方便了学生预习和复习。另外总结学生实践过程的常见问题等需求,自行制作相应微课资源,比如vs2010使用指南微课,常见错误调试方法,赫夫曼编码预习微课等。这样可以更好地补充和辅助学生的课堂内外的学习与实践,满足学生个性化需求。
4 结语
在数据结构实践教学中,坚持夯实基础和抓住主线,根据学生实际情况及时调整实践内容、进度安排和考核方式等,努力激发学生学习兴趣,营造积极学习氛围。适当引入微课资源,也将更好地进行分层教学,满足个性化的需求。
参考文献:
[1]穆翠霞.女院数据结构课程的教学探索与体会[J].计算机教育,2008(19):67-70+77.
[2]李东晖,申聪,戴小鹏,等.数据结构实践教学体系与教学设计研究[J].课程教育研究,2017(33):34-36.
[3]陈姝颖,陈雷,石艳荣,等.面向应用型本科教育的数据结构课程实践改革初探[J].高教学刊,2017(12):99-100+103.
[4]刘小飞,李社蕾,李明杰.应用型本科高校数据结构教学改革初探——以三亚学院为例[J].科教导刊(上旬刊),2017(07):130-131.
[5]崔彩霞,菅小艳,庞天杰.地方高校计算机类专业“算法与数据结构”实践教学改革[J].计算机教育,2016(07):52-54.
[6]徐翀.微课在数据结构课程中的应用[J].中国教育信息化,2014(12):37-39.
[7]张瑞霞,文益民,周娅,等.数据结构课程微课设计与应用研究[J].计算机教育,2015(16):59-62.