财新传媒 财新传媒

阅读:0
听报道

告诉我,我会忘掉。教导我,我会记住。让我参与,我会掌握。

——本杰明·富兰克林

 

孩子什么时候适合学习编程?

以前,我一直认为编程对一个不满9岁的孩子来说过于超前了。直到昍加入了由几个老师的娃娃组成的一个编程学习小分队,在院里几位热心的大二小姑娘的带领下学习了一个学期的编程后,我的想法被彻底颠覆了。

 

寒假,在一次课程后,孩子居然拿着自己编写的一个像模像样的打地鼠游戏让我玩。

    

正巧那几天看到一篇讨论大学应该开设哪些编程语言的文章,里面提到了一个惊人的事实:在39000多名受访的开发人员中,有26%的人是在5到15岁开始编写代码的。其中,英国在5-10岁开始编码的比例最高。英国成为第一个要求5岁以下的孩子参加编程课来实现课程现代化的国家,他们的政策制定者认为,尽早让孩子接触编码是打造软件职业门户、了解影响日常生活的计算思维和软件原理的重要一步。

 

孩子们用的编程语言叫Scratch。这是一款由麻省理工学院(MIT)专为少儿设计开发的图形化编程工具。它的特点是不用敲代码,构成程序的命令和参数通过积木形状的模块来实现。用鼠标拖动模块到程序编辑栏,然后再拖动组合,就可以构建动画、故事、乐器和游戏等程序。

 

小孩子从小就喜欢搭积木,昍也不例外,从小就痴迷于乐高。没想到,原来编程也可以和搭乐高一样有趣。原本枯燥的程序语句在这里变成了一个个积木块,但拖拽和组合这些积木块保持了程序的结构化,免去了我们学习编程的时候出现的括号不匹配等程序结构问题。Scratch有多火?从下面的2018年1月份编程语言排行榜中,我甚至都找到了它的位置!

    

我发现,这个过程中,小孩子很快就能够理解程序设计里的基本控制流程:如果-那么-否则,重复执行,以及逻辑操作 and 和 or等。下图中右边就是代码页面,看上去是不是跟搭积木差不多?

编程与数学

    ——计算思维与数学思维的碰撞

群里有个朋友说他家孩子痴迷于玩“我的世界”游戏。昍也喜欢玩,但自从学了Scratch编程后,他的玩法变了。Scratch官网【1】的创新社区允许全球的Scratch学习者们分享自己的作品,关键是:包含源程序。昍在其中找到了一款“我的世界“游戏,整个寒假的大部分时间,他都痴迷于修改人家的源码,改变游戏的某些行为,自娱自乐。除了控制一下他持续看电脑的时间,我都对他不加任何干涉,任由他自己去闷头研究。

 

 

  在我看来,儿童编程具有下面一些好处:

  1. 程序是逻辑思维的训练营,写程序有助于培养孩子的逻辑思维能力;

  2. 编程是问题和目的导向的,有助于提高孩子解决实际问题的能力;

  3. 程序的核心是算法,算法离不开数学和计算思维,编程有助于强化孩子对数学重要性的认识,并培养孩子的计算思维;

  4. 程序有错就不会按编程者的意愿运行,这可以让孩子意识到粗心的危害,并逐步养成细心的习惯;

  5. 从玩游戏到编写游戏,孩子从游戏的俘虏一跃成为游戏的创造者,对游戏的认识将有本质的改变,这对戒掉游戏瘾大有裨益。

 

回到数学本身。编程离不开数学,昍在写程序的过程中也体会了一次。

 

小老师在打地鼠游戏课后布置了一个小问题:在打地鼠的游戏中,增加一种动物,比如猫,让猫和地鼠轮流出现,要求猫只出现在奇数号洞,而地鼠只出现在偶数号洞。

 

在他们的背景图中,洞一共有12个。孩子知道程序里可以随机生成一个1-12中的数,但却不知怎么才能随机生成一个1-12中的奇数或偶数。无奈之下只能请教我了。

 

当然,从数学的角度,这完全不成为一个问题。数学很多时候侧重于回答能或者不能,比如著名的哥德巴赫猜想,只要回答一个合数能不能分解成两个质数之和并给出证明即可,至于怎么分解,有时候数学家并不关心。但计算思维需要回答怎么做,需要告诉很笨的计算机一步一步如何操作,因此重点在于问题求解的过程和步骤。

 

我给了他三种方法。

 

方法一:随机生成一个1-6中的数字k。如果需要生成奇数,则结果是2k-1, 如果需要生成偶数,则结果是2k。这也是他最能理解的一种方法。

 

方法二:随机生成一个1-12中的数字k。如果k的奇偶性和所需要生成的数的奇偶性相同,则直接返回k。否则,k的奇偶性与所需要生成的数的奇偶性不同。此时,如果k是奇数,则返回k+1; 如果k是偶数,则返回k-1。本质上,这种做法是把12个数的每相邻两个看成一组(1, 2), (3, 4), (5, 6), (7, 8),(9, 10), (11, 12),随机生成的数k必定落在这6组中的某一组中。

 

方法三:构造两个表{1, 3, 5, 7, 9, 11}和{2, 4, 6, 8, 10, 12}。随机生成一个1-6中的数作为表的位置下标。如果需要奇数,就到奇数表中的对应位置去找对应的数并返回;如果需要偶数,就到偶数表对应的位置去找对应的数并返回。可别小看这一做法,它蕴含了“映射”这一数学和计算机领域都频繁使用的原始思想。

 

昍编写的第二个程序是大鱼吃小鱼。怎么生成小鱼的运动轨迹?这又是一个数学不需要回答但计算机需要实现的功能。小鱼下一个出现的位置与它当前的位置相关,但又要具备随机性。孩子发现这个可以分解为两步来实现:第一步,确定小鱼的运动方向,即随机生成一个[0°, 360°]的度数;第二步,确定小鱼在该方向的移动距离,比如随机移动[3, 10]中的一个数所表示的距离。

【1】https://scratch.mit.edu/

 

话题:



0

推荐

昍爸

昍爸

37篇文章 2年前更新

昍爸,曾获初中和高中全国数学奥林匹克联赛一等奖,江苏赛区第一名,高考数学满分,现在大学计算机专业任教,平时注重提升孩子对数学的自我思考与应用能力。此公众号将伴随昍昍的成长,分享寓教于乐、学以致用的数学教育方式。微信公号:昍爸说奥数(xuanbamath)。

文章