我经常会听到一些孩子说,编程属于理科生学习的东西,就好像有很多同学会不理解为什么文科生也要学数学一样。其实在美国,编程已经开始变成和读写、数学、科学并列的学生核心能力。而且,学编程的核心,也不是学计算机语言,而是学一种思维方式。今天,很多孩子每天都忙于上各种各样的补习班、学习各种各样的才艺,但其中,我觉得最值得投入时间和精力的,还是孩子思维能力的培养,把重点放在学习“计算性思维”上面——而不单单只是学几行酷炫的代码。

我毕业于剑桥大学工程系。我经常会用到编程,后来工作了一段时间,越来越觉得,编程是一个非常有用的技能,我就又去学了Html、CSS、Java Script、Python和Ruby,越学我越遗憾没能在更小的时候接触到它。

哪怕你的孩子以后读文科,计算性思维也不可或缺

什么是计算性思维?简单来说,是一种用电脑的逻辑来解决问题的思维,这个是由谷歌公司提出的,可以简单概括成这几种类型:分解问题、模式认知、抽象思维和算法设计这几个类型。

这几个词只是看上去很抽象,实际上,我们的生活中,有很多问题的解决要用到这些思维,比如策划全家旅行。

第一是分解问题的能力,把一个庞大的任务分解成几个小问题分别解决。“策划全家人的旅行”听起来非常庞大、繁琐,那么,我首先就要将这个庞大的任务分解成几个小任务,我可以把旅行,先分解成“订机票”、“订酒店”、“订活动”三个任务,然后依次分别解决。而其实每一个小问题又可以进一步分解成不同的小任务来解决,当你将每一个小任务都解决好了以后,这个“计划全家旅行”的庞大的任务也就可以轻松地解决了。

第二是模式认知。比如旅行时,订酒店,其实我2014年、2015年都在某一个网站上订了某个连锁酒店,非常靠谱,住得也非常舒服,这一次我可以同样地在这个网站上订这个连锁酒店。在这里,我会根据我过去的经验以及过去解决问题的方法,来解决我眼前的问题,这是认知模式的一种。酒店订完了,我们基本上就要计划一下我们的活动了。

第三是抽象思维。下图中,左边和右边是两个不同的计划,对比之下就能发现,左边有很多没有必要的细节,比方说“要吃巧克力麦片”,如果我们把很多时间花在没有必要的细节上,就会降低我们的效率。

所以一个善于运用抽象思维的同学会剥离出问题的核心,知道什么是重要的、需要提前确定的,什么是不重要的、到时候慢慢看也行的。这样TA就不会浪费时间在不必要的项目上。

第四是算法设计,大家可以通俗地理解为解决方案的设计。我们还拿旅行计划的设计作为例子,到了假日的早上,我非常开心地准备去公园玩,那么问题来了,怎么从酒店走到中央公园去?这里需要一系列的解决方法。

我首先会问今天下雨吗?今天不下雨,我们就要出酒店门,右转,朝北走七条街等等,才可以带我们到公园。如果今天下雨,我们则要回房间、拿上伞,在酒店门口等的士,的士来了就告诉的士司机我们的目的地……

我以前经常听到别人说——“我天生就是个路痴,就算给我个地图我也找不到地方,你还是来接我吧”,其实我认为,没有人是所谓的天生的路痴,只要你能对着地图、运用好计算性思维里的算法设计、严谨地计划好自己的每一步,就没有你无法到达的目的地。

会编程的孩子,数理化学起来也不会太难

我们接下来就看看在学习中如何运用计算性思维。

比如说在解数学题的时候,我们就经常要用到分解问题的技巧。这里有道数学题,看上去有点长,不过一个思维能力强的小朋友就不会被这个长度吓到,而是把它分拆成三个问题:第一个问题是,首先要解出左边这个算式的答案;接着要计算出右边这个算式的答案,这是第二个小问题;再来是我们要比较这两个数的大小,这是第三个小问题。

一个思维敏捷的小朋友马上就可以分解一个复杂的问题,成为这三个小问题,然后一个个算出来,这样的话这道很长的题其实也就变得很容易了。

另外一个例子是在做应用题的时候,很多小同学则需要学会剥离出问题的核心。

比如说上面这道初中物理题,很多同学读完这道题后可能感觉这里有很多信息,但是一个思维敏捷的同学就可以快速地找出这道题的关键信息,就是车的重量和刹车的力度。然后小朋友要运用模式认知回想一下,好像过去那道题都是需要用到牛顿的第二定律的,这样小朋友就会想到这个公式是F = m * a,从而解出这道题的答案。

写作文、做演讲,其实都需要计算性思维

其实计算性思维不仅能用在数学学科上,还可以用于其他很多学科的学习。

比方说在语文课上写作文的时候,要想写得又快又好,通常我们要列一个作文的提纲,列提纲这个动作其实就是在分解问题。比方说今天我要在这里介绍计算性思维,我很紧张,这么庞大的一个话题,我不知道从哪里开始讲,不过我列了一个提纲,决定将这个大的演讲分成好几个小块:

我这样分解一下,感觉就轻松了很多。我主要把每一个小部分讲好就好了。

有时候学社会学的时候,我们可以分析我们现在看到的现象,和过去历史里发生过的现象有没有什么相似之处,是否有可以学习的地方,这就是一种模式认知。学科学的时候,我们使用的公式和模型都是抽象化的。然后在做科学实验的时候,我们也经常要用算法设计的技能来精确地设计实验步骤。

最后,有个小提醒给家长朋友们。现在很多同学学习编程语言,都是以自己的兴趣为主,比如说写论坛、机器人、做网站等,比较随性,我们要不要给他加一下系统性的学习呢?答案是:NO。我想说的是,兴趣是一切的源动力,最好的教育方式从不是给孩子一个系统,而是让他们根据兴趣和热情,自己慢慢摸索出一个系统来。

学编程的核心,并不是学计算机语言,而是学一种思维方式。这种能力应该变成和读写、数学、科学并列的学生核心能力。家长应该明白,现在少儿编程学习对孩子的启发作用和重要性。