逻辑思维能力
逻辑思维中有个非常重要的原则叫作MECE(Mutually Exclusive and Collectively Exhaustive),意思就是“相互排斥且整体完备”,也就是“不重复,不遗漏”。比如下面右图是遵循了MECE原则的,左图就没有。
在编程过程中,处处要考虑和遵循MECE原则。比如在贪吃蛇的程序里,蛇每往前走一步,可能会出现4种情况:
a. 吃到了苹果
b. 撞到墙
c. 撞到自己
d. 什么都没发生
这4种情况是互斥的,比方说吃到苹果的时候就不可能撞到墙,那么程序中就不能让苹果出现在墙上;而且,这4种情况覆盖了所有可能性,在写程序时如果只考虑了其中的2种或3种,就“缺胳膊少腿”了。此外,编程过程中还会涉及很多处理“与”、“或”、“非”等布尔逻辑操作。比方说“蛇没有吃到苹果”与“蛇没有撞到墙”,就等价于,“蛇撞到自己”或“什么都没发生”。

这些思考过程对于孩子来说,都是非常好的思维逻辑训练。
调试纠错能力
总要放到较后讲:
前面所提到编程能带给孩子的几项能力,相比这点来讲,纠错能力是较重要的,也是每个孩子所需要的。
做任何事情,都无法做到一次就完成得尽善尽美,在运用程序过程中发现问题,这时就需要孩子去发现并且解决。
程序的世界很纯粹,对就是对,错就是错,没有什么模糊的概念。不像艺术等观众仁者见仁智者见智,不一定可以证明你的作品不好或者是哪里出现了问题,自己也不知道如何改进。
然而,程序中的bug也不是那么轻易就可以找得到,常常需要跟着顺序再走一遍,观察每一步运行结果。这中间需要很多耐心、观察力和专注力,对孩子的抗挫折能力也是一种很好地磨炼。
久而久之,他更关注于提高自己纠错的技能,而不是害怕、回避或者掩盖错误。孩子会越来越懂得,有错很正常,只要能把它揪出来,改正就好。
有些人总是在不断进步,因为他学会了如何回溯、调试、纠错进而提升自己。
以上这些能力,其实并不是编程特有的(比如数学本身就可以锻炼思维),但它们却是在编程这件事情上集体出现的,并且是以有趣的、孩子喜欢的方式。所以要是你问我,孩子有没必要学编程,我会很肯定地回答,有必要,因为它的确对孩子综合能力培养有着自己独到的作用。