近年来,编程似乎成为家长朋友茶余饭后的新话题。朋友圈也不时地刷各种教育信息,很多家长也给孩子上过网上课程。尽管如此,人们对儿童编程还是有很多疑问:“编程到底学什么?学了有什么用?”,“我该怎么学习?“,”我不了解这个领域。孩子们能学吗?不管孩子学什么科目,父母都不需要理解,理解什么本质的东西就行了。
比如:学习的目的?对孩子有何帮助?编程究竟是一种什么样的思维?搞清楚这些问题,就可以基本选择适合孩子的学习资源,也比较容易判断孩子的学习效果。
首先,编程≠当码农。它不光是一项技能,更是通过学习培养一种思维,一种思考问题的角度。
每一个新的领域都能给我们带来不同的新知识,手握新知识的我们同样也会获得新的能力,获得看待世界的新角度。编程也同样如此。
编程的本质就是:和电脑对话,用电脑听的懂的语言,告诉它我想让它做的事。
与电脑沟通时,就不可以像我们平时与人沟通一样去交流,咱们人类的天性里充满了感性、随意、散漫、喜欢八卦、爱听故事。而它需要有更多的条理性。所以,要和电脑沟通对话,我们同样需要把自己变得理性严谨起来,从电脑的角度去思考问题,这就是我们所说的编程思维。
这种思维可以给孩子带来什么好处呢?以贪吃蛇为例:
贪吃蛇游戏规则:用上下左右键控制蛇的方向,寻找吃的东西,每吃一口就可以得到一定的积分,在这个过程中,蛇的身子会越吃越长,蛇身越长难度就会越大,蛇的头部不可以碰墙,也不可以碰到自己的身体,到了一定分数,即可过关。
1. 拆解问题的能力
要写一个关于“贪吃蛇”的游戏,刚拿到这个题目,该如何入手?就想上面说到的,要想法子让电脑听懂你的想法。要先做什么,有哪些步骤等,我们先要做的是把这个大问题给拆成小问题。
拆解
在这个程序中,电脑主要处理两件大事:
1.处理输入- 收集用户操作信息
2.输出响应- 根据不同的输入,做出不同响应
再拆解
1.输入- 用户的操作可以有上、下、左、右四种键位
2.输出- 相应地,贪吃蛇也要往上、下、左、右四个方向走动
我们继续拆解第二点
当贪吃蛇每走一步,可能会出现以下几种情况:
1.吃到苹果
2.撞到墙
3.撞到自己
4.什么都没发生
再把第一点吃到苹果抽出来进行拆解
在这个步骤中,电脑可能做的事情:
蛇张开嘴巴-苹果被咬掉-播放吃苹果的声音-蛇闭上嘴巴-身体长长一截
看起来很简单的一个小程序,拆分后居然会有这么多步骤,但是这仅仅是其中一条分支。孩子学习编程的过程,就是不断地训练他把复杂、庞大的问题拆解理顺的过程。
在生活中,这种思维也可以用到,通过拆解大问题,从而转化为一个个小问题,一一攻破,这样大问题也就解决了。具备这种能力,在之后做事过程中也会比较有耐心,处理事情方面也可以做到有条不紊。
2. 发现并整合“重复规律”的能力
比如在“贪吃蛇游戏中吃苹果”这一动作,在程序中会多次发生,无论是从哪个方向,都是同样一组动作,那么这组动作就可以打包一个组为“吃苹果”。如果需要可以直接运用这个组,而不用再把它包含的动作想一遍。
在编程学习过程中,孩子可以一直进行这样的训练,发现一些可以重复的单元,把它整合起来,让计算机去做重复。这样一来不仅节省时间,还可以大大提高我们的做事效率。
那些做事麻利效率高的人,很多就是具备了这个能力。
创新不一定是做出一个前所未有的新产品,对现有的模式进行优化改进,也是一种创新。而发现并整合“重复规律”的能力更容易让我们找到创新的机会。
3. 逻辑思维能力
逻辑思维中有个非常重要的原则叫做MECE(Mutually Exclusive and Collectively Exhaustive),意思就是“相互排斥且整体完备”,也就是“不重复,不遗漏”。比如下面右图是遵循了MECE原则的,左图就没有。
在编程过程中,处处要考虑和遵循MECE原则。比如在贪吃蛇的程序里,蛇每往前走一步,可能会出现4种情况:
a. 吃到了苹果
b. 撞到墙
c. 撞到自己
d. 什么都没发生
这4种情况是互斥的,比方说吃到苹果的时候就不可能撞到墙,那么程序中就不能让苹果出现在墙上;而且,这4种情况覆盖了所有可能性,在写程序时如果只考虑了其中的2种或3种,就“缺胳膊少腿”了。此外,编程过程中还会涉及到很多处理“与”、“或”、“非”等布尔逻辑操作。比方说“蛇没有吃到苹果”与“蛇没有撞到墙”,就等价于,“蛇撞到自己”或“什么都没发生”。
这些思考过程对于孩子来说,都是非常好的思维逻辑训练。
4. 调试纠错能力
压轴总要放到最后讲:
前面所提到编程能带给孩子的几项能力,相比这点来讲,纠错能力是最重要的,也是每个孩子所需要的。
做任何事情,都无法做到一次就完成的尽善尽美,在运用程序过程中发现问题,这时就需要孩子去发现并且解决。
程序的世界很纯粹,对就是对,错就是错,没有什么模糊的概念。不像艺术等观众仁者见仁智者见智,不一定可以证明你的作品不好或者是哪里出现了问题,自己也不知道如何改进。
然而,程序中的bug也不是那么轻易就可以找得到,常常需要跟着顺序再走一遍,观察每一步运行结果。这中间需要很多耐心、观察力和专注力,对孩子的抗挫折能力也是一种很好的磨练。
久而久之,他更关注于提高自己纠错的技能,而不是害怕、回避或者掩盖错误。孩子会越来越懂得,有错很正常,只要能把它揪出来,改正就好。
有些人总是在不断进步,因为他学会了如何回溯、调试、纠错进而提升自己。
以上这些能力,其实并不是编程特有的(比如数学本身就可以锻炼思维),但它们却是在编程这件事情上集体出现的,并且是以有趣的、孩子喜欢的方式。所以要是你问我,孩子有没必要学编程,我会很肯定地回答,有必要,因为它的确对孩子综合能力培养有着自己独到的作用。