不知道你有没有发现,最近在各种论坛啊,微信朋友圈多了不少关于少儿编程乃至幼儿编程的课程广告。
我花了一些时间去参加了其中一些机构的课程,对其中的一些教学体系和课程安排做了一些研究,也发现了一点共同的问题。
我在这篇文章中会首先分析一下目前Scratch教学设计的一个问题,看过之后可以帮助家长甄别选择培训机构,其次我会介绍一个经典的水仙花数的算法,来看看如何用Scratch进行思维训练和算法学习。
先说一下好的方面吧,就是课程设计都比较有趣,利用游戏和平板的便捷操作吸引孩子的兴趣点,用兴趣来带动知识点的学习。
而不好的一点,是一些机构花了许多时间,甚至一个课程学期的时间,来对编程语言基本语法和图形化模块进行教学。
幼儿编程在于思维训练
因为幼儿编程最大的重点在于思维训练和兴趣培养,这也是为什么我们使用Scratch和其他一些图形化编程语言的原因:可以最大程度的降低对语法的依赖。
对图形化编程模块的了解其实不需要花很多的时间进行老师授课教学,我在之前的文章中分享过code.org等寓教于乐的系列学习,多玩一玩,小朋友就可以熟练操作了。他们可是计算机和互联网时代的原住民,熟悉过程会超乎家长的想象。
最近和北京从事信息学培训的朋友聊天中也谈到此事,在北京地区信息学竞赛的获奖同学中,很大部分是之前奥数的获奖学生,这也证明了编程最重要的是对思维的训练提升,而并非简单掌握一门和机器人对话的语言。
如何避免把Scratch编程教学沦为一种工具教学?
我在很多经典的初级算法题目中,筛选出一些适合小朋友的题目,可以借用编程过程,学习必要的数学知识,拓宽思路,了解计算机程序的神奇。
今天我们要解决的经典问题就是:如何寻找水仙花数?
水仙花数是一种神奇而自恋的数字。它有一个美丽的名字,也有一个奇妙的组成方式,它是指一个三位数,它的每个位上的数字的3次方之和就等于它本身,例如:1^3+5^3+3^3 = 153。你看看,它是不是特别的自恋,喜欢自己的数字?所以它也被叫做自恋数,自幂数或者阿姆斯特朗数。
对于年纪小一点的小朋友,家长要特别介绍一下三次方的概念。
当了解了三次方的概念之后,家长和小朋友们可以试试看,手动的寻找水仙花数是一件多么难的事情。例如一个三位数123,1^3=1, 2^3=8,3^3=27,加起来的和等于36,所以并不是水仙花数。
那么我们来体验一下编程的魅力吧,因为笨笨的穷举法正是计算机所擅长的事情之一。
穷举法,简单来说,就是一个一个试过去,每当找到符合要求的解,我就记下来,一直找到世界的尽头,这样就可以得到所有的解了。
当然在现实生活中,大部分问题都会有一个边界条件,比如这道题目,就是寻找三位数中的水仙花数,那么只要数到999就好啦。999这么小的数字,对于计算机来说简直的小菜一碟。
我们先看看用Scratch编写出来的效果吧,继续用经典人物来找出水仙花数。
穷举法一般是针对没有规律或者无法套用公式的问题。根据问题当中列出的部分条件,把所有符合条件的答案一一验证,进而得到答案的方法。
听起来是不是很笨?
然而这种笨笨的算法对于一些问题上也有很酷的应用,比如说计算机黑客常用的密码破解,常说的暴力攻击就是穷举算法。目前我们使用的各种用户名密码,密码的随机性越大,那么安全性就越高。只要用穷举法尝试的次数足够多,密码就一定会被破解,这也就是用时间来换取空间的算法设计。
我们回到题目本身,在三位数中寻找水仙花数,主要需要以下三个大步骤。第三步是优化步骤,要视情况而定。
问题解的可能搜索的范围:用循环或者循环嵌套的结构来实现;
写出符合问题解的条件;
优化程序:缩小搜索范围,减少程序运行时间。
第一步在可能搜索的范围内,用循环的方式列出每一个数字,如下图,我们使用了重复执行模块搜索到999为止。
接下来我们就按照水仙花数的要求,把这个三位数的每一位数字的立方和计算出来。通过这个代码编写,小朋友也会对立方这个概念有一个更加清楚的认识。
最后就是条件判断,看看这个数字符合水仙花数,如果是,就把它加到水仙花数的列表当中,如果不是就继续下一个搜索。
在上面的小视频中演示的效果,你可以直接下载代码来参考一下,完整的代码,请在公众号对话框输入关键字“水仙花数”进行下载。