计算思维这个概念从首次明确定义到现在不过十余年,但已经越来越受到重视。新加坡Looi Chee Kit 教授2017年11月23日发布在新加坡一个政府的网站上的文章提出一个鲜明的观点: 计算思维的教和学是新加坡人为数字世纪做好准备的关键,每个学生需要培养计算思维。 在我国,计算思维在大学的计算机基础课程教学中受到越来越的重视。普通高中的信息技术课程标准(2017版)将计算思维列为学科的核心素养之一。 计算思维是每个人的基本技能,不仅仅属于计算机科学家。我们应当使每个孩子在培养解析能力时不仅掌握阅读、写作和算术(Reading, wRiting, and aRithmetic——3R),还要学会计算思维。究竟什么是计算思维呢?

一、计算思维的概念

思维是人脑对于客观事物的本质及其内在联系间接的和概括的反应,是一种认识过程或心理活动。2006年3月,美国卡内基·梅隆大学计算机科学系主任周以真(Jeannette M. Wing)教授首次定义了计算思维(Computational Thinking)的概念:计算思维是运用计算机科学的基础概念进行问题求解、系统设计、以及人类行为理解等涵盖计算机科学之广度的一系列思维活动(“solving problems, designing systems and understanding human behavior by drawing on the concepts fundamental to computer science”)。

计算思维最本质是什么(究竟什么是计算思维)(1)

周以真博士。图片来源:Carnegie Mellon University

计算思维是一种问题解决的方式,这种思维将问题分解,并且利用所掌握的计算知识找出解决问题的办法。计算思维可以划分为四个主要组成部分:其一,所谓”解构“,即把问题进行拆分,同时理清各个部分的属性;其二,所谓“模式识别”,即找出拆分后问题各部分之间的异同;其三,所谓“模式归纳”,或“抽象化”,即探寻形成这些模式背后的一般规律;其四,所谓“算法设计”,即针对相似问题提供逐步的解决办法。

2009年7月26日,中国工程院院士、中科院计算技术研究所所长李国杰在NOI2009开幕式和NOI25周年纪念会上的讲话提到:“计算思维是运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为,它选择合适的方式去陈述一个问题,对一个问题的相关方面建模并用最有效的办法实现问题求解。有了计算机,我们就能用自己的智慧去解决那些计算时代之前不敢尝试的问题。

中国学者李艺、钟柏昌认为,计算思维可以分为三组有关联的思维结构:对象化思维和过程思维,兼具认识世界和改造世界的功能,分别指向世界的空间和时间维度;抽象思维和可视化思维,它们主要体现在认识世界的活动当中,分别指向世界的本质和外在形态;工程思维和自动化思维,分别指向改造世界的必然性和自由性。三组概念共同构建了一个计算思维的思维世界。

二、计算思维的关键内容

当我们必须求解一个特定的问题时,首先会问:解决这个问题有多么困难?怎样才是最佳的解决方法?当我们以计算机解决问题的视角来看待这个问题,我们需要根据计算机科学坚实的理论基础来准确地回答这些问题。同时,我们还要考虑工具的基本能力,考虑机器的指令系统、资源约束和操作环境等问题。

为了有效地求解一个问题,我们可能要进一步问:一个近似解是否就够了,是否有更简便的方法,是否允许误报和漏报?计算思维就是通过约简、嵌入、转化和仿真等方法,把一个看来困难的问题重新阐释成一个我们知道怎样解决的问题。

计算思维最本质是什么(究竟什么是计算思维)(2)

计算思维——一种新的学科思维方式

计算思维是一种递归思维,是一种并行处理。它可以把代码译成数据又把数据译成代码。它是由广义量纲分析进行的类型检查。例如,对于别名或赋予人与物多个名字的做法,它既知道其益处又了解其害处;对于间接寻址和程序调用的方法,它既知道其威力又了解其代价;它评价一个程序时,不仅仅根据其准确性和效率,还有美学的考量,而对于系统的设计,还考虑简洁和优雅。计算思维是一种多维分析推广的类型检查方法。

计算思维采用了抽象和分解来迎接庞杂的任务或者设计巨大复杂的系统,它是一种基于关注点分离的方法(Separation of Concerns,简称SOC方法)。例如,它选择合适的方式去陈述一个问题,或者选择合适的方式对一个问题的相关方面建模使其易于处理;它是利用不变量简明扼要且表述性地刻画系统的行为;它是我们在不必理解每一个细节的情况下就能够安全地使用、调整和影响一个大型复杂系统的信息;它就是为预期的未来应用而进行数据的预取和缓存的设计。

计算思维是按照预防、保护及通过冗余、容错、纠错的方式,并从最坏情况进行系统恢复的一种思维。例如,对于“死锁”,计算思维就是学习探讨在同步相互会合时如何避免“竞争条件”的情形。

计算思维利用启发式的推理来寻求解答,它可以在不确定的情况下规划、学习和调度。例如,它采用各种搜索策略来解决实际问题。计算思维利用海量数据来加快计算,在时间和空间之间,在处理能力和存储容量之间进行权衡。例如,它在内存和外存的使用上进行了巧妙的设计;它在数据压缩与解压缩过程中平衡时间和空间的开销。

三、计算思维与生活密切相关

当你早晨上学时,把当天所需要的东西放进背包,这就是“预置和缓存”;当有人丢失自己的物品,你建议他沿着走过的路线去寻找,这就叫“回推”;在对自己租房还是买房做出决策时,这就是“在线算法”;在超市付费时,决定排哪个队,这就是“多服务器系统”的性能模型;为什么停电时你的电话还可以使用,这就是“失败无关性”和“设计冗余性”。由此可见,计算思维与人们的工作与生活密切相关,计算思维应当成为人类不可或缺的一种生存能力。

四、计算思维的特性

1.概念化,不是程序化。计算机科学不是计算机编程。像计算机科学家那样去思维意味着远不止能为计算机编程,还要求能够在抽象的多个层次上思维。

根本的,不是刻板的技能。根本技能是每一个人为了在现代社会中发挥职能所必须掌握的。刻板技能意味着机械的重复。具有讽刺意味的是,当计算机像人类一样思考之后,思维可就真的变成机械的了。

计算思维最本质是什么(究竟什么是计算思维)(3)

Computational Thinking

2.是人的,不是计算机的思维方式。计算思维是人类求解问题的一条途径,但决非要使人类像计算机那样地思考。计算机枯燥且沉闷,人类聪颖且富有想象力。是人类赋予计算机激情。配置了计算设备,我们就能用自己的智慧去解决那些在计算时代之前不敢尝试的问题,实现“只有想不到,没有做不到”的境界。

3.数学和工程思维的互补与融合。计算机科学在本质上源自数学思维,因为像所有的科学一样,其形式化基础建筑于数学之上。计算机科学又从本质上源自工程思维,因为我们建造的是能够与实际世界互动的系统,基本计算设备的限制迫使计算机学家必须计算性地思考,不能只是数学性地思考。构建虚拟世界的自由使我们能够设计超越物理世界的各种系统。

4.是思想,不是人造物。不只是我们生产的软件硬件等人造物将以物理形式到处呈现并时时刻刻触及我们的生活,更重要的是还将有我们用以接近和求解问题、管理日常生活、与他人交流和互动的计算概念;而且,面向所有的人,所有地方。 当计算思维真正融入人类活动的整体以致不再表现为一种显式之哲学的时候,它就将成为一种现实。

,