首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当儿童编程遇到数学

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

——本杰明·富兰克林

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

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

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

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

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

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

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

编程与数学

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

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

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

程序是逻辑思维的训练营,写程序有助于培养孩子的逻辑思维能力;编程是问题和目的导向的,有助于提高孩子解决实际问题的能力;程序的核心是算法,算法离不开数学和计算思维,编程有助于强化孩子对数学重要性的认识,并培养孩子的计算思维;程序有错就不会按编程者的意愿运行,这可以让孩子意识到粗心的危害,并逐步养成细心的习惯;从玩游戏到编写游戏,孩子从游戏的俘虏一跃成为游戏的创造者,对游戏的认识将有本质的改变,这对戒掉游戏瘾大有裨益。

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

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

在他们的背景图中,洞一共有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-6中的数作为表的位置下标。如果需要奇数,就到奇数表中的对应位置去找对应的数并返回;如果需要偶数,就到偶数表对应的位置去找对应的数并返回。可别小看这一做法,它蕴含了“映射”这一数学和计算机领域都频繁使用的原始思想。

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

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180308C0K7C600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com