近年来,少儿编程教育如火如荼。来看一下——
2014年,英国教育大纲规定计算机编程是5-16岁儿童必修课程。
2017年,新加坡推动少儿编程教育,中小学考试中加入编程考试科目。
2012年,日本在中小学普及编程教育科目。
2015年,美国政府投入大量资金开展少儿编程教育,呼吁全国青少儿学习编程。
在国内,新高考改革环境下——
2017年,浙江省试水少儿编程教育,将信息技术课提升为高考科目。高考考试范围包括编程、数据库处理、表格处理等。
清华、北大、中科大、北航、上交等几十所大学在 2018 自主招生简章中对工科类专业自主招生条件中均提到了对信息学获奖的要求。
伴随STEAM理念在国内的深入,传统编程与机器人教育开始进一步转型,越来越多的投资机构将目光聚焦于少儿编程。据艾瑞咨询《2018年中国少儿编程行业研究报告》,截至2018年10月中旬,我国少儿编程行业市场规模约为30—40亿元,用户规模约为1550万。业内预估,未来随着宏观利好政策的不断出现,少儿编程行业规模或将在5年内达到300亿元。
……
首先,很多家长有疑惑,我的小孩以后又不是要当程序员,有必要学编程吗?其实,学编程不等于一定要当码农。现在小孩基本上都会学一两门特长,比如钢琴、书法、足球等,但不等于他以后要当音乐家、书法家或运动员。同样,学编程不等于一定要当程序员。少儿编程教育培养的是编程的思维方式。
那么,编程的思维方式能带给孩子什么好处?下面我用一个曾经风靡一时的“躲子弹”游戏作例子,把编程思维所培养的能力逐个分析分析。、
躲子弹游戏规则:玩家用上下左右键控制一架宇宙飞船,躲避子弹,一旦碰到子弹游戏结束。随着时间越长,子弹越来越多,游戏难度越大。看这游戏的乐趣在于玩家们互相之间不断的攀比躲避子弹的时长。
分解——把复杂的大问题,拆解成更可执行的小问题的能力
要开发一个“躲子弹”游戏?嗯,好像是一个大工程哦,该怎么入手呢?怎么让电脑把这件事情搞明白?有哪些步骤,每一步该干什么?哪步在先哪步在后?……
首先我们根据电脑处理事情的逻辑,把这个大工程拆解一下。
拆解
在这个游戏里,电脑主要处理两件大事:
收集输入 – 用户的操作信息(按上、下、左、右键四种)
输出响应 – 根据不同的输入,做出不同的响应(飞船也要做往上、下、左、右移动的动作)
我们把第2点再拆解
飞船每走一步,可能有这几种情况:
碰到子弹,游戏结束
没有碰到子弹,游戏继续。
我们再把点“没有碰到子弹,游戏继续”抽出来,再再拆解
在这步里,电脑可能要这些事情:
子弹继续飞
如果子弹碰到边沿,反弹
每隔2秒增加一颗子弹
新增子弹飞的方向随机
一个复杂的问题,看起来千头万绪没有思路,但编程者需要把它拆解成一个个简单的问题,再进行逐个击破。这种思维在学习、工作、生活中处处都用得着。具备这种能力的人做事情是有条不紊的。比如同样面对一个复杂的问题,分解能力好的孩子会将其分解成每一个可以操作、可处理的小问题,一个一个小问题搞定了,大问题也就解决了,即使最后不一定能完全解决,也能清清楚楚地知道自己的进展;而没有分解的耐心和能力的孩子,遇到难题时则可能脑子一团乱麻。
整合——找出重复模块,解决细分问题的能力
在编程的过程中,孩子得一直在做这样的训练,发现一些可以重复的单元,把它整合起来,让计算机去重复它。即 “找规律”。
比如子弹所发生的一系列动作(沿着原方向继续飞,如果碰到边沿,反弹),是程序中多次会发生的,那么我们就可以把这组动作打包,给它取一个名字叫“让子弹飞”。每走一步,就可以直接把“让子弹飞”拿出来用,而不用重新把它所包含的一系列动作再想一遍。
这种能力关键之处在我们需要找出问题中相似的模块,进而将新问题变成了老问题,在经验库里搜索以往的类似问题及解决方法并套用解决,这是解决细分问题的佳方法。
分析——逻辑思维能力
飞船每往前走一步, “没有碰到子弹,游戏继续”,电脑可能要这些事情:
子弹继续飞
如果子弹碰到边沿,反弹
每隔2秒增加一颗子弹
新增子弹方向随机
这里有的情况是互斥的,比方说子弹没有碰到边沿,那就沿原方向继续飞;如果子弹碰到边沿,则反弹。这两种情况不能同时发生。
有的情况则可能是同时发生的,比如旧子弹继续飞,游戏场景里每隔2秒要新增一颗子弹。
还有,以上情况是不是覆盖了所有可能性,结果考虑得是不是 完整。
这些思考对孩子的来说都是非常好的逻辑训练。
调试纠错——耐心、观察力、专注力、抗挫折的能力标题
任何事情都很难一次就完成得尽善尽美,程序运行起来发现有问题,这时就需要孩子去寻找出错的地方,并将它一点一点去改正。
然而,实际上程序中很多问题都不是一下就能找到的,常常需要从头到尾把程序的运行顺序一步一步地跟走一遍,观察每一步的运行结果(专业术语叫“单步调试”)。这需要很多的耐心、观察力和专注力。
当调试经验丰富之后,他更关注于提高自己纠错的技能,而不是害怕、回避或者掩盖错误。比如孩子会在写程序时给那些“可能有错”的地方先做个标记,方便回头来检查纠错。孩子会越来越懂得,有错很正常,只要能把它找出来,改正就好。这对孩子的抗挫折能力也是一种磨练
总之,要是你问我,孩子有没必要学编程,我会很肯定地回答:有必要!因为它的确培养孩子的综合能力。