容易被误解的计算思维
2006年,卡内基·梅隆大学周以真教授首次系统性地定义了计算思维。这一年,她在美国计算机权威期刊
《Communications of the ACM》上发表了题为《Computational Thinking》的论文,由此开启了计算思维大众化的全新历程。
在此之前,“计算思维”在非计算机领域的应用多集中在科研学术圈,如计算化学、计算生物学、计算决策学等。像我这样的普罗大众真正开始了解“计算思维”的价值是在《Computational Thinking》发表之后(的10年)。今天,计算思维成了世界公认的普适思维方式,和理论思维、实验思维一样,任何人在解决任何问题时都可以运用。
计算思维对每个人都意义重大,但却非常容易被误解。有人望文生义,以为计算思维就是关于数学的学问;有人片面理解,以为学了编程就懂了计算思维;有人非要攀高枝,连学个Word、Exel、PPT都要说培养了计算思维。
计算思维被误解成这样,小编决心为它正名,带大家好好认识下计算思维。
计算思维是什么,不是什么
计算思维是什么呢?
在《Computational Thinking》这篇论文中,周以真教授用“硬科学”的术语描述了计算思维:计算思维是运用计算机科学的基本理念,进行问题求解,系统设计以及理解人类行为。也就是说,计算思维是一种解决问题的思考方式,而不是具体的学科知识,这种思考方式要运用计算机科学的基本理念,而且用途挺广的。
想要更快更好的理解计算思维,先来看看周以真教授对计算思维的几个清晰论断。
1 计算机思维是研究计算的。
2 是概念化,不是编程。
3 是基础技能,不是死记硬背的技能。
4 是人的思考方式,不是计算机的思考方式。
5 是数学思维、工程思维的补充和结合。
6 是想法,不是人造产品。
理解了上面6句话,就能在很大程度上减少对计算思维的误解了。
把编程当作计算思维是对计算思维的常见误解之一,甚至一些学计算机专业出身的人也会有类似的观点,其实不然。计算思维是一种概念化的思考方式,而编程则是一种行为,虽然编程的过程中经常会用到计算思维,但计算思维绝不是编程。把信息素养当作计算思维也是对计算思维的常见误解之一,其实计算思维和信息素养完全不同。信息素养注重的是培养人们对信息进行有效利用的方式方法,重点在于利用信息工具和信息,比如Excel、录音机、传感器、QQ的使用,从互联网上找到自己想要的信息等。而计算思维则是研究计算的,研究一个问题中哪些可以计算,怎样进行计算。
计算思维不是一门孤立的学问,也不是一门学科知识,它源于计算机科学,又和数学思维、工程思维有非常紧密的关系。说它和数学思维相关,是因为用计算思维解决问题时,需要将问题抽象为可计算的数学问题,例如比较罗马帝国的崛起和蒙古人的扩张,需要选择适当的数学模型来对国力进行量化计算。在运用计算思维设计大型复杂系统时,需要考虑效率、可靠性、自动化等问题,这些都是工程思维中非常重要的东西。
计算思维是每个人在日常生活中都可以运用的一种思考方式。没错,每个人都可以运用,而且可以用在几乎任何地方。出行路线规划、理财投资选择、科学研究分析、天气预报预测,不论你试图解决什么问题,运用计算思维都能帮你化繁为简,四两拨千斤。
理解计算思维,首先要理解计算
理解计算思维的前提是理解计算,因为计算思维本质上还是研究计算的,研究在解决问题过程中,哪些是可计算的,以及如何计算。
通常我们理解的计算是算术运算,如“1+1=2”,,但运算其实有很多种类,如集合运算、逻辑运算、条件运算等等。集合运算如 “ ∁U(A∩B)=(∁UA)∪(∁UB)”,这里面就没有具体的数值运算了,而是用代表集合的字母进行运算;又比如逻辑运算“1∧0=0”,这个运算里有数值“0”和1,但意义完全不同,这里的“1”代表的是“真”—即命题为真,“0”代表的是“假”—即命题为假,通过用数字“0”和“1”来代换命题的真假,用“∧”来代换逻辑语言里的“并且”,逻辑判断过程也能通过计算来实现。
在上面这三类运算中,“1和2”、“ A、B” “1和0”是计算对象,是用特定符号代表一定的含义(可能是数、集合、命题真假等等);“+”、“∁U、∩、U”和“∧”是运算符,也就是运算规则(可能是加减乘除、可能是求并/补集、可能是判断并且/或者的复合命题)。如果把计算对象用特定的符号串表示,计算的实质就是将已知的特定的符号串,按照预定的规则,一步一步地改变符号串,经过有限步骤,最终得到一个满足预定条件的符号串的过程。
当我们跳出算术运算的局限,理解了计算的本质后,就会发现原来好多看似不可计算的东西都能变得可计算,也就很容易理解计算思维的普适性了。因为经过一定的抽象,我们对很多问题的理解都能用特定的数学语言来描述,接下来,当我们用特定的数学语言去描述解决过程的时候,就是在用计算化的方式来求解了。
计算思维里的人机分工
当我们把一个问题的求解操作变的可计算化后,我们是要靠人力去进行运算吗?NO!运用计算思维就是为了把人从大量的机械的运算中解脱出来,让计算机去做这些事。在用计算思维解决问题时,人负责把实际问题转化为可计算问题,并设计算法让计算机去执行,计算机负责具体的运算任务,这就是计算思维里的人机分工。
人机分工能大幅提高问题处理的效率,减少出错率,特别是在处理情况复杂,运算量大的问题时。比如出行路线规划,在没有导航软件的时候,我们想要规划从A点到B点的最近的路线,可能要花费不少功夫,往往是我们根据经验进行判断,并不精确,很难有足够的时间和精力去寻找最优解。
当我们用电子地图来表示实际地理情况,用坐标点来表示实际位置时,最短路线的问题就转化为比较地图上A点到B点的各种线段组合的长度问题。从输入起点和目的地到导航软件给出导航路线不到半秒的时间里,后台服务器已经进行了高达千万甚至上亿次的运算,这种效率高出人类N个数量级。
计算思维里的2A
Abstraction (抽象)和Automation(自动化)是计算思维的两大核心特征。
想要理解抽象和自动化之于计算思维的重要性,我们先来看下运用计算思维进行问题求解的关键路径:
<1>把实际问题抽象为数学问题,并建模
将人对问题的理解用数学语言描述出来
<2>进行映射,把数学模型中的变量等用特定的符号代替
用符号一一对应数学模型中的变量和规则等
<3>通过编程把解决问题的逻辑分析过程写成算法
把解题思路变成计算机指令,也就是算法
<4>执行算法,进行求解
计算机根据算法,一步步完成相应指令,求出结果
建立数学模型的过程就是理解问题的过程,并且要把你对问题的理解用数学语言描述出来。这很关键,数学模型的好坏意味着你对问题的理解程度够不够深,而且数学模型还说明了在这个问题中,哪些东西可以计算以及如何进行计算,这可以说是计算思维里最最核心的东西了。这个关键过程需要的核心能力就是抽象能力以及一定的数学基础。
数学建模只是可计算化的第一步,为了让计算机帮我们去求解,我们还需要虚拟的符号来代替的数学模型里的每个变量和运算规则,这个过程就是映射啦!
完成映射,我们就能把解题思路(注意,是解题思路,不是数学模型)用程序语言完整地告诉计算机啦,这个过程就是具体的编程写算法的过程啦!这一步需要较强的编程能力,但编程能力的核心之一也是抽象思维能力。对于编程能力不够强的人来说,映射还有编程的过程可以交给擅长编程的人来做。
关键路径的前3步都是人来完成的,最后一步执行算法进行运算是机器自动完成的,体现了计算思维的自动化的特点。
在整个过程中,抽象是方法,是手段,贯穿整个过程的每个环节。自动化是最终目标,让机器去做计算的工作,把人脑解放出来,中间目标是实现问题的可计算化,体现在成果上就是数学模型、映射、还有算法。
至此,你应该对计算思维有个差不多的理解了。当你再听到某些课程顾问说“我们的课程能培养孩子的计算思维时”,你可以反问一下他们是怎样培养孩子的计算思维的,而不是傻傻地为一个听起来高大上的词汇买单。俗话说“师傅领进门,修行在个人”,真正运用计算思维去解决问题,还需要各位踏踏实实地掌握相关知识,并加以操练才行。