为什么硅谷精英鼓励每个孩子学会编程,因为它教会我们如何思考

博雅小学堂 2018-06-12 14:23:43



在这个国家里的每一位国民

都应该学会编程

这能让你懂得如何去思考

——史蒂夫·乔布斯



比尔·盖茨,扎克伯格等硅谷精英鼓励每个人都来学编程。很多美国公立学校在一年级就开设了Scratch编程课。



6周6节在线课,完成孩子的编程启蒙

Scratch,麻省理工学院的儿童编程工具

每晚在线答疑,知识就该急不可耐

▲仅限400人,共同学习更有氛围

▲适合小学2年级以上孩子


为什么每个孩子都应从小学编程


文 | 王木头(博雅小学堂编程课导师,北大软件工程硕士


这段时间,儿童编程非常流行,在很多地方都有创客教育、STEAM教育,都会涉及到教孩子编程。我想很多家长都听说过了,甚至自己的孩子已经上过相关的课程了。可是儿童编程到底是什么东西,对孩子的成长具体有什么好处,恐怕家长们都还不是很清楚。


儿童编程不需要写代码


我想肯定也有家长自己就是程序员,对编程技能和编程思维已经很熟练了,当说到教孩子编程的时候,很多时候他们是皱眉头,觉得这事不靠谱。因为他们想到了自己是如何一开始学习编程的,对当时经历过的困难还记忆犹新,认为学习编程超过了孩子的理解能力。


其实儿童编程和成人编程是不太一样的,至于那里不太一样,会不会因为降低难度而让知识缩水,后面我会慢慢来讲,然后大家可以有一个自己的判断。

 

我们先来看看编程是什么。


但凡说到编程,尤其是对于不太熟悉编程的人来说,想到的肯定是满屏幕看不懂的代码,有各种很怪的英文单词。这个想象出来的画面是很多家长觉得孩子不适合学编程的最大阻碍,总觉得写字都还不熟练,学编程岂不是更加吃力。而且整个屏幕都是这样的代码,一定很枯燥,自己孩子肯定坚持不下来。

 

其实这幅画面并不准确,在儿童编程中根本不需要学习写代码。因为借助麻省理工学院(MIT) 设计开发的儿童编程工具Scratch,就可以降低门槛,解决很多儿童编程的问题。


Scratch的操作界面非常简单


大家可以仔细看一下这个图,即使没有学过编程你也可以一下子看懂。


关键是学编程思维


终于不用敲代码了,而是通过像积木一样的拖拽来实习编程。这又会带来另一个担心——会不会简化后就沦为玩具,学不到什么真正的东西?

 

这个我们一点点来聊。我们就先来看看成人学编程重点是学什么。我想肯定有不少人听过,编程学什么语言不重要,只要真正的学会了一门语言比如说JAVA,再学其他的什么C语言啊,Python啊,就会快很多。所以,学习编程语言不是目的,编程语言是实现某个想法的技术手段,关键是要具备编程思维。

 

所以,如果儿童编程可以很好的帮助孩子们掌握了编程思维,以后等需要的时候就可以很快的的掌握正式的的编程语言,那么目的就达到了。到底能不能呢,我们先来一起看看什么是编程思维。

 

我把编程思维简单地分成了两个主要部分,一个是建模,一个是算法优化


举个例子,比如我们想要做一个程序,这个程序会自动把大象装进冰箱里。那么建模是什么呢?就是我们要知道把大象装进冰箱分几步,经过分析,知道了是分成三步,打开冰箱,把大象装进冰箱,关上冰箱。


建模其实就是把一个复杂的问题拆分成更小的问题,保证小问题是可以用程序解决的。那么算法优化呢,就是看看如何可以更有效地解决这些小问题。

 

这其实就有些像是写文章,建模就是在构思整个文章的大纲和思路,算法优化呢,就是如何具体地润色每一句的措辞。只要具备了这样的思维,至于用什么语言写,是汉语还是英语,是C语言是JAVA,其实问题都不大。


那么儿童编程可以培养编程思维吗?不一定,这也是大家在报班学习的时候需要迈过的坑。有两个方法会影响到编程思维的培养,一个是编程工具,真实的编程语言和Scratch相比,我推荐Scratch,后面会解释为什么。也会列举一些其他儿童编程的产品,帮大家分析那些可以帮助训练和提高编程思维。


另一个影响因素是,教学方式,就拿Scratch来举例,很多学习班教的是如何使用Scratch这个软件,而不是培养编程思维。就像是教人下围棋,只是教了围棋的规则,并没有教围棋相关的技巧和思考。

 

讲到这里,可能有些家长就首先有个疑问。觉得自己的孩子未来又不需要当程序员,为什么还需要专门培养他们的编程思维呢?


编程思维是一种元认知能力


现在程序员成为了一种非常重要的工作,薪水高,职位多,好找工作。虽然这是个事实,单并不是为什么学编程的主要原因。

 

我想从更普遍的角度来说明下编程思维并不只是对编程有好处。

 

大家应该还记得我刚才讲过的编程思维最重要的两个能力——建模和算法优化,这两种思维对于个人的重要程度是不相同的,尤其是对于不想成为专业程序员的人来说。

 

还是从刚才写文章的例子来比喻。我可以说一说我自己,硕士从北大毕业了,肯定不是文盲了,都完成了好几万字的毕业论文,但是等到了工作中发现自己根本不会写邮件,更不要说写一份清晰的文档。即使硬着头皮写了一份邮件,也肯定是思路混乱,让人看了不知所云,找不到重点。


我可以肯定我邮件中的每一句话都是通顺的,甚至没有标点符号的错误。但是当所有的句子聚在合在一起的时候,还是不能清晰地表达出我脑子中的意思,甚至我脑子本身就是混沌的。

 

后来我实在是对自己这方面不满意,在一位前辈的推荐下看了一本书,麦肯锡的《金字塔原理》,然后就豁然开朗了。

 

这本书主要是讲,不论是商务写作还是阐述自己的观点,都最好遵守一个金字塔原理。也就是任何事情都可以归纳出一个中心论点,而此中心论点可由三至七个论据支持,这些一级论据本身也可以是个论点,被二级的三至七个论据支持,如此延伸,就像是个金字塔。

 

更关键的是对于论据,有一个额外的要求,就是相互独立,完全穷尽。

 

等我看到『相互独立,完全穷尽』几个字之后我一下子就开窍了。这不就是我们编程时对一件事建模的方法吗?


编程的时候需要先采集需求,也就是用自然语言从各方面描述一个问题。比如“我想做一个小游戏,里面有只猫,我们可以控制它抓鱼吃,鱼会随机从一边游到另一边,在这个过程中可能会被猫抓住,也可能会成功逃走。还要有定时的功能,在固定的时间内看看谁可以抓住更多的鱼。”

 

这样的表达是我们平时的口语表达,语义模糊,人交流可以,编程就不行了。因为那是人和机器的沟通,任何模糊的和重叠的语句都是不被允许的。

 

于是为了实现这个小游戏,我就需要分析需求,拆分问题,看看这个游戏里面都有几个角色,猫有什么行为,鱼有什么行为,鱼和猫是如何互动的等等。

 

也就是说,编程思维其实和麦肯锡的金字塔原理有些共通,都是拆分问题,用『相互独立,完全穷尽』的方法保证语义的准确描述。这样程序才能实现。

 

可如果没有学过编程的话,即使明白了这些原理,也需要经过大量的训练才可以熟练掌握。


这也就是为什么说,编程思维中建模的能力和优化算法的能力在某种程度上是不对等的。


优化算法是一种专业技能,需要有大量的专业知识和数学知识。而建模是一种理性思维,建模能力是一种元认知能力——掌握这个方法,遇到未知问题都可以利用这种认知方式去应对。


这才是学习编程的本质。至于学习年龄,编程这种可以训练元认知的课程,会比较适合小学二三年级以上的孩子。


为什么推荐Scratch


讲到这里就要说一下,为什么不是所有的编程都适合给孩子学,为什么会推荐Scratch。这是因为Scratch是越过了编程思维中的有关算法的训练,直接训练孩子建模能力。

 

如果有家长了解过编程的话应该知道,学习编程的时候一般都是先学数字的使用,例如比个大小,在数组里排序之类的。这其实都是算法问题。

 

可是在由麻省理工学院(MIT) 设计开发的儿童编程工具Scratch中就不会,设计它的目的就是为了让孩子们可以摆脱这些繁琐的技术细节,直接将自己的想法进行建模并实现,而这些复杂的技术细节只需要一条语句就可以做到。

 

尽管简化的代价是无法像正式的编程语言一样普遍适用,但却非常适合孩子们用来设计游戏、MV、动画和交互程序,这就已经足够了。

 

现在市面上有各种各样的儿童编程工具,其中很多都是Scratch的衍生品,因为Scratch是开源的,很多机构会做自己的定制。这些都是大同小异,可以选择自己方便的来学习。

 

但是还有另外一些编程课可能就不会像Scratch这样能很好地训练建模思维了。其中最多的可能就是机器人课程,尤其是搭建有编程功能的机器人。

 

这些课程当然会对孩子的动手能力有训练,不过在建模思维上的训练并不会太多。更多训练的是孩子的定量思维能力,以及遇到问题试错改正的能力,可能更适合那些有理工气质的孩子们。


而Scratch,很多文学气质或是画画好的女孩子也会很感兴趣,因为不需要太多的编程技术,就可以做出自己的动画绘本。

 

总之,在精力有限的情况下,推荐Scratch。如果是在这方面特真的别有天赋,或者是兴趣极大,也推荐去尝试其他课程。


主讲人




王木头


北京大学软件工程硕士

博雅小学堂少儿科普节目

《王木头讲万物简史》主播


课程介绍


第一讲

领养一只程序猫做宠物


▷欣赏高手们做的程序,演示和介绍我们的6次课程的终极目标——小游戏猫吃鱼。并用拆解问题的方式把复杂问题拆分成简单问题,打消掉太难学的顾虑。


▷带小朋友探索Scratch中的运动相关的指令,用画笔功能画出自己的星座图案。


第二讲

训练猫可以唱歌,给它开Party


▷进一步探索外观和声音指令,完成课程之后,可以程序中的角色制作音乐和小故事。


▷讲解有关造型的功能,通过修改不同造型,给宠物猫开一个Party。制作第一个自己的小短剧。


第三讲

领养一只程序猫做宠物


把猫训练的更听话


▷探索侦测功能,人有眼耳鼻舌身5感,程序也可以从外界获的感觉。明白选择语句的用处。可以让程序中的角色看起来智能一些。


▷探索事件的功能,可以让程序中的角色不在循规蹈矩,面对突发事件程序可以随机应变。


第四讲

让猫在程序里交朋友


▷加入多个角色,重点理解多个角色之间如何进行互动和协作。


▷消息机制,如何让多个角色直接互相可以交流。在消息机制下重新理解多个角色的互动和协作。


第五讲

有记忆的猫更聪明


▷让程序中的角色更充满,不只是听从命令,还可以有自己的记忆,讲解Scratch中的变量问题,用变量实现多使用。


▷更强大的记忆功能——链表存储,还有XY坐标定位方法。结合链表、坐标和画笔的功能做一个写字猜字的小游戏。


第六讲

和猫一起做游戏


▷介绍克隆功能,简单的复制很多的角色。


▷完成终极任务,小游戏猫吃鱼。




点击原文,详细了解《Scratch第一堂编程课》第二季