为什么有“编程思维”的孩子总是更优秀?

编程思维

首先,请大家一起来想象一个画面。
此刻,疲惫一天的你正在回家的电梯上。从 1 层进入,并点亮了前往 5 层的按钮,电梯开始缓缓向上爬升,到第 3 层时,电梯停了下来,走进一个金发碧眼的女郎。
这时,几个疑问忽然闯入你的脑海:为什么我按了 5 层的按键,电梯就会开始向上爬升?为什么外面有人按了楼层按钮,电梯就会停止?电梯的程序是如何运作的呢?
很巧,这些小问题正好可以用编程思维来解答。
① 「当你在 1 楼,想去 5 楼」,这里涉及了起终点和循环的概念。从起点 1 出发,终点为 5 ,循环计数从 1 到 5 ,满足的退出循环条件,电梯停了,门也打开了。
②「当你在上升的过程中,外面有人按了按钮」,这里涉及了判断语句。电梯的程序中,有一个判断条件,一直在监听 If (是否有人按了按钮),当条件成立,电梯就会停止。
发现了吗?生活中处处有编程,编程原本就是为了解决生活中的实际问题。
我们的孩子学编程,不只是单纯学会代码,掌握一项技能,或是培养一个兴趣,最重要的,是掌握背后一整套高效解决问题的思维模式。
拥有这种思维模式的人,通常在生活中看起来更加“聪明”:无论是在工作还是学习中,你都会发现他头脑清晰、反应灵敏,做事效率也非常高。
为什么有“编程思维”的孩子总是更优秀?
你有没有发现,那些站在金字塔顶尖的人,通常不止在自己的领域优秀,而是“文史哲数理化”样样精通。这是因为他们拥有一套高效的思维模式,对知识的消化和吸收也非常快。
学编程的本质,就是为了帮助孩子们形成这样的思维模式——「编程思维」,又叫「Computational Thinking」。
如此神奇的「编程思维」到底是什么呢?
编程思维,是一种高效率解决问题的方式,是“理解问题——找出路径”的高效思维过程,它由“分解—抽象—模式识别—算法”四个步骤组成。
为什么有“编程思维”的孩子总是更优秀?
听起来很高大上的样子?别着急,让我们一起来做一些新鲜有趣的解读。
分解 —— 化繁为简
分解,简单来说,就是“把复杂的大问题,拆解成更可执行、更好理解的小步骤”,它能锻炼我们拆解复杂问题的能力。   
生活中常常会出现一些复杂,且需要多步骤才能解决的问题。很多人在遇到此类情况时,常常感到一团乱麻,完全不知道该从何下手。这样的人,就是缺少“分解问题,化繁为简”的能力。
这类问题可能是一篇2万字要求的论文,一道看上去毫无头绪的数学题,也可能是假期出行前的一次旅行规划。
面对复杂问题,不要害怕,首先,拆了它!
现在,你要和几个朋友一起出国旅行,由你来负责出行前的规划。需要做什么?
按照时间维度来拆解这个问题。首先,我们需要选择出行目的地,然后做旅行攻略、安排行程,接下来就可以预定机票和酒店,最后准备行李清单。
而四个大步骤又可以具体拆解为许多小步骤,详见下图??
为什么有“编程思维”的孩子总是更优秀?
把一个比较大的问题多层拆解之后,看起来是不是就清晰很多了?
编程的过程,就是把复杂和庞大的问题“自上而下,逐步拆解,直至理顺”。这种思维,在学习和生活叫“分解思想”,在工作中又叫“项目管理”。
为什么有“编程思维”的孩子总是更优秀?
做数学题也是一样的道理。解答一道复杂的题目,通常需要把它拆解成多个大步骤,而每个大步骤,又可以继续分解为更多的小步骤......分解思想,也是数学中最重要的思想之一。这也是学编程的孩子,数学成绩也不会差的原因。
具备这种思维的人,做事情是有条不紊并且有耐心的。而分解能力好的孩子,即便面对一道有挑战的数学题,也能列出清晰的解题步骤,清楚地知道自己每一步的进展,而不是遇到难题时脑子里一团乱麻。
抽象 —— 聚焦关键
编程中最关键的就是“抽象思维”能力,它能锻炼我们聚焦重点,忽略无用信息,并抽取关键信息的能力。
抽象思维听起来有点抽象?没事,再邀请你进行一次想象。
现在,想象一个房子的形象。
在一般人的想象中,它有可能是这样的:

天蓝色的房顶,明亮的玻璃窗
一扇小小的木门朝向绿意盎然的花园
但在建筑师的想象中,它可能是这样的:

建筑师想象中的房子,具体到了房子内部的具体架构和材料,每一面墙、每一扇门窗应该如何更精巧地设置。
那如果是化学家呢?他心中的房子,甚至可能是由一个个原子,按照一定的规律排列组合而成的。
在上述案例中,门和窗子的物理材料,是对原子的抽象,而整个房子,又是对门窗房顶这些具体构成房子的物体的抽象。
发现了吗?我们的生活中处处是抽象思维。
为什么有“编程思维”的孩子总是更优秀?
数学中,实数运算是对现实的抽象,代数运算是对实数运算的抽象,抽象代数又是对代数的抽象。国家方针政策是对整个国家运行发展的抽象,国家级政府职能部门对方针政策进行具象,省市县级再依序进行具象......
我们的现实,就是在这样一步步的分层抽象中,逐步清晰起来。抽象级别越高,则越接近事物的本质,规律的适用面也越广。

编程的世界里,就包含“子系统、模块、包、类、方法和语句”等不同层级的抽象,学编程能锻炼孩子们不断抽象、聚焦关键信息的能力。
在学习中,抽象思维也非常重要,我们孩子在学校里的学习,很多都是对抽象思维的训练与考察。例如,学语文课文时,需要定位段落关键句;做英语阅读理解时,要快速抓取关键信息和中心思想。抽象思维能力越高的孩子,在大量信息中聚焦关键信息的能力会越强,专注力也会更高,自然学习也会更轻松。
模式识别 —— 规律整合
模式识别,就是“如何找出相似的模式,并高效率解决细分问题”,它能极大锻炼我们规律整合的能力。
说到找规律,大家都不陌生。老规矩,这次来做一道题。
假如你有一副扑克牌,取出大小王并打乱顺序后,一人随机从中取出一张,如何确定取出的牌是几?
好像有点难?没事,让我们先把它抽象成一个数学问题:
1 + 2 + 3 + 4 + ...... + 100 = ?
国外的一个小孩在多年前就发现规律,并巧妙地解决了这个问题——
1 + 100 = 101,2 + 99 = 101 ...... 50 + 51 = 101
从 1 加到 100 共有 50 个这样的组合
因此 50 ??101 = 5050
总结规律 ??1+2+3+......+n =n??(n+1) / 2
你猜的没错,这个小孩就是伟大的数学家高斯,上图就是高斯算法的思路。
回到我们的扑克牌题目,你能否识别出它其中悄悄隐藏的高斯求和模式呢?
同一大小的牌共有4张,所有牌的面值大小为(1+2+......+13)??4
套用高斯算法,总面值大小为[(1+13)??6]??4=364
要算缺少的扑克牌,用364减去手上牌面值的总和即可。
善于发现和总结规律的人,常常做事麻利、效率也特别高。因为他们脑子里自备各种规律的“方法库“,遇到相似的情况就直接调用,极大节省了时间,也不会错漏。
为什么有“编程思维”的孩子总是更优秀?
在编程学习的过程中,孩子们也一直在做这样的训练:发现一些可以重复的单元,把它整合起来,套用进设定好的模式,再让计算机去重复它。
规律整合能力强的孩子,也善于发现学习中的规律和方法。看到一道题,有些孩子一瞬间就想到了解题方法与思路,我们会感叹道:“这个孩子真聪明”。事实上,是因为这个孩子具有很高的「模式识别,规律整合」的能力。
为什么有“编程思维”的孩子总是更优秀?
分解—— 化
算法 —— 逻辑思维
算法,就是根据之前一系列对于问题的理解,设计一步一步的解决路径,并解决整个问题。
在具体解决问题的过程中,最关键的能力有两个 —— “逻辑思维”和“调试纠错”。
逻辑思维能力
程序员圈子很流行的一个笑话。
娃妈给程序员老爸打电话:“下班顺路买10个包子带回来,如果看到卖西瓜的,就买一个。”
结果娃爸手捧一个包子进了门。娃妈怒道:“你怎么就只买了一个包子?!”
娃爸答曰:“因为看到了卖西瓜的。”
虽然是一个黑程序猿的笑话,但也体现了很典型的编程思维。编程就是理性严谨地与电脑对话,因此对编程者的逻辑思维能力也有很高的要求。
逻辑思维中有个很重要的原则叫 MECE(Mutually Exclusive and Collectively Exhaustive),意思就是“相互排斥且整体完备”,也就是“不重复,不遗漏”。

右图符合MECE原则,左图则没有
在编程的算法中,需要处处考虑MECE原则。解数学题时,也是同一个道理——我们要保证答案中考虑到所有的情况,而这些情况既不遗漏,也不重叠。
另外,编程算法中还会涉及到处理很多 “与”、“或”、“非”等逻辑用语。这些操作和思考,对孩子来说都是非常好的逻辑训练。
调试纠错能力
编程的世界里,只有对与错,没有模糊值。在程序运行的过程中,只要最终的结果与期望不符合,就证明算法中肯定有错漏。

但是,程序中的bug常常不是一下就能找到的,需要我们把程序的运行顺序一步步地跟走一遍,同时观察每一步的运行结果。这就需要很多的耐心、观察力和专注力,对孩子的抗挫能力也是一种磨练。孩子在这个过程中,也会逐渐懂得一个道理:犯错很正常,纠正它,下次不再犯类似的错误就好。
这一点,也是优秀的人身上常常共通的一项品质。这些人总是在进步,因为他们懂得“回溯、调试、纠错”,不断进行自我优化和成长,不断be better。

为什么有“编程思维”的孩子总是更优秀?

以上,就是传说中的 4 大「编程思维」了,是不是没有想象中的晦涩难懂呢?

苹果创始人Steve Jobs曾说:“每个人都应该学习编程,因为它教会你如何思考。”
   
孩子学编程的过程,正是在不断的思考和实操中,反复训练提升这 4 项重要的思维模式,建立一种真正“抗打”的认知思维和学习能力 —— 这是一种底层的思维逻辑,在任何行业都能通用,同时也是迎接人工智能时代的基本素养。
20 年前,学英语不是为了成为翻译员;
10 年前,学习电脑不是为了成为打字员;
今天,学习编程不是为了让孩子们都成为程序员,而是为他们打开一扇门,走进更广阔的未来世界!