什么是计算思维?
我们所生活的世界已成为数字化世界,充斥着各种技术,在计算机科学的推动下不断成长。 软件和技术已改变每个学科和工作领域,从科学和医学,直到艺术史和心理学,不一而足。 数字技术无处不在。 如欲成为知情和享有权利的公民,下一代学生将需了解其所居住的这个数字世界。
正因如此,计算思维被称为‘21 世纪的技能组合’。对每个人而言,学习计算思维至关重要。只有在理解数字世界的工作原理后,才能应用计算机的威力解决艰难的问题,创造丰功伟业!此外,其能促使我们进行批判性思考,内容不仅包括特定技术所带来的好处,还有其中所包含的潜在危害、伦理含意或意外后果。
然而,到底什么才是计算思维?让我们看看技术定义……
“计算思维是制定问题及其解决方案所涉及的思维过程,促使以可由信息处理代理有效执行的形式,表示解决方案。”
啊,这定义太长了对吗?但是,在 CS Unplugged 中,我们想要对大家说,这些长篇阔论背后的想法非常简单!'信息处理代理'是指遵循一组指令完成任务的任何内容(我们称之为'计算')。 大多数情况下,这个'代理'指的是计算机或其他类型的数字装置 - 但也可能是人类! 为了让一切变得更简单一些,我们将其称为计算机。 旨在以计算机可执行的方式表示解决方案,我们必须将其表示为逐步求解的过程 - 算法 strong>。 为了创建这些算法解决方案,我们应用一些特殊的问题解决技能。 这些技能构成了计算思维! 这些技能还可转移至任何领域。
计算思维可描述为'像计算机科学家一样思考'。如今,无论是否想成为计算机科学家,每个人均需学习这一重要技能! 非常有趣且重要的一点是,计算思维和计算机科学并非完全关于计算机,它们与人 strong>的关系更大。 您可能认为是我们在为计算机编写程序,但实际上是在为人编写程序 - 助其沟通、查找信息和解决问题。
例如,您可使用智能手机上的应用程序获取前往朋友家的路线;此应用程序是计算机程序的一个示例,而智能手机则是为我们运行程序的'信息处理代理'。无论是谁设计出算法,以制定最佳路线以及全部细节,例如界面和存储地图的方法等,他们均应用计算思维来设计系统。 但是,他们并非因智能手机而设计;其设计旨在为使用智能手机的个人提供服务。
CS Unplugged 中的计算思维
在 CS Unplugged 的整个课程和单元中,设有许多关于计算思维的链接。通过 CS Unplugged 活动教授计算思维,将教会学生如何:
- 描述问题、
- 确定解决问题所需的重要细节、
- 将问题分解为更小的逻辑步骤、
- 使用这些步骤创建解决问题的过程(算法),
- 随后评估这一过程。
这些技能可转移至任何其他课程领域,但与开发数字系统和使用计算机功能解决问题尤为相关。
这些计算思维概念全部均相互联系、相互支持,但重点在于注意到,并非计算思维的每个方面都会在每个单元或课程中发生。 在每一个单元和课程中,我们均强调您应在学生行为中观察到的重要联系。
计算思维具有多种定义,但大多数均有计算思维所体现的一套 5 或 6 种解决问题的技能。 对于 Unplugged 项目,我们经确定文献中经常提到的以下六种 CT 技能;其描述如下所示,并且,在每个 Unplugged 课程结束时,我们都将确定这些技能在课程中的出现方式,从而助您查看与课程的 CT 关联。
计算思维技能
算法思维
算法是计算思维和计算机科学的核心。在计算机科学中,问题的解决方案不仅仅只是一个答案(例如'42'或一个事实),其实还是算法。算法是解决问题或完成任务的分步过程。若正确遵循算法的步骤,即使输入不同,也会得到正确的解决方案。例如,可以使用算法来找到地图上两个位置间的最短路径;相同的算法可用于任何一对起点和终点,因此,解决方案取决于算法中的输入。 若知道解决问题的算法,那么即可随时轻松地解决问题,而无需再进行思考!仅需按照步骤,进行操作即可。计算机无法自己思考,所以我们需要给它算法,让其完成目标。
算法思维是创建算法的过程。当要创建算法来解决问题时,我们称之为算法解决方案。
计算算法(可在数字装置上运行的类型)具有相对较少的成分,毕竟数字装置只有几种类型的指令可供遵循;它们可完成的事情主要是接收输入、提供输出、存储值、按照顺序执行指令、在选项之间进行选择,以及循环重复指令。尽管这一系列指令有限,但我们已描述数字装置可计算的所有内容,这也可解说为何仅限这些元素来描述算法。
抽象
抽象就是为了简化,从而协助管理复杂性。这需要明确哪些才是问题的最重要方面,并隐藏无需关注的其他具体细节。重要的方面可用于创建正在处理的原始事项之模型或简化表示。此后,便可使用此模型解决问题,而不必赶着处理全部的繁琐细节。计算机科学家经常使用多层次的抽象。
我们经常在日常生活(例如使用地图时)中使用抽象。地图展示出世界的简化版本,为我们省略了不必要的细节,例如公园中每棵树的位置,并且仅保留地图阅读器所需的最相关信息,例如道路和街道名称。
数字装置始终应用抽象;它们试图尽可能多地隐藏用户不需要的信息。例如,假设您在上次露营活动中拍摄了一张漂亮的风景照片,而现在要在笔记本电脑上进行编辑并调整颜色。通常,可通过打开图片编辑程序并调整一些颜色滑块或选择滤镜来实现此目的。执行此操作时,计算机隐藏了这个操作背后的许多复杂操作。
在计算机中,所拍摄的照片会存储为像素大列表,每个均呈现一个不同颜色,每一颜色均用一组数字表示,每一数字均存储为二进制数!这蕴藏着大量信息。假设您要调整颜色,就要查看每一个像素,查看每一个色值,并逐一更改!这就是计算机替您完成的事情,但鉴于完成目标并不需要您了解这个情况,计算机便把相关信息均隐藏起来。
分解
分解即将问题分解为更小、更易管理的部分,然后专注于解决每个小问题。 我们可以将复杂的问题分解为各个小部分,直至这些小部分变得简单而易于解决。这些可解决每个更小、更简单问题的解决方案,形成用于解决一开始面对的大问题之解决方案。分解有助于让大问题变得不那么吓人!
创建可在计算装置上实现的算法和过程时,分解是一项重要技能,因为计算机需要非常具体的指令。它们需要得知完成任务所需的每一个小步骤。
例如,制作蛋糕的整体任务可分解为多个小任务,而每个小任务均可轻松完成。
制作蛋糕
- 烘焙蛋糕
- 在碗中放入原料(黄油、糖、鸡蛋、面粉)
- 搅拌
- 倒入蛋糕模具
- 放入烤箱,烤 30 分钟
- 取出蛋糕模具
- 制作糖衣
- 放上蛋糕
泛化和模式
泛化也称为'模式识别和泛化'。泛化采用问题的解决方案(或解决方案的一部分)并对其进行泛化,以便将其应用于其他类似的问题和任务中。由于计算机科学中的解决方案是算法,这意味着我们采用算法并将算法变得足够通用,以便将算法用于一系列问题。这个过程涉及抽象,毕竟为了让结果变得更加通用,必须删除与特定问题或情况相关但对于算法的工作原理并不重要的非必要细节。
发现模式是这一过程的重要组成部分。思考难题时,我们可能会认识到它们之间的相似之处,并知道可用类似方式将其解决。这称为模式匹配,是我们在日常生活中始终自然做出的事情。
泛化的算法可以针对整组类似问题反复使用,这意味着我们可以快速有效地想出解决方案。
评估
评估就是确定问题的潜在解决方案,并判断出可用的最佳方案、判断该等方案是否可在某些情况下有用而在其他情况下无用,以及应如何改进。判断解决方案时,需要考虑一系列因素。例如,这些过程(算法)需要多长时间才能解决问题,是否能够可靠地解决问题,或者,是否会在某些情况下以非常不同的方式进行。评估是日常生活中的常做之事。
我们可使用不同方式评估算法解决方案。通过在计算机上运行,即可测试其速度;或者,通过计数或计算可采取的步骤数,即可对其分析。通过向算法解决方案提供大量不同的输入并检查其是否按预期运作,即可测试它们是否正确工作。这样做时,需要考虑测试的不同输入,因为我们并不想检查每个可能的输入(通常存在无限数量的可能输入!),但仍然需要知道算法解决方案是否对所有输入均有效。 测试是计算机科学家和程序员始终坚持执行的事情。但是,鉴于通常无法测试每个可能的输入,我们也尝试使用逻辑推理来评估系统。
逻辑
尝试解决问题时,需要进行逻辑思考。逻辑推理是试图通过观察、收集数据、思考已知事实的方式理解事物,然后根据已知信息理清事情。这有助利用现有知识,建立规则并检查事实。
例如,假设当前编写的软件能算出从家中到达某个地点的最短路径。在下面的地图中,如果从家中向北走,那么距离图书馆只有 2 分钟路程;但是如果向南走,那么距离下一个十字路口 有 3 分钟路程。您可能想要知道,如果一开始向南走,是否存在到达图书馆的更好路径,但逻辑上并不存在这个可能,因为您已步行 3 分钟抵达十字路口。
从更深的层面上来说,计算机完全建立于逻辑之上。它们使用‘真’值和‘假’值以及‘布尔表达式’(例如,“年龄 > 5”),在计算机程序中进行决策。
追踪程序中的错误,也需通过逻辑思维来算出程序出错的位置和原因。