购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 认识计算思维

学习程序设计的目标绝对不是要将每个学习者都培养成专业的程序设计人员,而是要帮助每个人建立系统化的逻辑思维模式。以往程序设计的实践目标非常重视“计算”能力,近年来随着因特网的高速发展,计算能力的重要性早已不是唯一的目标,因而程序设计课程的目的特别着重于培养学生的“计算思维”(Computational Thinking,CT,或称为“运算思维”),也就是分析与分解问题的能力。

图1-4 要学好计算思维,通过程序设计来

编写程序代码不过是程序设计整个过程中的一个阶段而已,在编写程序之前,还有需求分析与系统设计两大阶段。计算思维是用来培养系统化逻辑概念的基础,进而学习在面对问题时具有系统的分析与分解问题的能力,从中探索出可能的解决办法,并找出最有效的算法。我们可以这样说:“学习程序设计不等于学习计算思维,但要学好计算思维,通过程序设计来学绝对是最快的途径”,如图1-4所示。

计算思维是一种使用计算机的逻辑来解决问题的思维,前提是掌握程序设计的基本方法和了解它的基本概念,是一种能够将计算“抽象化”再“具体化”的能力,也是新一代人才都应该具备的素养。计算思维与计算机的应用和发展息息相关,程序设计相关知识和技能的学习与训练过程其实就是一种培养计算思维的过程。当前许多欧美国家从幼儿园开始就培养孩子的计算思维,让孩子从小就养成计算思维的习惯。培养计算思维的习惯可以从日常生活开始,并不限定于任何场所或工具,日常生活中任何牵涉到“解决问题”的议题,都可以应用计算思维来解决,通过边学边体会,逐渐建立起计算思维的逻辑能力。

假如你今天和朋友约在一个没有去过的知名旅游景点碰面,在出门前,你会先上网规划路线,看看哪些路线适合你的行程,以及选乘哪一种交通工具最好,接下来就可以按照计划出发。简单来说,这种计划与考虑过程就是计算思维,按照计划逐步执行就是一种算法(Algorithm),就如同我们把一件看似复杂的事情用容易理解的方式来解决,这样就具备了将问题程序化的能力。图1-5所示的范例是小华早上上学并买早餐的简单计算思维。

图1-5 学生买早餐的过程也是一种计算思

2006年,美国卡内基·梅隆大学Jeannette M.Wing教授首次提出了“计算思维”的概念,她提出计算思维是现代人的一种基本技能,所有人都应该积极学习。随后谷歌公司为教育者开发了一套计算思维课程,这套课程提到培养计算思维的4部分,分别是分解(Decomposition)、模式识别(Pattern Recognition)、模式概括与抽象(Pattern Generalization and Abstraction)以及算法(Algorithm)。虽然这并不是建立计算思维唯一的方法,不过通过这4部分我们可以更有效地进行思维能力的训练,不断使用计算方法与工具解决问题,进而逐渐养成我们的计算思维习惯。

在训练计算思维的过程中,其实就培养了学习者从不同角度以及现有资源解决问题的能力。正确地运用培养计算思维的这4部分,同时运用现有的知识或工具,找出解决困难问题的方法。学习程序设计就是对这4部分进行系统的学习与组合,并使用计算机来协助解决问题,如图1-6所示。

图1-6 计算思维的4部分示意图

1.1.1 分解

许多人在编写程序或解决问题时,对于问题的分解不知道从何处着手,将问题想得太庞大,如果一个问题不进行有效分解,就会很难处理。将一个复杂的问题分割成许多小问题,把这些小问题各个击破,小问题全部解决之后,原本的大问题也就解决了。

假如我们的一台计算机出现部件故障了,将整台计算机逐步分解成较小的部分,对每个部分内的各个硬件部件进行检查,就容易找出有问题的部件。再假如一位警察在思考如何破案时,也需要将复杂的问题细分成许多小问题,如图1-7所示。

图1-7 将复杂的问题分解为小问题

下面举一个例子来说明。假如我们要分解教小孩刷牙的问题,可以分解与细分成以下情况(见图1-8):

·用哪种牙刷较好

·要刷多久

·如何刷

·哪种牙膏适合

·准备漱口杯

图1-8 教小孩刷牙的问题

在一些综艺节目中会出现所谓的终极密码游戏,主持人随机从1~100中取出一个彩球(见图1-9),让嘉宾猜彩球的数字,主持人只能针对嘉宾猜的数字回答“高了”或“低了”,这也是一种问题分解的具体应用。想想看,如何才能快速猜到这个数字呢?

图1-9 抽彩球游戏也是一种计算思维的训练

假如取出的彩球数字是“38”,那么我们可以将1~100的数字数列(sequence)先取中间的数字50来比较,38在1~50之间,所以只剩下数列前半段1~50,运用同样的方式取中间的数字再进行比较,数字数列又排除一半,只剩25~50,一直循环这个过程就能找到数字38。这个过程可以参考图1-10。

图1-10 猜测彩球数字的一种二分查找法

事实上,这样的解题分析过程就是训练和培养程序设计的计算思维过程。在上述分析过程中,虽然并没有提到任何艰深的程序设计语言,但是已经带入了程序设计的两个重要概念:“循环(loop)”和“二分查找法(binary search)”。

提示

循环会重复执行一个程序区块中的程序语句,直到满足特定的结束条件为止。例如,想要让计算机算出1+2+3+4+…+100的值,在程序语句中并不需要我们大费周章地从1累加到100,这时只需要使用循环结构就可以轻松实现这种累加。

二分查找法是将数据序列分割成两等份,再用要查找的键值与中间值进行比较,如果键值小于中间值,就可以确定要查找的数据在数据序列的前半段,否则就在后半段。

1.1.2 模式识别

在将一个复杂的问题分解之后,我们常常可以发现小问题中有共同的属性以及相似之处,在计算思维中,这些属性被称为“模式”(Pattern)。模式识别是指在一组数据中找出特征(Feature)或规则(Rule),用于对数据进行识别与分类,以作为决策判断的依据。在解决问题的过程中,找到模式是非常重要的,模式可以让问题的解决更简化。当问题具有相同的特征时,它们能够被更简单地解决,因为存在共同模式时,我们可以用相同的方法解决此类问题。

例如,当前常见的生物识别技术就是利用人体的形态、构造等生理特征(Physiological Characteristics)以及行为特征(Behavior Characteristics)作为依据,通过光学、声学、生物传感等高科技设备的密切结合对个人进行身份识别(Identification或Recognition)与身份验证(Verification)的技术。又例如,指纹识别(Fingerprint Recognition)系统以机器读取指纹样本,将样本存入数据库中,然后用提取的指纹特征与数据库中的指纹样本进行对比与验证(见图1-11),而脸部识别技术则是通过摄像头提取人脸部的特征(包括五官特征),再经过算法确认,就可以从复杂背景中判断出特定人物的脸孔特征。

图1-11 指纹识别系统的应用已经相当普遍

当我们发现越来越多的模式时,解决问题就会变得更加容易和迅速。在知道怎么描述一只狗之后,我们可以按照这种模式轻松地描述其他狗,例如狗都有眼睛、尾巴与4只脚,不一样的地方是每只狗都或多或少地有其独特之处(见图1-12),识别出这种模式之后,便可用这种解决办法来应对不同的问题。

图1-12 狗都有眼睛、尾巴与4只脚

因为我们知道所有的狗都有这类属性,当想要画狗的时候,便可将这些共同的属性加入,这样就可以很快地画出很多只狗。在平时,我们也能进行模式识别的思维训练,可以通过动手画图、识别图形、分辨颜色或对物体分类来进行训练。

1.1.3 模式概括与抽象

模式概括与抽象在于过滤以及忽略掉不必要的特征,让我们可以集中在重要的特征上,这样有助于将问题抽象化。通常这个过程开始会收集许多数据和资料,通过模式概括与抽象把无助于解决问题的特性和模式去掉,留下相关的以及重要的属性,直到我们确定一个通用的问题以及建立解决这个问题的规则。

“抽象”没有固定的模式,它会随着需要或实际情况而有所不同。例如,把一辆汽车抽象化,每个人都有各自的分解方式,像车行的业务员与修车技师对汽车抽象化的结果可能就会有差异,如图1-13所示。

图1-13 车行业务员和修车技师对汽车抽

车行业务员:轮子、引擎、方向盘、刹车、底盘。

修车技师:引擎系统、底盘系统、传动系统、刹车系统、悬吊系统。

如何正确而快速地将现实世界的事物抽象化是一门学问,而计算思维着重于分析、分解与概括(或归纳)的能力,是练习抽象化非常有效的方法。在日常生活中也处处可见抽象化,例如我们将复杂、有地形背景的北京地铁运行图简化为如图1-14所示的纯线路图模式,以简单明了的方式标示出各个不同地铁线路的走向及各个站点。

图1-14 北京地铁线路图

计算思维可视为是运用信息科技有效解决问题的心智历程,通过模式概括与抽象的过程整理出有用的数据、资源以及限制条件,整个思维过程可以使用“思维导图(Mind Map)”来归纳和整理。思维导图是由英国的Tony Buzan于20世纪70年代提出的一种辅助思考的工具,又称脑力激荡图、思维图,它是一种使用图像来帮助思考与表达思维的工具,可以刺激思维并帮助整合思想与信息。借助这种方式,我们可以更轻松地以图形方式来表达自己的想法。

思维导图的绘制其实非常简单,中心点通常表示一个核心主题,用一张纸把记忆记录下来,再把绘图者的思考、分析、规划、概括和归纳后的信息以笔记方式呈现,用关键词向外扩张延伸出分支来表达内容。通过主题的脑力激荡,把想到的字词、概念全部写下来,使用不同尺寸的文字、线条与图形来区别数据间的从属关系与重要程度。除了材料、内容、色彩等多方面的构思以外,同时也训练绘图者在思考过程的“流畅性”与“变通性”,刚开始的思维可能很发散,我们不用想太多,通通写下来就好了,等收集到一定程度,再慢慢筛选掉不适合的部分。假如我们要规划一个减轻体重的计划,首先必须制定一个核心目标,聚焦在“减重”这个主题上,再按序想出解决问题的方法来归纳整理。如图1-15所示是一个思维导图的范例。

图1-15 思维导图的范例

1.1.4 算法

算法是计算思维4个基石的最后一个,不但是人类使用计算机解决问题的技巧之一,也是程序设计中的精髓。算法常出现在规划和设计程序的第一步,因为算法本身就是一种计划,每一条指令与每一个步骤都是经过规划的,在这个规划中包含解决问题的每一个步骤和每一条指令。

在日常生活中有许多工作可以使用算法来描述,例如员工的工作报告、宠物的饲养过程、厨师准备美食的食谱、学生的课程表等。如今我们几乎每天都要使用的各种搜索引擎都必须借助不断更新的算法来运行,如图1-16所示。

特别是在算法与大数据的结合下,这门学科演化出“千奇百怪”的应用,例如当我们拨打某个银行信用卡客户服务中心的电话时,很可能会先经过后台算法的过滤,帮我们找出一名最“合我们胃口”的客服人员来与我们交谈。在因特网时代,通过大数据分析,网店可以进一步了解产品购买和需求产品的人群是哪类人,甚至一些知名IT企业在面试过程中也会测验候选者对于算法的了解程度,如图1-17所示。

图1-16 搜索引擎的背后是不断优化的搜索算法

图1-17 一些知名IT企业面试时也会测

提示

大数据(Big Data,又称为海量数据)由IBM公司于2010年提出,是指在一定时效(Velocity)内进行大量(Volume)、多样性(Variety)、低价值密度(Value)、真实性(Veracity)数据的获得、分析、处理、保存等操作。数据的来源有非常多的途径,大数据的格式也越来越复杂,大数据解决了商业智能无法处理的非结构化与半结构化数据。

在韦氏辞典中,算法定义为:“在有限步骤内解决数学问题的程序。”如果运用在计算机领域中,我们也可以把算法定义成:“为了解决某项工作或某个问题,所需要的有限数量的机械性或重复性指令与计算步骤。” egEvKdBT2vvF8SAGJCjm/NvPj2aPC78oVWMmU4wW4Gazbr0d+CLqqaYUMVCjdEeq

点击中间区域
呼出菜单
上一章
目录
下一章
×