基于创新能力培养的数据结构课程教学改革
2020-07-04袁辉勇戴经国刘霖彭剑
袁辉勇 戴经国 刘霖 彭剑
摘要:数据结构课程在计算机学科中有着非常重要的地位。重新确定数据结构课程定位与培养目标,自编辅导教材与实验指导书,开发程序设计在线训练平台,建设在线开放课程,将ACM竞赛模式引入到实践教学,突出理论与实践应用相结合,有效调动了学生自主学习的积极性,提高了学生的创新能力。
关键词:在线开放课程;创新能力培养;多层次实践教学
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2020)15-0190-02
1引言
数据结构作为计算机学科的专业基础核心课程,对应于学科中问题求解的理论、抽象和设计的方法论,在学科知识体系中具有核心的重要位置。它承上启下,贯通始终,对于培养学生的计算思维、系统分析与设计、算法设计与分析、程序设计与实现等基本能力至关重要。大量的实践表明,数据结构课程在计算机本科课程中有着相当重要的作用,同时也对毕业生后续的工作和研究有着深远的影响嘲。它所讨论的知识内容和提倡的技术方法,无论对进一步学习计算机领域的其他课程,还是对从事大型信息项目的开发,都是重要而必备的基础。
程序的时间和空间效率,不仅跟数据的组织方式有关,也跟处理流程的巧妙程度有关。数据结构讲授、探讨有关数据组织、算法设计、时间和空间效率的概念和通用分析方法,帮助学生学会数据的组织方法和一些典型算法的实现,能够针对问题的应用背景分析,选择合适的数据结构,从而培养高级程序设计技能。地方高校结合自身特点,创新教育教学理念,改革传统教学方法与教学手段,推进教学改革与创新,构建以创新能力培养为目标的教学体系,提升课程教学水平,对创新人才培养有非常重要的作用。
2课程教学中存在的问题
先导课程不扎实。数据结构课程的先导课程有c或c++程序设计,学生在学习数据结构应较好地掌握程序设计语言,数据结构中的算法基本上是采用C或c++语言描述,但由于大一学生开始学习c或C++程序设计,要达到熟练使用还有一定难度,尤其是在使用指针时还比较困难。
教学内容与课程体系零散。数据结构课程内容相对抽象零散,涉及较多的基本概念、基本结构、算法和基本技术。由于课程的核心内容主要集中于对各种数据结构的应用上,虽然各种数据结构之间存在许多内在的联系,但这些内容还是独立、自成体系,各种结构上的算法涉及的知识较多,而且基于模型及其操作,不易理解。
教学目的与教学要求不明确。数据结构是一门实践性较强的课程,要注重培养学生利用理论知识解决具体问题的能力,但传统的教学仅仅满足于将理论知识讲解清楚,并不注重将理论知识应用于解决具体问题,学生为了考试死记硬背理论知识,把一门实践性较强的课程变成了一门与实践脱钩、内容枯燥、乏味的理论课。
教学资源缺乏、教学手段落后。在课程教学中,长期实施以教师为主体、按照教学大纲教学进度来组织、学生被动学习的教学方法。大多利用“粉笔+黑板+PPT”的算法演示方式,缺乏有效的教学资源,缺乏动画和反复演示的效果,难以充分展示算法的执行过程,学生难以掌握复杂数据之间的变化关系。
3基于创新能力培养的课程教学改革
(1)打牢前导课程基础,强调程序设计语言的应用
C语言的结构体和指针是描述存储结构的基础,灵活地运用指针可以处理各种复杂的数据结构。在组织教学内容时,预留时间重点复习和训练C语言程序设计中的结构体和指针,在复习和训练中,从注重C语言的语法知识转变为注重程序设计能力的培养,对学生学好数据结构起到积极的作用。在数据结构各章节的教学过程中,则结合学生的学习状况和相应算法,再适当复习必要的C语言程序设计知识,抓住这两门课程的衔接点实施教学。
(2)重组课程知识体系,突出三种结构和两种技术
数据结构的知识点比较多,看起来零散,但知识体系很清晰。要把握好数据结构中的线性、树、图三种基本结构和排序、查找两种基本技术。突出数据组织方法与实现技术构成,重构由基本概念、基本结构(线性、树、图)和基本技术(查找和排序)三大部分组成的课程体系。基本概念部分重点讲述数据结构定义、内容、方法、评价以及前续基础与课程要求,明确数据结构是什么、学什么、怎么学数据结构。基本结构部分重点讲述线性结构、树、图的逻辑结构、存储结构及其加工处理基本算法。基本技术部分包括查找和排序两类经典技术,贯穿了参数传递、指针处理技术、数组应用、递归与队列等重要的程序设计技术;力求表现经典算法思路,培养学生的创新能力,为学生继续拓展提供线索。
教学中以数据的逻辑结构为主线,顺序介绍线性结构、树形结构、图形结构和文件结构,针对每种数据结构时,针对其存储结构设计相关算法。例如,针对线性表,按存储结构分为顺序存储和链式存储两种方式,针对不同的存储结构设计算法;考虑到线性结构在运算时的特殊性,进一步介绍栈、队列、串、数组和广义表,最后重点讲解排序和查找两种基本算法。在把握好课程的知识体系后,从简单到复杂、循序渐进、逐步深入地实施教学。例如在线性表中学习的链表,在树的链式存储、图的邻接表、链地址法解决哈希表冲突时都是其具体应用。在教学中应注意引导学生复习前面的内容,把相关教学内容串联,形成一个完整的知识体系。
(3)明确课程目标,优化教学内容
应用型本科的特点,使其数据结构课程的课程目标和要求与一流本科有着不同的侧重点。应用型本科数据结构课程重点讲授数据的三种基本结构、两种技术及算法设计与分析,为操作系统、编译原理、计算机网络、软件工程等后续课程提供必要的知识基础。应该优化教学内容,教学中侧重数据的存储结构及其算法实现,注重算法的效率性,锻炼学生在实际问题求解中选择数据结构、设计算法的能力。
(4)建设立体化教学资源,有效辅助学生自主学习
建设支撑教学过程与自主学习两个面向的立体化数据结构课程教学资源。根据国家规划教材(《数据结构》,严蔚敏,清华大学出版社)的教学内容,精选习题,重新编写实验教学大纲,更新实践教学内容,精心设计了12个课程实验,编写了配套辅导教材《数據结构习题与实验指导》,设计了与课程内容相适应的多媒体课件,提供选件控制方式,便于教学内容重组。面向自主学习扩展的教学资源包括“数据结构”在线开放课程和程序设计在线训练平台。
在线开放课程涵盖教学视频、练习测试、同步训练、教学大纲、参考文献、相关题库等教学资源,以丰富的教学资源促进学生线上线下主动学习。精心录制了教学视频,便于学生有针对性的自主学习;设计了分层次的课后作业,并同步提供给学生,便于学生巩固课堂教学效果;每讲均附有小结,每章均有典型题例,便于总结提高。程序设计在线训练平台中,针对知识点建设了数据结构专项训练题100余道,收集了各级各类ACM竞赛中与数据结构有关的竞赛题150余道。建设了一个包含20多个题目的数据结构应用案例库,案例更接近实际应用系统,可以有效提高学生创新动力。
(5)改革教学方法与手段,实施多层次实践教学
实践教学包括验证性实验、综合性实验和课程设计三个层次。验证性实验与课堂教学同步,学生在实验课中完成实验,综合性实验与每章的教学总结同步,要求学生完成线性表、栈与队列、树、图的应用以及排序、检索6个综合性实验,课程设计涉及线性表、栈与队列、树、图、排序、检索等6章,在每章结束时布置设计题目,由于课程设计涉及基于软件工程的程序开发方法,故安排在课程结束时实施。
针对知识点按难易程度设计验证性实验、综合性实验。实验既要有较简单的基本题目,又要有一些更接近应用、具有挑战性的题目,可以满足不同层次学生的需求,充分调动学生学习的主动性。为了提高学生的积极性,采取ACM竞赛的方式实时判断程序代码,设计了线性表、树、图、查找、排序5次专项比赛,每次比赛包含5个题目,组织学生在规定时间内进行比赛,使用程序设计在线训练平台实时评判学生提交的代码,并且按照完成题目的数量和用时进行排名,有效地调动学生的积极性。
针对每个章节设计了课程设计,课程设计由3-5名学生组成的课程小组完成,设计的程序代码先通过在线训练平台的实时评判,再书写课程设计报告。训练学生不仅仅是以完成程序为目标,更重要的是培养学生的软件设计能力、测试能力和文档撰写能力,课程设计报告有统一的格式,至少包含需求分析、概要设计、详细设计、测试、算法分析与代码附录等六个方面的内容。
4结语
数据结构课程在计算机学科中有非常重要的地位。近几年来,我们在课程教学改革中,重新确定了课程定位与培养目标,自编了辅导教材与实验指导书,开发了程序设计在线训练平台,建设了在线开放课程,改革实践教学,突出理论与实践应用相结合。有效调动了学生自主学习的积极性,将ACM竞赛模式引入到数据结构的实践教学,提高了学生的创新能力。通过在线训练平台有效提高了实践教学指导效率、课程设计报告强化了学生的文档书写能力。通过课程改革,有效提高了学生的自主学习能力,培养了学生团队协作能力和合作精神,训练了学生的项目管理能力和基本科研能力。学生撰写的研究论文有多篇发表在各级各类刊物上,学生在各级各类大学生创新创业和科研项目中获得了好成绩,为各级各类学科竞赛、创新创业实验室培养了优秀的队员和后备力量。今后,将进一步完善习题库、案例庫的建设,适时调整教学内容、改进教学方法,使数据结构课程教学质量进一步提高。