开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2023.04.25贵州
周教授认为计算思维代表一套普适的态度和技能,每个人都应该学习、使用,而不仅仅是计算机科学家。她在文中将日常生活与计算机领域的问题做了类比:清晨你的女儿上学前将当天要用的东西装进书包,这是预取和缓存;当你的儿子丢了连指手套,你建议他从原路返回去找,这是回溯;在超市里选择哪个收银台排队?这是多服务器系统的性能建模。
周教授认为,当计算思维融入每个人的生活中时,算法和先决条件这类专业词汇成为日常生活用语,不确定性和垃圾收集将具有计算机科学家所使用的含义。
计算思维是STEM教育的重要组成部分。进入21世纪后,STEM教育在全球范围内日益受到高度重视,多个国家也将“计算思维”加入教育体系中,提升到战略高度。2017年,新加坡将计算思维称为国家能力;到2018年,超过20个欧洲国家将编程和计算思维集成到他们的课程体系中;2018年,美国总统行政办公室下属的国家科学技术委员会发布了题为《制定成功之路:美国STEM教育战略》的报告。
在这篇政府文件中,“计算思维”一词出现了28次,并且强调让计算思维成为所有教育的组成部分;2022年,中国教育部印发了《义务教育课程方案和课程标准(2022年版)》,指出信息科技课程要培养的核心素养,主要包括信息意识、计算思维、数字化学习与创新、信息社会责任。
上述不同国家的文件从多个角度对计算思维做了定义和描述。比如,在中国教育部制定的《义务教育信息科技课程标准(2022年版)》中,对计算思维做了如下描述:计算思维是指个体运用计算机科学领域的思想方法,在问题解决过程中设计的抽象、分解、建模、算法设计等思维活动。具备计算思维的学生,能对问题进行抽象、分解、建模,并通过设计算法形成解决方案,并将其迁移运用于解决其他问题。
美国STEM教育战略的政府文件中引用了周以真教授给出的定义:计算思维是制定问题及其潜在解决方案的思维过程,其要点在于解决方案可以被信息处理代理(Agent)有效地执行。这里的代理可以是人,也可以是机器,或者通常是两者的组合。中国教育部的描述深入到了计算思维所用到的具体工具。美国政府文件所引用的定义更强调解决方案的可执行性,并明确指出执行的过程可能包含人机合作。
我们可以根据前面的讨论,对计算思维在概念层面做个总结:“计算思维”一词最早出现在1980年,但其所代表的概念远早于此;计算思维是将复杂问题分析清楚,将问题的解决方案描述到能够有效执行程度的思维过程;通过计算思维产生的解决方案可以由人来执行,也可以由机器来执行,或由人和机器协同完成;计算思维是计算机科学家提出来的,但其应用涵盖所有领域,包括日常生活;计算思维是可以从小培养的,是终身受用的;包括中国在内的很多国家,已经将计算思维的培养纳入教育体系当中,有些国家还将其提升到国家战略的高度。
前面的讨论概括起来就是计算思维是解决问题的思维过程。现实世界里可以利用计算思维解决的问题林林总总,各式各样解决问题的方法有哪些共性?或者说计算思维包含哪些具体的思维活动?对于这个问题,人们比较一致的看法是计算思维包含四个基础方法——问题分解、模式抽象、算法设计和模式识别。
将大问题分解为更易于理解分析的相对小的问题,对每个小问题各个击破,是解决复杂问题的有效手段。比如,管理运营一所学校是个复杂问题,我们可以将这个问题分解为招生、教学、后勤等若干子问题。通过对每个子问题的深入分析,我们可以对全局有更好的理解和把控。问题的分解可能是多层次的,比如,学校的教学问题可以进一步分解为不同科目的教学问题。问题分解的维度也可能是多样化的,比如,教学问题除了可以按照科目分解,也可以按照学生的年级来分解,或考虑如何给优等生和学习有困难的学生分别提供相应的支持和帮助。在计算机科学领域,复杂系统的分解通常会以提升子系统内部的一致性和完整性、减少子系统之间的依赖性为原则。这个原则在其他领域也适用。
抽象是提取事物的本质特征,去除非本质特征的过程。在中小学阶段,数学是学生接触抽象概念最多的一个学科。像三角形、长方形的概念,变量和方程等都是从物理世界中提取出来的抽象概念。抽象是人类思维的重要工具,在很多学科领域都有专业应用。在计算机科学领域,面向对象的编程将对象的状态数据和对数据进行操作的代码封装在一起,抽象为一个“类”;计算机系统通常被抽象成底层的硬件、中间层的操作系统和上层的应用,等等。除此以外,抽象在文、史、理、工等很多领域都有专业应用。
算法的执行可以由机器完成,也可以由人来完成,或者人机协同完成。
对中小学生来说,以上四项思维能力需要经过多年的学习和实践逐步培养提升。
我们先来看一个简单例子。我们知道二分查找(BinarySearch)是一个常用的计算机算法,用于在一个有序的序列中找到某个目标元素的位置。其基本思想是将目标元素与序列中间的元素做比较,如果不相同,我们可以忽略掉原始序列里一半的元素,在剩下的一半中继续将目标元素与中间元素做比较,依此类推,直至找到目标元素的位置。这个算法很有效,其复杂度是O(logn),n是序列的长度。
如果按照传统的方法讲授这个算法,学生会觉得抽象、枯燥。另外,学生还需掌握对数和算法复杂度的概念并学习O()这个符号的含义,这对很多中小学生来说挑战太大。我们可以换个方式让学生去思考这个问题,比如以下几种游戏的方式。
(1)猜数游戏。东东和聪聪在玩猜数游戏。聪聪说,我想一个0~30之间的整数,你猜猜是几。你每猜一个数,我会告诉你是猜大了,猜小了,或猜对了。你最多有5次机会。请问东东能保证在5次之内猜中那个数吗?
(3)好学的猫头鹰。猫头鹰喜欢读书。这天他在读一本600页的大部头,读了一部分后有些累了,就将书摊开放在身边,午睡一会儿。调皮的猴子爬到猫头鹰在树上的小屋里,趁他熟睡时将书合上了。猫头鹰醒来后不记得自己读到第几页了,很生气。但他转念一想,我可以在一分钟之内翻到书的任意一页,并判断出这是不是我正在读的那页,或者这页我是否读过。我用一个巧妙的办法,可以在10分钟内找到我读的那页。你知道猫头鹰是怎么做的吗?
从上面几个例子可以看出,专业知识是可以通过生动有趣的任务设计启发学生去思考、探索、学习的。要做好这项工作,我们需要系统化地设计知识体系,并确定一套任务设计的标准。
前面二分查找的例子对应上面知识体系里第(5)部分的查找算法,对应的思维技能是算法设计。这个知识体系会在实践中持续更新。
任务的设计是一项有难度的工作。每项任务既要满足专业性,也要适合学生的特点。在专业性方面,每项任务要明确对应知识体系里的知识点及前面讨论的思维技能。对于比较复杂的任务,完成任务可能需要用到多种思维技能,比如要依次进行问题分解和算法设计。
为保证每项任务能让学生理解,任务的描述要使用学生容易理解的语言,不能不加解释直接使用专业术语。任务的难度要适当,与学生的年龄相匹配,同时要具备一定的挑战性。为激发学生的学习兴趣,每项任务要生动有趣,最好放在学生熟悉、喜欢的场景中进行描述。这个场景可以来自于生活,也可以来自于童话世界。每项任务最好都配有生动的图片。如果任务在计算机上完成,还可以加上人机交互,更好地支持学生的探索。
要持续设计出高质量的任务,需要让具有丰富教学经验的教师和计算机专业人士组成团队,通过系统化的流程进行合作。