纠结要不要给孩子学编程?纠结怎么选?先搞懂这个问题,你心里才能有答案
开始今天的文章之前,我们先一起来头脑风暴一下。
在商场门口,挥动着手臂跟大家打招呼的吹气人,它的手臂为什么能上下挥动呢?
来做个实验吧。
有这样一个长条形的塑料袋子,我们想象它是吹气人的手臂。跟所有的袋子一样,它一头是封闭的,一头是开口。
现在用剪刀,在它封闭的那头顶端,剪出一个小口子。
然后,用吹风机,从开口的那一头往里吹风,会发生什么?
在脑海里运行一下吧。
没错,风会把袋子抬起来,变成直直的一条。
好,如果这一次,这个洞口我们不开在袋子的顶端,而是开在侧面。
然后,把洞口朝下,还是同样,用吹风机往里吹风,袋子会怎么样呢?
在脑海里运行一遍吧——
风吹进袋子:
袋子变直了:
风从洞口吹出来:
风的反作用力,把袋子抬起来
袋子弯折,空气的通路被阻挡,袋子掉下来,接着重复上面的过程。
就这样,袋子像一只手臂,不停的上下挥动:
来看看它的程序:
风吹进袋子——袋子变直——风从洞口向下出来——袋子被抬起——风被阻断,袋子掉落——回到第一步,不断循环。
你看,这就是编程。听起来高大上的编程,其实充斥在我们的生活之中。
经常有读者问我,“编程思维到底是什么?要不要给孩子学编程?”
说实话,我也一直觉得编程挺高深的。
妞爸编程很厉害,他是世界上第一个把人工智能图像识别用于搜寻脉冲星的科学家。我俩刚谈恋爱的时候,他送给我一个用我名字命名的专属聊天程序,类似于MSN,专门用来和我跨洋聊天。(嗯,理工直男的浪漫,就是这么……不花钱……)
每次我看到他在电脑前敲下一排排代码,就能让电脑从千万个信号中找到太空中的星星,都会觉得太不可思议了,有时会拉着他问东问西。
这段时间在考察章鱼老师的数学思维课,我经常跑去他们办公室。章鱼老师的联合创始人凳子老师是北大的计算机硕士,我缠着他请教了一次,颇有豁然开朗之感。
正好这两天我在B站上偶尔看到了日本著名的NHK教育台制作的科普节目《Texico》。
NHK的节目向来经典,《像乌鸦一样思考》、《啊!设计》就是他们制作的。《Texico》是讲编程思维的,做的实在太好太魔性了,墙裂推荐给大家,我是一口气看完的,经常有那种“喔,原来是这样”的发现新知识的爽感。
我就借着这个节目,加上我的理解,来跟大家聊聊编程思维吧。至于要不要上编程课、怎么选,至少我们要对编程思维有个基本了解才能去做判断,否则太容易被忽悠了。
内容很多,我会分成几篇文章和大家聊。但我首先得承认,我的理解还是很初步的,这背后的广袤,咱们一起慢慢学习吧。
编程思维到底是什么?
说到编程,其实我们大部分人指的是“计算机语言”,像Scratch、Python、C++,都是计算机语言。计算机语言只能说是狭义上的编程。
计算机语言是什么呢?就是计算机能听懂的话,我们用这些话告诉计算机,在什么情况下做什么事情。
最底层的计算机语言,其实是二进制码,就是用一串0和1组成的字符,来告诉计算机做什么。
举个形象的例子,在下面这张图里,“10111”这串字符代表字母“W”,“101”这串字符代表字母“E”。那么“10111 101”就是“WE”——我们。
可以想象,用二进制码来写程序,该有多复杂。好在我们现在有了“高级语言”,Scratch、Python、Java、C++都是高级语言,用这些语言写出程序之后,它们会再被翻译成二进制码来让计算机执行。
那这些语言有什么区别呢?
这就好像我们要跟一个外国人说话,可以用英语、法语、德语,区别只是这个语言好不好懂、好不好用。
这里面最好懂的就是Scratch,它是大白话的中文,不需要孩子懂英语,也不需要会打字,因为它的指令被做成了一个个的图标,只要用鼠标把指令拖到一起就行了。
像上面这些程序,是不是一看就懂?
Python就需要孩子会说英语、会打字了,好处是语法结构比较简单,读起来就跟读英语句子差不多,妞爸就是Python的深度爱好者。
但这所有的计算机语言,学的不过是语法罢了,是一种工具。
这就好像你要叫一个外国人帮你做一件事情,你掌握了英语的语法,但到底要叫这个人去做一件什么有趣的事,怎么样一步步做成这件事,还做的快、做的好、做的漂亮,后面的这些,才是编程思维。
就像前面提到的商场门口不停挥手的充气人。你要想到目的是让小人挥手,想到剪出一个洞的方法,想到充气后“手臂伸直-抬高-落下-循环前面动作”的一步步的过程,这才是编程思维。
而且,编程思维并不仅仅是和电脑对话。我们生活中很多东西都是编程的结果。
无处不在的编程思维
比如说邮递员送信。
信件在派送之前,要由专人进行“重组”,按照一个特别的表格重新排序。
但是,这张表格并不是简单的按照某某路1号、2号、3号的地址顺序进行排序,而是按照一定的程序来进行编排的。
是什么样的程序呢?
我们先来看看没有被“编程”的信件,放在地图上是什么样子:
是无序的散落。
那按照程序重组之后呢?
摆在地图上,就像是一笔画一样连了起来。
这就是配送时的最短路径。这条路线还考虑了单行道、禁止右转等等交通状况,是一条经过了程序化设计的路线。
再举个搬箱子的例子。
有按顺序摆放的1、2、3、4号箱子,要搬到对面,怎么搬呢?
你是这样打算的吗?
先分四步一个个抬到对面。
但是,这样的结果是,箱子顺序反了……
接下来只能再一个个调整箱子的顺序。
怎么优化流程呢?
其实,只要加上一个手推车就行了。
把箱子放上手推车,1号在最下面,4号在最上面,箱子的顺序反了。
接着,从手推车上把箱子再一个个搬下来: 4号先搬下来,放在最下面; 1号最后一个搬下来,放在最上面。
哇噢,箱子的顺序又正过来了。
能一步步分解流程、想到结果,再进行优化,这就是编程思维啊。
之前我看到一个新闻,有个大学生去干快递,他对快递路线、流程、车子的装卸方法进行了重新的优化设计,很快就做到了公司管理层。这就是编程思维的生产力。
我曾经在文章里说过,文凭改变命运的时代已经过去了,将来是思维改变命运的时代。我觉得未来的机会蓝海并不在白领行业,而是在蓝领行业。大学生可以用自己的知识、思维,去做蓝领行业的领头羊,去改造蓝领行业,把它变成创新、创业的机会。
在什么行业并不重要,重要的是你在这个行业里所处的位置。
这也是为什么我们一直强调底层能力,一直反对用刷题填充孩子的时间,反对为了一时的成绩去阉割孩子的思维的原因。只要你看到无处不在的机会,看到思维的生产力,就不会那么焦虑了。
再来看一个有趣的例子。
有一个小车,只有右边的轮子会转。把它放在地上,会发生什么呢?
小车一直在向左打圈圈。
把小车边上的金属条按下去,就变成只有左边的轮子会转了。
现在,在地上放一个箱子,然后放开小车,会发生什么呢?
在脑海里运行一下吧。
放在地上——只有右边轮子在转——向左转弯——碰到箱子——然后呢?
原来这就是扫地机器人的程序啊。
所以,编程思维,并不是指让孩子去学习计算机语言,让每个孩子都会写代码,都去做码农。
当我们说到每个孩子都应该懂点编程,指的是每个孩子都应该具有这种广义上的编程思维。这是一种思考的模式,一种解决问题的方法,一种创造力。
具有编程思维,即使将来不学工具性的计算机语言,把它用在别的领域也一样会很有生产力。
而编程思维是可以被锻炼的,它是逻辑学、数学和计算机科学的结晶,背后是一整套的核心思维方法。