以培养计算思维为核心的数据结构课程教学改革研究
2020-06-29舒清录廖明梅
舒清录 廖明梅
摘 要:根据数据结构与计算思维的内在联系,分析了数据结构课程教学现状,结合超星学习通,深入阐述在数据结构教学中融入计算思维能力的培养的教学理念与实践,教学实践证明此教学方法对促进学生计算思维的培养有较大的作用。
关键词: 计算思维; 数据结构; 超星学习通; 案例教学法; 拼图教学法
中图分类号: G 642
文献标志码: A
Abstract: In view of the internal relationship between data structure and computing thinking, this paper analyzes the current teaching situation of data structure course, and expounds the teaching concept and practice of integrating computing thinking ability into data structure teaching in combination with Superstar Learning. The teaching practice proves that this teaching method plays a greater role in promoting the cultivation of students computing thinking.
Key words: computational thinking; data structure; superstar Learning; case teaching method; jigsaw teaching method
0 引言
数据结构是一门非常重要的计算机专业必修课,其上承高等数学、C语言程序设计和离散数学,下启操作系统、数据库原理、编译原理、人工智能课程,在国家的课程体系中,是一个单独的知识领域,是学生提高软件设计水平的一门关键性课程。数据结构通过分解与抽象[1],构造出数据模型,写出高效的算法,最后通过某种计算机语言来实现、解决现实问题。数据结构的学习过程就是算法构造性思维方法的训练过程,可以培养学生的数据抽象能力、算法设计能力以及创造性思维能力,而这3种能力可以理解为计算思维能力[2]。但由于数据结构课程的复杂性、抽象性、课时少等综合原因,导致老师不好教,学生不好学,特别是学生在计算思维方面的培养不被重视或得不到有效的体现。本文针对此问题,讨论如何在数据结构的课程教學中更好地融入计算思维融,使课程的教学达到预定的教学目标。
1 计算思维的内涵
计算思维由来已久,早在公元前3000年中国人发明的筹算和唐末的算盘[3],是计算“算法化”思想的典型代表。计算思维被广泛认同,还是2006年周以真(Jeannette Wing)教授在Communi-cations of the ACM上发表的“计算思维”。周以真指出计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动,其本质内容体现了抽象、约简、规划、关注点分离、递归、优化、分解等思维特征[4]。随后我国学者也对此进行了相关研究和实践,例如:李国杰院士对计算思维给予高度重视,并指出计算思维的培养是克服狭义工具论的有效途径,是解决其他信息科技问题的基石[5]。陈国良院士和李廉教授发起并组织了若干次关于“计算思维”的研讨会,对什么是“计算思维”及计算思维与理论思维、实验思维的关系给出了科学的论述[6]。孙家广院士在《计算机科学的变革》一文中明确指出,(计算机科学界)最具有基础性和长期性的思想是计算思维[7]。冯博琴指出在课程中培养计算思维能力,关键是要提炼并展现隐藏在知识背后的计算思维的光芒,引起学生求知欲望和心理共鸣[8]。2010年《九校联盟计算机基础教学发展战略联合声明》强调把“计算思维能力的培养”作为计算机基础教学的核心任务[2]。计算思维是一种基本技能,就像读、写、算能力一样必须具备的思维能力,也是一种问题求解的思维,是人人必须掌握的。
2 数据结构课程教学存在的问题
2.1 课程内容多且抽象,学习难度大
数据结构课程内容多,涉及到线性表、树、图、查找、排序等内容,光排序就十多种,涉及到的算法很多且还难,理解课程的概念、模型以及算法实现需要较强的逻辑性和抽象性。有些理论无法通过其他手段直观展示出来,有些还涉及到动态规划、分治法、贪心法等解题策略,给课程教学带来了一定的难度,被大家认为是难学课程之一。
2.2 先导课程基础不牢靠
离散数学和程序设计语言是数据结构的先导课程。程序设计语言一般开设在第二学期,学生基础薄、学时少、教师重知识点传授,使学生缺少思维能力培养,直接影响到数据结构的教学。通过对本校前几届上百名学生的课程相关性数据挖掘时间,发现程序设计语言和离散数两门成绩都优秀导致数据结构优秀的支持度为21.1%,置信度为70.2%,表明两门先导课程会直接关系到数据结构课程的教学效果。特别是程序设计语言课程,教学常常陷入重语法轻算法的误区,再加上对数据结构常用的知识(结构体、指针和递归等)存在或多或少的理解困难。以上这些问题最终课程教学效果不佳,学生学习兴趣不高。
2.3 传统的教学模式弊端较大、实训环节薄弱
在传统以“教师为中心”的教学模式中,计算思维能力的培养是隐形或是教师一笔带过的,需要靠学生自己去体会。教师没有把算法的思想和过程说透,结合实际问题太少。这些都会导致学习效果不佳,学生的创造性思维、自主学习能力得不到重点锻炼。
由于课程本身较强的逻辑性和抽象性导致难度较大,算法思想问题就已经让学生望而生畏,再加上学生程序设计基础一般,即使有现存算法,也不一定能顺利将算法改程序,久而久之,就会对编程失去兴趣。更有部分学生认为此门课程是纯理论课程,导致学生在思想上对此门课程重视不够。没有通过实践证明的理论,学生是没有办法真正去理解的。
3 基于计算思维能力培养的课程教学改革
3.1 重视思想内因,开启计算思维之门
教师是教学改革实施的起点,教师的观念和态度决定教学改革的效果。长期以来,教师是课堂的主角,学生只能被动听,缺少自主思考能力培养,导致教与学的成效不高。而基于计算思维能力培养的课程教学设计,要求教师花费更多的时间去研究、解决很多实际问题,比如:如何围绕教学目标和学生实际情况,设计合理有效的教学计划;在课堂教学中,教师如何充分发挥学生的主体,激活每个学生的思维,调动学生主动探究的积极性;如何营造环境,精准服务学生;如何敏锐地抓住课堂新生成问题,推动思维的灵活迁移,促进课堂讨论进一步深入;如何让学生在课后对课堂内容进行拓展,及时了解学生的意见反馈,为课程的持续改进收集数据等。
学生的心态和思想也很重要,需要引导和保持,教学的终极目标就是为了学生在知识和能力上得到一定的锻炼。数据结构是一门承上启下的重要专业课程,需要学生一定的数学思维和计算机编程基础,理论性和实践性都非常强,对大部分学生来说遇到挫折是必然的。在整个教学环节上,需要教师对学生的思想进行教育、引导,帮助学生克服学习困难带来的挫折或解决问题时存在的思维误区,防止学生破罐子破摔。
3.2 情境化和趣味化内容,助力计算思维实施
数据结构每章的知识点独立且多,选择合理的教学案例把尽可能多的内容串起来,对提高学生学习兴趣和学习效率有很大的帮助。选择案例应该符合贴近生活或专业实际,要充分考虑学生之间的个体差异(案例应设多个等级,便于不同层次的学生选择,也便于进一步启发学教学),案例充分反映所研究的数据结构且尽可能覆盖多的知识点原则,案例的个数不宜多例在精而不在多(精心设计,层层剖析,逐步深入)。每章设计的情境化和趣味化案例,如表1所示。
3.3 多种教学方法并行混用,强化计算思维训练
针对课程情况,数据结构课程教学以案例教学法为主线,在案例教学中启发学生思维,适时采用拼图教学法,组织学生3-4次小组讨论。
案例教学法:是围绕教学目标,在教师的指导下,让学生对呈现的典型案例进行讨论分析、归纳总结,从而培养其思维能力的一种新型教学方法[9],更强调学生的主体地位。
启发式教学:是通过在教学中适当设置问题,引导学生去思考、解决问题,以提高学生学习兴趣和主动性的教学方法[10],是学生发展智能和主动地获取知识的一种双向教学方法。此法能充分发挥教师的主导作用,最大限度地调动学生积极性,让学生在不自觉中开展思维活动,使教与学相互协同促进。
拼图教学法:是一种被实践证明过的有效的合作学习法,非常有助于培养学生的自学能力,自主学习培养,强化协同工作。作为一种合作式学习方法,拼图教学法提出后一直被众多的学者和教师广泛研究[11]。其核心做法是:(1)教师把学生分成N个小组;(2)教学内容也分成N份;(3)让每组的每一个学生承担一个教学内容进行学习;(4)相同内容的学生组成专家学习小组进行学习;(5)专家组学生返回原来小组,轮流教授自己掌握的内容;(6)教师对所有学生进行所有内容进行测试和评估。此教学模式对激发学生积极性和主动性,培养学生分析解决问题能力、语言表达能力、以及发扬团队合作精神都是大有帮助,但是要求教师对教学时间的把控、任务分割的合理性和人数控制等比较高,应当合理控制使用次数。
3.4 重视实践环节,促进计算思维升华
无论是理论教学还是实践教学,可能在方式和侧重点上不同,但以培养学生解决实际问题、抽象能力为终极目标的理念是一样的。亲自动手编写、调试程序,不仅提高编程能力,解决问题,更能促进计算思维升华。
考虑到各方面的情况,将实验分为基础训练和综合性实验两部分。基础训练部分分步骤引导学生在问题解决过程中逐步完成编程训练,记录实验中出现的问题与实验结果,对问题分析原因,从而培养学生基本的计算思维能力。而综合编程部分则是针对某些现实问题求解,学生发现问题,提出新问题,教师进行必要引导,重在对学生的应用能力和创新意识进行培养。如果实现难度大、任务多,可采用小组协作完成,通过群策群力来发挥学生主观能动性。
上机指导过程中,教师的作用重在启发,引导学生自己找到问题的根源。学生在上机过程中,记录好错误的原因以及解决办法,使自己更深刻地理解、归纳总结相关知识。
3.5 合理利用现代教学工具,深化教学模式改革
超星泛雅一平三端网络教学云平台,同时支持教师端、移动端和管理端,这三端分别对应课堂教学、学生自学和教务管理,涵盖了课前、课中、课后、日常教學全过程。课堂中使用包括如投屏、随机提问、课堂小测试、在线问卷等多种课堂教学功能,后台基于大数据分析,把学生参与教学的数据可视化,帮助教师进行数据统计。为课程的教学改革提供了良好的支撑,助力教学质量提高。
3.6 计算思维在教学中的实践
教学案例:哈夫曼树及其应用。
课前,通过布置一个常见的现实问题,让学生思考并试图提出解决方案,并从多种方案中选择一个最优方案。围绕这个任务,引导学生将问题分解和简化,得出一个数学问题,总结出问题的已知、未知量,然后引导、启发学生推理出求解问题的方法和途径。
课中,教师进一步引导、启发学生进一步深入求解问题的方法,逐步引导学生挖掘出藏在问题背后的模型,为待解决的问题抽象出一个计算模型,并在此模型上进行扩展和新的应用。任务完成后,教师运用计算思维的递推方式对整个过程概括和分享。
课后,通过上机实践,让学生真正理解计算思维的分解和抽象的本质,把新旧知识进行融合,反过来促进计算思维的升华。
3.6.1 课前任务布置
[案例描述-阶段1]输入一个100分制整数成绩求其对应的等级,如表2所示。
通过自主学习,试完成以下内容:
(1) 写出至少3种不同的实现算法,并要求画出判定过程?
(2) 分析不同算法的性能,指出哪种实现算法最好,以10 000个样本数据计算。
(3) 通过看微视频和教师指定的Mooc资源,了解为什么哈夫曼树又叫最优二叉树?
(4) 结合成绩求等次的判定过程,分析与哈夫曼树的关系。
(5) 完成一次课前测试,把完成作业和出现的疑问发布到超星平台。
3.6.2 课中发挥教师的主导性和学生的主体性
(1) 检验学生学习成效和解答问题
教师通过超星学习通投屏,对学生提交作业和测试情况进行评价。根据学生完成情况给与一定的积分并计入过程考核总成绩,肯定学生的努力。对学生提出的疑问尝试让学生间回答或抢答,最后教师对一些难以回答的内容进行补充和总结。
(2) 引出主题,探讨算法实现
1) 在所有实现中,哪位同学的方案较好,为什么?
2) 还有更好地方案吗?当前只有5种等级状态,如果有n种状态呢?
3) 能否看出一些规律?
4) 教师正式提出并重新认识哈夫曼树。通过成绩等级转换小案例,把权、路径长度、最优二叉树、哈夫曼树算法、哈夫曼编码等主要问题进行阐述。
5) 课堂小测试,判断{00,0,01,10,11}和{00,01,100,11}能否构成哈夫曼树?总结哈夫曼树的特点。
(3) 案例逐步升级,进一步启发学生
[案例描述-阶段2]对一段较为简短且只包含小写字母的字符串文件,为每个字符编制编码,并对给定的1/0序列进行解码。
对问题进行分析,分解成确定字符的频率、建立哈夫曼树、编码、译码步骤。教师引导学生进行思考,逐一解决各个步骤的问题。
[案例描述-阶段3]将任意的英文文件进行压缩和解压缩,计算压缩比。
由于阶段3是阶段2的升级,所以只需要学生讨论、探究一些重要的问题,比如:
1) 如何统计每种字符出现的概率,有更快的方法吗?
2) 比如a字符的编码为100,如果直接存储a只需要1个字节,但是存100需要3个字节,起不到压缩的目的,如何达到压缩目的?
3) 压缩后的文件应该有哪些信息,才能正常解压?
4) 如何计算压缩比?
3.6.3 课后巩固,反馈教学
[实践内容]将阶段3的内容使用C#、Java等GUI编程实现。
经过上面的讨论和探究,学生对问题有了一定的了解,计算思维得到一定的锻炼,但如何将学生领悟到的知识进行自我消化,把新旧知识进行融合,反过来促进计算思维的成型?最好的答案就是上机实践。所以教师应组织学生利用课外以团队形式进行开发实现,最后将实现的算法流程图和程序截图发布到超星平台,供其他人学习或评价,教师对学生完成的任务进行评价和定成绩,计入总评中。
4 总结
计算思维作为一种解决问题的方法和能力,是每个人应当具备的基本能力,也是近年来研究的热点问题。数据结构是一门重要的基础课,同时也是进行计算思维训练的重要工具之一。所以加大、重视数据结构课程的计算思维培养是很有必要的。经过一段时间的教学实践表明,在超星等现代教育教学工具的助力下,结合多种教学策略,将计算思维融入数据结构课程教学实践不仅能提高教学质量,同时对激发学生兴趣、学生自主学习和解决问题能力有很大的帮助。通过上机实践、巩固、验证和消化算法,进一步加强学生的动手能力,促进计算思维的培养。这种教学模式对其他程序设计类课程也有一定的借鉴意义。
参考文献
[1] 张青,王囡囡.工程软件开发技术[M].北京:北京理工大学出版社,2016.
[2] 邓红卫,赵磊,田小梅,等.以计算思维为导向的数据结构课程教学改革和实践[J].福建电脑,2017(8):78-79.
[3] 管会生,杨建磊.从中国“古算”到“图灵机”——看不同历史时期“计算思维”的演变[J].计算机教育,2012(6):121-125.
[4] Jeannette M Wing. Computational Thinking[J].Communications of ACM,2006,10(3):33-35.
[5] 陳国良,董荣胜.计算思维与大学计算机基础教育[J].中国大学教育,2011(1):7-11.
[6] 王啸楠,雷大正.基于大数据过程评价的计算思维C语言混合式教学模式探究[J].赤峰学院学报,2018(4):145-147.
[7] 石云.“计算思维”带给高师院校计算机教育的机遇与挑战[J].中国校外教育,2012(7):167-168.
[8] 钟红艳.数据结构课程计算思维能力培养的思考与实践[J].计算机教育,2014(5):1-4.
[9] 关秋,陈梅.案例教学的理论研究综述[J].教育与职业, 2011(20): 145-146.
[10] 董丽薇.“数据结构”课程教学方法的改进[J].沈阳师范大学学报(自然科学版),2012(4): 307-309.
[11] 陈昌兆,王兵,张晓森.拼图式教学法在原子物理学课堂教学中的应用研究[J].大学物理,2015(4):47-56.
(收稿日期: 2019.08.12)