基于计算机思维的数据结构课程的改革
2019-09-19陈萱华
摘要:数据结构课程改革的重点是培养学生的计算机思维。算法的设计、实施最能体现计算机思维。数据结构课程教学应从技巧教学中抽离出来,以问题的抽象、算法的构造及实现为重点,结合丰富的生活实例,培养学生工程化思维、抽象思维、逆向和分治思维及即时反馈思维等计算机思维,实现数据结构课程教学的跨越式发展。
关键词:数据结构;课程改革;计算机思维;工程化思维;抽象思维
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2019)20-0102-03
开放科学(资源服务)标识码(OSID):
Abstract:The focus of data structure curriculum reform is to train students'computer thinking. The design and implementation of the algorithm can best reflect the computer thinking. The teaching of data structure course should be separated from the teaching of skills, focusing on the abstraction of problems, the construction and realization of algorithms, and combining with abundant living examples, training students'computer thinking such as engineering thinking, abstract thinking, reverse and dividing thinking and instant feedback thinking. The reform will achieve leapfrog development of data structure course teaching.
Key words:data structure; curriculum reform; computer thinking; engineering thinking;abstract thinking
數据结构是计算机相关专业的核心基础课,也是管理类、通信类专业的必修课程,是计算机相关研究的理论及编程基础。在数据结构课程中培养计算机思维,并引导学生学以致用,将会使学生更深刻地理解计算机的本质,形成计算机思维的思想与方法论。
1 计算机思维概述
计算机思维是一种思维过程,也是一种思维活动,即人们有意识地应用计算机解决问题的原理,去分析与解决现实问题的一系列思维活动。[1-2]计算机解决问题的过程具体包括以下步骤:通过分解现实中的具体问题,抽象出适当的数学模型,识别数据,定义数据结构,构建算法,测试分析并进行性能评估,最终呈现出一定的问题解决方案。[3]
计算机思维是有助于人类认识世界和改造世界的思维方式。管理学界认为计算机编程知识及其思想是理解新技术、新服务和新商业模式的第3只眼睛。[4]国外前些年已经开始强调在小学生中培养计算机思维,国内近两年面向小学生的程序设计课程也开设得如火如荼,目的就是为了从小培养孩子的计算机思维。
2 数据结构课程中计算机思维培养的现状
2.1 对计算机思维的重要性认识不足
虽然计算机思维已经深入到我们生活的方方面面,我们也都在自觉不自觉地应用计算机思维,但人们对计算机思维的理解仍然只停留在表层,计算机思维并未得到真正重视。很多人也没有意识到生活中的这些应用就是计算机思维。有些老师可能对计算机思维还没有清晰的认识,没有认识到计算机思维是人特别是大学生必备的思维方式之一。担任数据结构教学时,也没有深入认识数据结构的本质,没有发现数据结构背后的计算机思维的价值,没有考虑计算机思维对学习、工作和生活的深刻影响。
2.2 对计算机思维的培养重视不够
目前任何一个行业都离不开计算机,为了促进就业,都开设了计算机相关课程,但更多的只是为了掌握计算机的应用,对计算机思维的培养重视程度不够,主要表现在以下三个方面:一是数据结构课程教学改革的重点放在培养学生的计算机技能,而不是计算机思维;第二,孤立地看待每一个算法;第三,计算机思维的培养仅仅局限在课堂。
开展数据结构教学时,很多老师徘徊在教学舒适区,按照自己多年形成的习惯去教学,不转变教学思路,不去钻研新的教学方法,没有花时间去思考、归纳课程中相关的计算机思维,数据结构课程没有与生活实践紧密结合,往往就数据结构讲数据结构,见山是山,见水是水,最后只能是培养学生的计算机技能。很多老师认为,学生掌握了计算机技能也就完成了教学任务,也有老师认为,掌握了计算机技能,也就掌握了计算机思维。没有钻研的动力,缺乏与生活的联系,导致计算机思维的培养得不到很好的落实。
3 基于计算机思维的数据结构课程改革
数据结构课程概念多、内容抽象、算法复杂,实践课时少,学生容易产生畏难情绪,传统的课程考核模式也不利于调动学生的积极性。其实,开设数据结构课程的目的不仅仅是学习和掌握相关知识和算法,更重要的是通过学习获得思维方式,更好地理解人类的思维,掌握做事方法。因此,数据结构课程改革的重点是培养学生的计算机思维,通过人的认知思维和计算机思维的互动,结合实际例子,有助于培养学生的成长型思维,提高学生的学习兴趣,加强主动学习意识。将计算机思维的培养放置于核心位置, 在实际的教学过程中不断向学生渗透计算机思维, 将会极大提升数据结构课程实施的质量。
数据结构包括堆栈、队列、树、图等抽象数据类型,涉及逻辑结构、存储结构及基于不同存储方式的运算等三个方面。算法的设计、实施、算法的时间效率和空间效率等都能体现计算机思维,体现问题求解、系统设计及人类行为理解等一系列计算机思维活动。
计算机思维是全方位的,不可能通过这一门课程全部掌握,需要不断的提炼,并通过和认知科学的互动不断发展。表1所示是部分知识点重点培养的计算机思维。
下面介绍数据结构课程改革中重点培养的几种计算机思维。
3.1工程化思维
算法设计和理论研究不完全一致,算法设计最终要落地实施,会受到很多约束条件制约,涉及具体环境、客户需求及体验等,讲究可行性,还得考虑成本,即有用、用得起、体验好,还要安全可靠,不容易被黑客攻击。工程化思维是算法联系现实世界的重要纽带,工程是不可逆的过程,它与各种不确定、风险并存,工程化思维特别要处理好以下两个方面的关系。
(1)处理好大和小的关系。问题规模的增大会导致性质的变化,问题达到一定程度后,不再是同类问题的放大,变成了另一个问题,需要的解决方案完全不同,要求我们学会转化思维模式,这样在旧问题已经转变成新问题时,可以更好地去应对。数据结构介绍复杂度的表示时培养学生量级意识:小量级或小量级的常数倍和大量级并存时,必须忽略前者。一个好的工程师,要懂得把精力放在从量级上改进工程方法,如排序算法规模增大时,算法优劣的计算量天差地别。提醒学生写小规模算法时就要重视算法的优劣,努力设计较优算法,不能因为计算量小就无所谓。生活中遇到复杂问题时要有拆解的能力,能够梳理出其中各个因素在量级上的不同,把那些无关紧要的事情先从清单中删除,而不是碰到什么问题就先解决什么问题。
(2)处理好成本和性能的平衡关系。在数据结构分析算法的时间复杂度和空间复杂度关系时,强调在时间复杂度和空间复杂度之间找到平衡,可以结合一些现实的工程问题培养学生的工程化思维。[5]人类很多时候强调对错,喜欢要求最好的结果。但是,从工程的角度讲,好和不好只是在特定的条件下相对的表现,往往没有全局最优解。计算机里面无论是软件设计,还是硬件设计,都在平衡性能和成本的关系。如语音识别,往往识别率提高一点点,付出的成本可能是几倍甚至几十倍,因此用户通常在容错的范围内达到最好即可。我们每天都在做许多的选择和决定,小到去哪里吃饭,大到人生的重要决定,所以很多人都自嘲有选择困难症。这是因为现实世界是复杂的,有很多问题都是不确定的,加上有时信息不透明,而且人也不可能掌握所有的信息,面对百度中海量的信息,为了把事情做好,应该什么时候停止搜索开始利用这些信息呢?关键是在各种错综复杂的体系中求得一种平衡,如果等到信息搜集整理全面、期待获得最优解,事情可能永远没有开始的时候。
3.2 抽象思维
抽象是人类认识复杂世界最强有力的工具之一,它从具体事物中抽取、概括出共性和本质的属性,暂时屏蔽非本质的、细节的部分,有助于我们集中注意力,抓住重点,通过按层次分解抽象,能够将复杂的问题简单化。抽象思维是计算机思维最本质的特征,抽象可以完全用符号表示,这就要求在抽象的过程中进行精确的符号化和建模。[2]
数据结构课程有大量的抽象概念,围绕抽象数据类型研究它们的逻辑结构、存储结构及其运算,如树、图等是数据结构课程中重要的抽象数据类型,但它们不能像基本数据类型那样进行简单的加、减、乘、除运算,这些内容学生不容易理解,教师们在讲解过程中可以采用形象化、结合现实生活精心设计案例等方法讲解,进而培养学生抽象思维的能力。
3.3逆向和分治思维
通常情况下,人们习惯采用正向思维,如计算n!,根据定义计算,n!=1*2*3*…*n。但对于复杂的问题,用这种正向思维方式可能没有办法解决,如“八皇后”问题,这时可以试试逆向思维方式,问题就会迎刃而解。如n!也可以采用逆向思维方式计算,即n!=n*(n-1)!。这种程序调用自身的编程技巧称为递归,递归的本质是自上而下通过调用自身而层层展开,并利用堆栈保存上下文,再不断重复自下而上一步步回溯,堆栈里的数为空时递归结束。递归层层展开时常常结合分治,因为复杂的问题能解决的人不多,碰到复杂的问题通过分治抽象变成相似的规模小一点的问题,经过逐级分解,问题规模越来越小,能解决的人就越多,工作开展就方便,效率提高,水到渠成。
《数据结构》课程介绍堆栈的应用时强调递归的作用,介绍递归算法的快速排序时可以结合管理团队的应用,引导学生思考:假设你带领一个团队,结合计算机思维如何带好团队?带好团队可以综合采用计算机思维中的递归、分治、规范化等。首先要建立一个规范,使这个团队有共同讨论的基础和共同遵守的原则,再通过逐级授权,授权相当于计算机思维中的分治,领导带头树好榜样,把自己好的工作方式和工作作风传递下去,上行下效,你怎么做,下属怎么做,这样不断递归,就能形成团队强大的合力。计算机教学需要让学生掌握如何采用抽象和分解来控制庞杂的任务或进行巨大复杂系统设计的方法。
3.4 即时反馈思维
选择结构的分支走向就是即时反馈的结果,因此随处可见反馈,数据结构课程也不例外。如二分查找就是典型的即时反馈实例。心理学研究表明,做任何事情,有反馈和没有反馈的结果,有着巨大的差异,通过反馈,可以及时校准偏差,纠正错误,所以刻意练习特别强调“反馈”。软件最终要交付给用户使用,用户使用软件的习惯方式、软件的使用环境等可能和软件设计师设想的完全不一样,如果等到把最终产品交付用户后才得到用户的反馈,那肯定太晚了。因此软件工程开发要求做好用户调研,深入了解用户需求,甚至让用户介入进来,根据用户的反馈快速迭代。
数据结构课程教学抽象复杂,更需要教师得到学生的及时反馈,了解学员情况,适当调整教学进度,改进教学方法,通过上课提问、作业批改、随堂测试、章节测试、课后答疑等方式了解听课情况,同时,也让学生得到即时反馈。
4 结语
综上所述,数据结构课程教学应从技巧教学中抽离出来,以问题的抽象、算法的构造及实现为重点,结合丰富的生活实例,培养学生工程化思维、抽象思维、逆向和分治思维及即时反馈思维等计算机思维,实现数据结构课程教学的跨越式发展。。
参考文献:
[1]Jeannette M Wing.Computational Thinking[J].Communications of the ACM, 2006,49(3):33-35.
[2]董榮胜,古天龙.计算思维与计算机方法论[J].计算机科学,2009,36(1):1-4.
[3]严蔚敏,李冬梅,吴伟民.数据结构(C语言版第2版)[M].北京:人民邮电出版社,2017.1-2.
[4]天极网.告别编程课MIT展示自然语言编程[EB/OL]. (2013-07-16) [2014-02-25]. http://dev.yesky.com/406/35250406.shtml.
[5]陈萱华,杨玲,张静.“数据结构”教学中的常见问题与应对策略[J].公安海警学院学报,2018(12):52-53.
【通联编辑:王力】