1.2 什么是计算思维
“用小白鼠检验毒水瓶”的问题(以下简称“小白鼠问题”)能够求解了,但这道题背后的思维是怎样的呢?下面试着归纳一下。
1.2.1 二进制思维
首先,“小白鼠问题”的求解运用了二进制思维。
怎样理解二进制呢?与十进制对比一下就不难理解:
(1)十进制是用10个数码{0,1,2,3,4,5,6,7,8,9}表达一位十进制数,如9 587;二进制是用2个数码{0,1}表达一位二进制数,如0111 0101;
(2)十进制是“逢十进一、借一当十”,二进制是“逢二进一、借一当二”。
那么,二进制数与十进制数如何转换呢?规则是很简单的(详细内容可参见1.4节)。其实,日常生活中使用了许多的进制,如十二进制、二十四进制、六十进制等,类似于“时间由1时50分到3时20分是持续了多少分钟呢?”这样的问题我们是会转换的,只是不习惯而已,熟悉了就会了。
二进制思维有很重要的意义,它可将很多事物(或状态)非常巧妙地统一起来,如1.1节的示例。0和1可以表示“有毒”与“无毒”,可以表示“喝”与“不喝”,也可以表示“死”与“活”。对同一串0和1,如000010,可有以下不同的解读。
000010,对应编号为000010的水瓶。
000010,第i位对应第i只小白鼠,1表示喝,0表示不喝。
000010,第i位对应第i只小白鼠,1表示死亡,0表示存活。
很多情况下看起来不容易解决的问题,用二进制思维便可解决,如“小白鼠问题”的求解。“小白鼠问题”之所以看起来很难,是因为多种含义的0和1交织在一起,影响了思维的清晰性。但不管怎样,强化“将多种事物及状态用0和1统一在一起”的训练是运用计算思维的关键之一。
中国古老的易经也是采用二进制思维来表达万事万物及其变化规律的,如图1.2所示:0和1,对应“阴”和“阳”;3位0和1组合起来,共有8种组合,对应三画阴阳的组合,共有“八卦”;6位0和1组合起来,共有64种组合,对应六画阴阳的组合,共有“六十四卦”。易经的某一卦,即某一组0(阴)和1(阳)的组合可以解释为不同的含义,用“卦”“爻”的变化来理解自然现象及人事现象的变化规律,开启了用符号和二进制思维进行规律性问题研究的先河,是典型的二进制思维的代表。
图1.2 《易经》与0和1的示意
1.2.2 二分法——人类普遍应用的思维
“小白鼠问题”的求解运用了二分法思维,这是人类普遍应用的一种思维模式。
所谓的二分法,就是通过不断地排除“不可能”,进而找出问题正确解的一种方法。之所以称“二分”,是因为每次处理都把所有情况分成“可能”和“不可能”两种情况,然后排除所有“不可能”的情况,而在“可能”的情况中再进行下一次的排除。
例如,一种典型的猜数游戏:机器随机设定一个数,由用户来猜。每当用户给出一个猜测值时,系统会提示“大了”,还是“小了”。此时如果大了,则你就向比猜测值小的方向选择新猜测值,如果小了,就向比猜测值大的方向选择新猜测值,直到找出正确答案。
再例如,工人要维修一条电话线路,如何迅速查出故障所在位置呢?如果沿着线路一段一段地查找,则每查一个点要爬一次电线杆,将会浪费时间和精力。此时可使用二分法:设电线两端分别为A、B,首先从中点C查起,用随身带的话机向两端测试时,发现AC段正常,则断定故障在BC段。再到BC中点D,发现BD正常,则断定故障在CD段,再到CD中点E检查,这样每查一次,就可以把待查线路长度缩减为一半,可以节省很多查找时间和精力。
前述两个例子的二分法思想是否可直接用于“小白鼠问题”的求解呢?似乎不可以,如图1.3(a)所示,每一次有毒/无毒的分类需要等本次实验的小白鼠死亡或等待24小时才能确定,满足不了时间约束。怎么解决呢?如图1.3(b)所示,是否可采取多只小白鼠同时进行实验呢?这是可以的:每一只小白鼠负责喝500瓶水,如果死亡,则说明这500瓶中有毒而另500瓶无毒;如果没有死亡,则说明这500瓶中无毒而另500瓶中有毒。每只小白鼠检验的范围不同,多只小白鼠交错可唯一确定某一瓶水是否有毒,即如果喝了这瓶水的所有小白鼠都未死亡,则说明该瓶水无毒。这就需要借助二进制编码的方式以决定哪一只小白鼠负责检验哪些水瓶。这种方法本质上仍旧是二分法,但却是并行实现的。
图1.3 “小白鼠问题”的二分法求解示意
1.2.3 过程化与符号变换思维
计算与自动计算
“小白鼠问题”的求解运用了“过程化”与“符号变换”的思维。“过程化”与“符号变换”是典型的计算思维,那计算思维中的“计算”是什么呢?
简单计算,例如从幼儿时期就开始学习和训练的算术运算:7 + 2= 9,4×6 = 24,30 - 13 = 17,是指“数据”在“运算符”的操作下,按“计算规则”进行的数据变换。我们不断学习和训练的是各种运算符的“计算规则”及其组合应用,目的是通过计算得到正确的结果。
广义地讲,一个函数f (x),例如
把x变成了f (x)就可认为是一次计算,在高中及大学阶段不断学习各种函数及其“计算规则”并应用其求解各种问题,得到正确的计算结果,如对数与指数、微分与积分等。“计算规则”可以学习与掌握,但应用“计算规则”进行计算则可能超出了人的计算能力,即人知道计算规则但却没有办法得到计算结果。
从计算机学科角度,任何的函数f (x),不一定能用数学函数表达,但只要其有明确的输入和输出,并有明确的可被机器执行的步骤将输入变换为输出,便可称为计算。一些学者认为“任何一个过程都有输入和输出,过程是将输入变换为输出的一组活动”,也有学者认为“过程实现了系统从一个状态(始态)变换成另一个状态(终态)”。万事万物都可被转换成符号作为过程的输入,通过符号变换,转换成另一种符号作为输出并转换成自然状态的万事万物,这也是计算。
“小白鼠问题”求解体现了这样一种过程:水瓶十进制编号(所有)→(变换为)二进制编码→(变换为)分配给小白鼠喝与不喝,并产生小白鼠死与活的结果→(变换为)二进制编码→(变换为)十进制编号,找出毒水瓶。
“过程化”是任何事物利用计算机进行处理的前提,即首先要过程化,然后才能将这种过程转变为计算机能够执行的程序,进而才能实现自动化。
1.2.4 计算思维的概念
什么是计算思维
结合前面的分析,是否能体验出什么是计算思维呢?
前卡内基·梅隆大学计算机系系主任、前微软公司副总裁周以真(Jeannette M. Wing)教授指出“计算思维(Computational Thinking)是运用计算(机)科学的基础概念去求解问题、设计系统和理解人类行为的一系列思维活动的统称”。它是所有人都应具备的如同“读、写、算”能力一样的基本思维能力,计算思维建立在计算过程的能力和限制之上,由人或机器执行。
这个定义赋予计算思维3层更高的含义。
(1)计算思维是一种问题求解思维,即通过计算的手段求解现实中各种各样的计算问题,例如,通过数学建模、算法设计研究求解各种现实问题的方法和算法等。
(2)计算思维是一种设计系统的思维。设计和构造新型计算系统或计算工具以解放人类劳动力始终是人们追求的目标,而各种新型计算工具的研制对于社会的进步和发展有重要的促进意义。例如,获得诺贝尔化学奖的J.A.Pople就是把计算机应用于量子化学,设计了一套计算程序,使全世界的量子化学工作者都在用他的程序研究化学问题。
(3)计算思维是有助于人类行为理解的思维。计算思维源于社会/自然,又反作用于社会/自然。例如,“流水线”的概念是源于20世纪福特汽车生产线的概念,被计算机学科应用和发展,而现在很多工厂的数字化生产线又是借鉴计算学科的“流水线”概念在广泛应用。类似的,计算思维也在改变着社会的结构和人类的行为。
正像2015地平线报告指出的:复杂性思维教学是一种挑战,计算思维是一种高阶复杂性思维技能,是复杂性思维能力培养的重要支撑,强调计算思维教育,可以帮助学习者解读真实世界的系统并解决全球范围的复杂问题。
计算思维不同于数学思维,不仅仅是将数学公式变为程序;计算思维也不仅仅是计算机语言和编写程序。前面讨论的二进制思维、二分法思维、过程化与符号变换思维都是计算思维,但计算思维不仅仅是这些,它还包括计算+、互联网+、智能+、大数据+的思维等。
应该说计算思维不是简单的一个概念,而是需要在学习和实践过程中不断体会、不断理解的设计计算系统并运用计算系统的思维。技术与知识是创新的支撑,而思维是创新的源头。理解计算系统的一些核心概念,培养一些计算思维模式,对于所有学科的人员建立复合型的知识结构,进行各种新型计算手段研究以及基于新型计算手段的学科创新都有重要的意义。