摘 要: 文章基于应用型本科人才培养的现实背景,对数据结构课程的培养方案、教学方式和考核方法进行了改进,提出了一种算法实践能力的强化方法和考核方案。该方法结合数据结构、数学的知识点和编程技术等,促进学生掌握相应的理论知识,提高算法实践能力;对应的多样化的考核形式也更加激发学生的学习热情和兴趣,并能够从多个角度反馈学生的学习情况。
关键词: 数据结构; 应用型本科; 人才培养; 算法实践能力
中图分类号:TP311.13 文献标识码:A 文章编号:1006-8228(2020)11-95-03
Abstract: Based on the practical background of application-oriented undergraduate talents training, this paper improves the training scheme, teaching method and assessment method of data structure course, and proposes a method and assessment scheme to strengthen the algorithm practice ability. The method combines with the knowledge points of data structure and mathematics, and programming technology to promote students to master the corresponding theoretical knowledge and improve the algorithm practice ability; the corresponding diversified assessment forms also stimulate students' enthusiasm and interest in learning, and can also feedback students' learning situation from multiple angles.
Key words: data structure; application-oriented undergraduate; talent training; algorithm practice ability
0 引言
数据结构课程作为一门计算机相关专业的核心基础课程,与其他基础课程一样,具有理论性强,内容抽象,知识点多而复杂的特性。数据结构是计算机专业教学中的关键课程,也是构建高效率算法的必要基础,所涉及的知识在相关专业的课程系统中始终处于核心位置。近些年,数据结构课程的实现语言不断发展,从Pascal到C、C++、JAVA,甚至Python语言。语言越来越先进,讲授的内容越来越精简,但是数据结构技术应用实践仍然是一个令学生头疼的事情。无论老师采用什么语言讲授,对于学生而言,数据结构的理论知识依然比较晦涩难懂,无法从抽象的理论知识向具体的代码顺利过渡,这是一个很现实的问题。
针对上述现象,很多专家和学者进行了数据结构课程的教学研究和改进。主要有将数据结构实践教学分为七个步骤的螺旋式教学过程[1],将理论性、实践性和娱乐性有机结合采用教辅系统的方式[2],在课程中引入项目驱动教学方法[3],对实验教学目標和内容进行了分层设计的教学方法[4]等等。
在应用型本科高校转型发展的现实背景下,很多高校都在由传统形态大学向应用技术型大学转变。转型的本质是让培养的学生更加符合社会经济发展的需要,而转型的核心是人才培养模式的改革,培养真正的应用型人才。
在原有多样化的教学方式中,继续改进一种更适合应用型人才的培养方案,提高学生双向重构的能力,既能对新知识进行构建,也能够对原有知识和经验进行改造和重构。以能力培养为核心,辅以基础理论知识,更注重知识的综合运用。并在此基础上,设计一种针对培养应用型人才的数据结构课程的考核方案以适应新的改革需要。改变末端考核为过程考核,改变单一评价为多元评价,更加重视运用知识解决实际问题的能力考核。
本文在参考上述相关研究后,在原有多样化的教学方式中提出一种算法实践能力强化的方法,更加适合于应用型人才的培养方案和考核方案,在采用以往多元化的教学方法如启发式教学、任务驱动式教学、项目驱动式教学等的基础上,引导学生亲历从数据结构到算法,从算法到程序的过程,使学生明白算法与程序不等价,理解数据结构和算法的关系, 明白算法和程序之间的区别和联系。实现对新知识和新信息的构建,重构原有的知识和经验,强化其算法实践能力。
1 算法实践能力强化方法的提出
1.1 算法实践能力强化方法
算法实践能力的强化是构建在多个条件之上的:数据结构的非数值数据集及存储结构、数学知识、技术、阅读和模仿、调试。
⑴ 非数值数据集及存储结构。数据结构课程研究的是非数值计算的数据元素和它们之间的关系,以及运算问题。因此,针对数据结构算法实践能力的培养,在程序设计中也是以非数值数据集的运算为主。
⑵ 数学知识。算法的编程实现,需要有流程。这个流程与数学有关,只有掌握了数学原理才能把实际问题抽象为编程算法。所以,算法实践能力也与数学基础的好坏有关。当然,数学不好也不必灰心,因为这两者可以相互促进,学好编程也可以督促和带动数学的学习。
⑶ 技术。算法实践的关键是技术,而不是知识,更不是结构和语法。但技术的实施是构建在非数值数据集及存储结构知识基础之上的。
⑷ 阅读和模仿。提高编码的能力,最容易想到的一个方法就是编写更多的代码。还有一种能提高编码能力的方法就是阅读别人的代码,这个方法能让自己的编程能力得到明显的提升。在模仿前先分析算法,尝试独立编程,得不到结果也没有关系,重点是促进思考。然后再去研究经典案例的代码,分析其算法和实现方式,跟自己编写的代码相比孰优孰劣。最后,再次完善自己编写的代码,查看运行结果。
在学习过程中,多找经典案例,先模仿经典代码编写。一开始编写能力也许不会明显提高编码,可能感觉没有太大作用。有时候即使对照着输入也不能得出正确的结果,这种情况,大多数是在细节上没有做好,比如漏掉了小符号或汉英不分,标点符号或者大小写的问题等。多次模仿会逐渐地纠正编程的坏习惯,从而养成注意细节的好习惯。
⑸ 调试。算法实践能力的培养,还需要学会调试,比如最基本的断点,去调试代码,然后就会发现自己认为很严谨的算法和代码其实存在很多问题。在此基础上继续修改,再次调试。等得出结果后,就会获得很强的成就感。
本文提出的算法实践能力的强化方法就是结合数学知识,运行相应的软件开发工具,结合通过抽象-联想法[5]理解掌握数据结构的理论基础知识,不断的阅读和模仿程序、调试程序,以达到解决问题的目的。
1.2 数据结构课程考核方案的改进
学生课程的考核是整个教学活动中十分重要的一环,对学生的教育和培养起着举足轻重的作用,而且对教学发挥着指挥棒的功能。传统的计算机专业基础课程的考核方案一般都是受到传统授课模式和考试模式的影响,以考试为主。专业基础课的考核,不是为了甄别、选拔学生,而是为了促进学生在专业技能上的全面发展。以考试为主的传统评价方式,容易让学生养成开学松懈,期末紧张,突击复习的状态。而这远远达不到应用型人才的培养目标。
考核方案的设置必须由专业教师在课程建设过程中商讨来确定。课程考核要求尽早告知学生,让学生有一定的心理准备,让他们从一开始就能够意识到该课程的考核不是“一考定终身”,而是全方位的考核。如此学生就可以在课程学习的开始就注意自己在各個方面的学习和表现。考核形式和方法的多样化,可以激发学生的学习热情和兴趣,并从多个角度反馈学生的学习情况。我们对学生在该课程的成绩评定过程中实行综合的评定方法。如表1所示。
调整之后的考核方案中,平时成绩包括考勤、课堂表现、回答问题考核、作业考核、平时上机实验考核、上机学习态度等;期末考试由闭卷笔试完成,主要以考查知识点的理解和运用为主;上机考核以实际的情景题引入问题,考查学生如何利用所学的理论知识解决实际问题。
在该方案中可以明显的看出应用型人才的培养更加看重学生上机实践的训练。表面上看仅仅是增加了上机的比重,但是经过前期的大量调研,参与数据结构课程建设小组的老师多次讨论并修改了教学大纲,在授课过程中强调算法的重要性,增加算法的讲解和练习。针对应用型本科人才的培养方案,最终形成了多样化的考核模式。
2 算法实践能力强化方法的实施与效果分析
2.1 算法实践能力强化方法的实施
在数据结构课程中涉及的知识点较多,数据元素相互之间的关系分为一对一、一对多、多对多,涉及到线性表、栈、队列、树、图,以及对这些结构的各种操作,如创建、插入、删除、查找、求长度等。在讲授过程中,这些信息都是逐渐被学生所接收和理解的,对于掌握不是很好的学生而言很难将这些信息串联起来,形成一个系统的知识体系。因此,要求专业教师在平时的授课过程中采用各种教学方法和手段将所有的知识点进行系统讲解,使学生能够面对实际问题进行分析时,能条件反射似的运用数据结构课程里的知识点。然后以程序员的设计思路对问题进行总体结构分析,甚至于设计相应的用户界面。这个过程本身也是软件设计的综合训练。
在算法实践能力强化方法实践的过程中,要求学生进行下面一系列的学习步骤。
Step1:问题分析和任务定义;
Step2:数据类型设计和系统设计;
Step3:编码实现和静态检查;
Step4:上机准备和代码调试;
Step5:总结任务、整理实验报告。
上述学习步骤实施后,效果均可以在解决实际问题中得以体现,这些实际问题包括学生信息管理、航班信息查询与购票、银行排队、回文数猜想、约瑟夫问题、停车场管理、魔方阵、本科生导师制问题、家族关系查询、地铁建设、校园导航等。
授课老师在讲授数据结构的基础知识之前,会依据学生的具体情况进行分析和讨论,有针对性的调整方案和实验内容,以符合当前学生的实际情况。在学习过程中,授课老师会在课堂里依据学生不同的学习状态采用合适的教学方法,如“引导式”、“启发式”、“项目代入法”、“抽象-联想法”、“情景案例”等。一般对于理论基础型的课程,我们建议采用自底向上的方式进行学习,但是对于算法实践能力的培养,我们建议采用相反的方向即自顶向下的方式进行学习:先了解前沿技术和发展方向,读取经典的优质开源学习资源和优质代码,参考最佳实践,总结各自学习内容作为知识输出。以实例驱动学习,只关注编写的代码能够做什么能够实现什么。坚持下来,就可以在算法实践能力的强化方面有长足的进步。
2.2 算法实践能力强化方法实施的效果分析
以我校作为二本院校实施的应用型人才培养为例,2018年-2020年期间对17级、18级本科近千名计算机学院学生的数据结构课程进行了算法实践能力强化方法的教学建设和改进,也以此对该课程的考核方式进行了调整。经过三年的尝试,学生在学习过程中也遇到很多瓶颈和疑惑,我们对出现的问题进行分析和讨论,及时调整方案和考核方式的具体实施细节,使得学生在数据结构的学习效果和算法设计和编写能力上得到了显著的提高。在2017年未实施算法实践能力的方法和考核方案,学生的编程能力普遍比较薄弱。2018年开始实施后,虽然学生的整体水平与往年相比不占优势,仍然取得了一定的效果,如表2所示。
从表2可以看出,在对已有的教学方法改进之初,所取得的成绩没有很明显的变化。和编写程序一样,只有根据学生的具体情况不断的调整调试,不断地改进,才会使学生更加容易掌握理论知识,进而提高其编程能力。
3 结论
本文针对数据结构课程的算法实践能力强化方法进行了研究和实施,完成了以下工作:
⑴ 对数据结构涉及的知识点和相关算法进行了相应的教学方法的完善和改进;
⑵ 提出了一种数据结构课程的算法实践能力强化方法和对应的考核方案;
⑶ 数据结构课程组的教师用三年的教学实践,摸索出提高计算机专业学生的算法实践能力的教学经验。
重视算法设计考核模式,不仅有利于培养学生的优良学风,减轻学生畏惧学习数据结构、畏惧编程的心理,而且由于考查的知识点多且知识面宽,对学生的总评成绩更客观。这种考核模式学习既能体现专业基础知识的重要性,也能体现出综合能力培养的重要性,同时,对任课教师也提出了更高的要求。专业教师不仅要对专业内容要有很深的理解,同时还需要紧随社会、行业的需求,精心准备专业内容,有针对性地对学生进行综合训练和培养。
参考文献(References):
[1] 张玉华.数据结构课程实践的螺旋式教学[J].计算机教育,2019.8:98-102
[2] 张瑞霞,周娅,唐麟.基于数据结构教辅系统的实验课程改革[J].计算机教育,2016.4:68-70
[3] 陈娟,殷鹏.数据结构与算法综合实践教学设计与实施[J].办公自动化,2018.23(23):18-20
[4] 张华,张淼,张岩,初佃辉,郑宏珍,张策.数据结构实验教学研究与实践[J].实验技术与管理,2018.35(5):218-221
[5] 肖璞,叶传标.抽象-联想法教学模式的探索与实践[J].三江高教,2013.4:15-18