APP下载

应用型本科“数据结构”课程教学探索与思考

2022-03-14王云

科技与创新 2022年5期
关键词:工程化数据结构编程

王云

(南京理工大学泰州科技学院,江苏 泰州225300)

“数据结构”课程是计算机类及相关专业的核心课程,在计算机学科的教学中占据重要的地位,各高校都十分重视该门课程的教学工作。但高校由于办学性质及人才培养定位的不同,对于“数据结构”这门课程最终的培养要求及培养目标显然定位也不能完全相同。对于研究型高校,笔者认为应着重培养学生的创新思维,深入研究数据结构关联的算法,重在对算法的思考与改进,辅之以经典算法的实现;而对于非研究型高校,尤其针对应用型本科高校,笔者认为更多的是理解原有的经典数据结构算法,进而在理解的基础上运用一门编程语言完整无误地实现编程才是最重要的,因此如何有效开展该门课程的教学工作,切实提高学生的实践动手能力及提升学生的编程思维,值得每一个应用型高校计算机相关教师的思考与探索。基于上述背景,本文结合笔者“数据结构”课程教学改革的实践,就该门课程的教学现状、教改思路等方面进行了一些探讨。

1 课程教学现状与面临的问题

1.1 重理论,轻实践

“数据结构”课程整体难度较大,知识点较为抽象,尤其是树及图等章节的内容,与数学联系较为紧密,对学生的逻辑思维要求较高,这就决定了对该门课程的教学需要着重加强学生上机实践环节,只有通过不断地上机演练和总结思考,才能在实践中逐步理解掌握数据结构的各知识点具体含义。而经过调查,发现大部分应用型高校教师在进行该门课程教学时,基本上都是以理论教学为主[1],课程的实践学时普遍较少,大部分高校在实际的教学中,都是单纯地在理论课教室授课,可能由于授课时间有限,或者部分教师自己对算法的理解与实现也不是很到位,这就造成了很多教师只是被动地将数据结构对应的相关算法通过PPT展示,然后对照着代码很粗略地讲解,很少能将代码通过现场编程等方式,具体告知学生算法的基本原理及实现的过程,从而造成学生也只能被动地听,很少有时间或者有精力去思考算法的具体实现过程,这样就无形中导致学生面对大量抽象的知识点一知半解,从而不能灵活应用数据结构知识解决实际的编程问题,课程教学效果大大折扣,也不利于应用型人才的培养,教学效果与应用型高校实际的人才培养定位是相违背的。

1.2 教材选取问题

经过调研及查阅文献可知,目前大部分应用型本科高校基本上都选用C语言版本进行数据结构的描述,也有部分院校选用C++版本描述[2],但无论是C语言还是C++语言描述数据结构,笔者认为都不是很适合。采用C语言描述数据结构,编程思维繁杂且缺少面向对象思维,如C语言中的指针虽然编程较为灵活,但具体编程时,学生不易掌握且会滥用,同时在描述相关数据结构时使用的数据类型也较为抽象,也不利于学生的理解,久而久之造成学生对学习这门课产生了较大的畏难情绪。同时上机操作时,单纯用C语言去描述数据结构对应算法的具体实现过程,也绝非是件容易的事。教学实践中发现,大部分同学都不能将程序从头写到尾,即完整地将一个算法描述出来,往往都需要教师将程序的大部分内容预先给出,只留出一些空让学生去填写,这样编程教学效果其实是打折扣的;而C++语言描述虽然具备面向对象思维,但语言的应用前景不是很宽广且语言自身的编程难度也很大,比如C++中的多重继承机制、不能自动进行垃圾回收,也会让学生产生畏难情绪,导致学习的效果也得不到保障。

1.3 课程内容设置不合理

研究型高校以培养学术型人才为目标,因此对于“数据结构”课程的教学,往往理论挖得很深,注重知识的广度与深度,课程内容讲究面面俱到[3],如应用型高校在介绍树的相关内容时,一般只会介绍树及二叉树的基本内容,而研究型高校除了介绍常规树所对应的基本知识外,还会着重介绍B+、B-树等内容。同时在具体授课时,除了让学生理解算法并实现算法外,教师往往还会额外布置学习任务,如通过阅读论文、查阅文献、举办专题讲座等形式,进一步加深、拓展学生对数据结构知识的理解与运用。而应用型高校以培养实践技能型人才为目标,这就要求不能照搬研究型高校的教学内容和教学方法,而应挖掘适合应用型人才培养的教学内容和教学方法。但笔者发现,大部分应用型高校对“数据结构”课程的教学内容与研究型高校基本无差别,也是注重对抽象知识点的深挖,而较少启发学生对数据结构编程的思考。课程内容侧重讲解各类型数据结构的特性及存储,而对数据结构所对应的算法要求偏低[4]。

1.4 缺乏工程性教育理念

目前,“数据结构”课程基本上较少融入工程性教育理念,较多地是单纯讲解知识点,这样就不能很好地把握课程的工程化建设方向和重点[5]。有些院校即使引入相关工程化元素,也只是点到为止,未构建工程化认证体系;未提出“数据结构”课程的工程化建设目标[6];未严格按照工程教育认证标准要求,统筹安排,提前部署,进一步推进以“学生中心、成果导向、持续改进”教育教学理念的落实;未坚持以工程教育专业认证标准为导向开展课程建设,突出课程特色。从而造成培养的学生较难进入工程化行业就业,职业能力有较大欠缺,也不符合现在国家倡导的新工科教育理念。

2 课程教改思路

2.1 选用Java语言描述

笔者在实际的“数据结构”课程教学中,选用Java语言描述数据结构。Java语言是优秀的面向对象编程语言。该语言应用范围广泛,是市场编程的主流语言之一。使用Java语言描述数据结构,编程思路清晰且灵活,如只需使用泛型类即可描述复杂的数据结构,从而使得程序的通用性、复用性大大提高,而且学生一般也具备Java的编程基础,利于学生学习掌握。笔者在教学实践中发现,只要启发学生好好思考,并鼓励他们勇于尝试,大部分学生都能将程序完整地写出来,这样不仅让学生切实掌握了数据结构对应算法的精髓,也让学生的学习信心和学习热情得以较大程度的提升,学习效果还是非常不错的;再比如Java语言摒弃了多重继承机制,并具备垃圾自动回收机制,降低了学生编程的复杂性;同时Java语言提供了丰富的系统类和接口,如使用Java集合类就可以很方便地描述和操作链表,使得学生容易上手,并对描述复杂的数据结构算法树立信心,而不必纠结于如何去描述数据结构或者分散学生的编程精力,使得学生可以从繁杂的数据结构描述中解放出来,只要关注算法的核心实现思想即可,学生实际的编程效果得到保证。

2.2 侧重实践环节

笔者目前对于该门课程的教学全程在机房中进行,同时课程的实践学分比例占比在60%左右,改变了以往以理论为主的教学模式。实际教学中,通过PPT并辅之以其他教学软件,先向学生初步讲解各数据结构的特点及存储方法;然后重点以实际的现场代码演示来讲解分析数据结构的各操作及算法,演示过程中,会着重启发学生的思考,如教师先给出部分代码,让学生思考后,再由学生完成后续代码,再比如教师先用顺序存储完成代码的编写,然后要求学生再使用链式存储去完成同样的算法;最后一定会留有充足的时间,让学生实际演练并给与及时的指导。同时对于学习有余力的同学,会留有难度较高的习题让他们思考并完成,针对有意向参与编程竞赛的同学,也会融入编程竞赛的真题,并着重介绍编程竞赛中常用的算法,让学生学完这门课后,能从容参与各项编程竞赛中;在上课过程中,针对学生普遍存在的共性问题,教师及时加以讲评,绝不把问题留在下节课,也绝不让问题挤压,充分保证了当天的学习效果。教学实践证明,学生学习的积极性有了显著提高,学生运用数据结构解决实际编程需求的能力也得以增强。

2.3 教学内容的选取

针对应用型人才培养的特点及学生学习基础相对薄弱等现实因素,笔者在实际的教学中,摒弃了一些实践性不是很强的教学内容,如B+、B-树、广义表、堆排序等内容,上述内容一方面在实际的编程中应用范围不是很广,另一方面后续课程如算法分析与设计也会涉及到上述内容,这样就能给学生充足的时间和精力去消化数据结构中最基础最核心的内容,在一定程度上避免了贪多嚼不烂的情形,笔者认为这种取舍对于应用型高校来说还是合理的。教学中笔者保留实际编程中应用范围最广的知识点,如线性结构中的线性表、栈、队列、非线性结构中的二叉树、图以及基本的排序及查找等。这样既可以减轻学生的负担,又可以让学生在有限的学时中切实掌握基本的数据结构知识点,达到够用、会用即可。同时在实际的教学中,针对应用型高校学生的特点,不过多阐述相关知识点的推理过程,如介绍二叉树的特性时,只给出二叉树的特点,只让学生记住这些性质即可,一般较少涉及具体二叉树性质的证明与推导过程,这样也能无形中能减少学生的学习压力,而学生的学习效果并不会受到什么影响。

2.4 创新改革教学方式

为了进一步提高学生学习的积极性和主动性,笔者在实际的“数据结构”课程教学中,结合学校打造金课、一流课程等契机,充分利用智慧教学手段,改进传统课堂教学方式,不断创新改革教学方式与教学方法,如探索线上线下混合式教学模式,合理分配课程线上线下的内容与学时,尤其是在课程内容分配时,绝非简单地利用章节来分配,而是根据具体的教学要求、教学内容进行模块化分配,如对于线性表的讲解,笔者将其顺序存储部分内容置于线上教学环节中,让学生通过视频、课堂测验、讨论等环节加以学习,而线性表的链式存储部分则置于线下教学环节,在学生具备数据结构存储思想的基础上,进行类比学习,启发学生对2种存储类型的思考。教学中还积极利用中国大学MOOC平台、慕课堂等多种教学手段,实现对学生学习过程的全程化监督管理。如实际教学中,通过慕课堂发布课堂测验,要求学生在课堂上现场完成,完成后自动实现打分功能,并将每次慕课堂测试的考核严格纳入最终成绩的评定中;再比如,完成一个章节的教学后,就会及时通过MOOC平台发布章节测验,要求学生在规定时间内完成,同时为了激励学生,共设置有2次作答的机会,如果第一次完成得不是很理想,可以申请进行第二次作答,取较高的分数进行记录;同时中国大学MOOC平台还提供了话题讨论等功能,教师可以就重要的知识点设置相关话题,让每个学生都参与讨论,学生在讨论的过程中,取长补短。实践表明,学生的学习热情及学习效果有了很大的提高,尤其是课后作业环节,学生自主完成度及完成质量较改革前传统的教学手段有了明显提升,教学效果得以保证。图1为一学期课程教学的慕课堂线下课堂数据,图2为线上课堂数据。

图1 线下课堂数据

图2 线上课堂数据

2.5 融入OBE工程化教育理念

针对传统“数据结构”课程教学中存在着缺乏工程化教育理念的问题,笔者也在积极探索“数据结构”课程的工程化建设问题。严格按照工程教育认证标准要求,统筹安排,提前部署,进一步推进“学生中心、成果导向、持续改进”教育教学理念的落实,坚持以工程教育专业认证标准为导向开展课程建设。遵循OBE教育理念,开展基于成果导向的育人模式创新与实践研究,解决教育教学改革与创新型人才培养中的重点问题和难点问题。针对“数据结构”课程的工程性特点,与合作企业共同研讨符合工程化的教学内容和教学大纲,同时利用专业现有的实验实训资源,依托行业学院,构建虚拟实验平台,为培养学生的数据结构工程化提供坚实的保障。笔者在实际的教学中还创新了“数据结构”课程的考核方式,以能力考核为导向,倡导过程化成绩评价,采用答辩、大作业、项目演示等考核方式,凸显对学生工程实践能力考核。

3 总结

本文在阐述应用型本科“数据结构”课程教学相关问题的基础上,着重探讨了“数据结构”课程的教改方向,应用上述教学手段和方法对应用型高校提高“数据结构”的教学质量及提升学生的软件编程思维具有一定的积极作用。参考文献:

[1]史婷婷,刘卫华,贺超波.《数据结构与算法》课程改革中应用微信公众平台的实践效果研究[J].信息记录材料,2019(7):137-139.

[2]唐瑞雪.融入计算思维的数据结构教学改革探索[J].福建电脑,2019(8):107-109.

[3]鱼静,夏良,王秀珍.数据结构课程教学改革的探索与实践[J].计算机教育,2019(11):77-80.

[4]赵力衡,李丽华.数据结构课程中面试式教学模式探索与实践[J].电脑知识与技术,2021(14):152-153.

[5]赵存有,陈国晶,常禄.基于OBE理念的课程教学设计研究[J].黑龙江教育(理论与实践),2020(8):70-71.

[6]李金玲,李华新.工程教育视阈下基于OBE理念的混合式教学模式研究[J].软件导刊(教育技术),2019(9):36-37.

猜你喜欢

工程化数据结构编程
数据结构线上线下混合教学模式探讨
世界首台高温超导高速磁浮工程化样车下线
时速620千米高速磁浮工程化样车下线
重典型应用,明结构关系
玩游戏学编程,Blockly Games上手玩
纺织机上诞生的编程
编程屋完成数百元万天使轮融资
学编程,先画画
PLC软件工程化在高端工艺装备研制中的应用初探
PLC软件工程化的管理实践