做少儿编程一段时间以来,慢慢地曹老师发现,开始有家长不满足只让孩子学Scratch了,这通常是对编程稍微知道一些的家长。
他们会问这样一个问题:孩子已经反复做了大量Scratch拖模块式的编程练习,什么时候才可以开始学习写代码啊?
这个问题,说实话,还真不是一句话能回答好的。
难回答,主要有主观和客观两个方面的原因。
主观上来讲,孩子,这个特殊的个体,他反复做了大量Scratch练习,到底学到了什么水平呢?这需要对他的Scratch水平有一个掌握。
之所以让孩子从Scratch开始编程学习,这是现在最方便、最通行的编程启蒙的做法(某些对Scratch IDE的改装升级另当别论)。
为什么不直接学Python等纯代码语言?主要是因为孩子年龄小,而使用Scratch操作起来非常方便,容易出成果,给出及时的反馈,在这个过程中教授一些基本的编程知识和概念。
可是,要让孩子学Scratch学到什么程度才可以接触Python呢?那得看Scratch到底学得怎么样了。一般来说,无论谁学习编程,要学的东西主要分四个方面:
一是学习计算机和编程软件的基本操作。
这一点在孩子这里显得特别重要。会使用鼠标和键盘,会操作Mac或Windows,打开编程的工具,熟悉Scratch软件的各个操作区,新建、保存文档等,这些都是基本操作。
二是学习操作类代码块的使用。
在Scratch里我们主要是操作舞台上的角色做各种动作、换各种造型、发出各种声音等,同时还可以控制舞台背景。
这些代码块的使用是一个程序基本的构成要素,无论是一个计算器这样的程序,还是一个飞机大战这样的游戏,我们看到的和听到的,无非不过是各种角色、背景外观在变,在发出不同的声音。这些东西就好比我们修建整座摩天大楼的砖块。
三是学习对上面基本操作类代码块的控制方法。
计算机的优势是能够自动化地进行高速运算。自动化的前提就是它能够以一定的规则控制所有的操作。有规律的操作,循环执行,在一定条件下的操作,指明它进行的条件,循环和条件是两种最基本的控制方法。
第四点的要求更高一些了。在学了上面这些东西后,我们的目标是什么?目标绝不仅仅是让孩子们照着老师的代码,无意识地拖成功,让画画动起来这么简单。
Scratch之所以被全球至少2000万的用户使用,最主要的原因是它降低了入门编程的门槛不说,还打出了“Imagine, Program, Share”,即“想象、编程、分享”这样的口号,着重对学习者创造力的培养。Scratch相比一般编程语言所做的简化,都在为这一目标服务。
而创造一个东西,除了知道使用什么材料、如何使用之外,最重要的是什么呢?曹老师认为,有两个:其一是想要表达的思想,其二是如何表达这样的思想。
这跟写作文一样,中心思想是什么?没有中心思想的作文,都是在玩文字游戏。
如何表达这一思想,这一点跟上面的对操作类代码块的控制方法还不完全一样。上面所说的方法是更具体层面的,而如何表达,是更整体的考虑,相当于写作文时的修辞手法和谋篇布局。会用词造句,写几句通顺的话,不一定能写出来优秀的作文,也是同样的道理。
如何将自己的想法,一点一点拆分,有条理地用Scratch去实现,是很多学生会了一些基本操作后,遇到的一座大山。
简而言之,如果一个孩子是从Scratch起步,如果他学了Scratch,并不能用Scratch的方法实现自己的想法,没有达到“创作自由”,曹老师非常不建议这时开始Python代码的学习。
(有一些东西用Scratch根本无法实现,这是Scratch的局限性,不是孩子的局限性)
下面再说一说,在客观上,想让孩子像成人一样使用纯代码的Python编程,不可避免地面临着三个困难。
一是纯代码有着繁琐的语法规则和更多的形式变换。
哪怕是简单如Python这样的代码语言,它也有那些什么地方该换行,什么地方该空格,什么地方该加冒号,什么地方用括号,什么地方该缩进多少等等规范。
如果孩子本身具有,或已经在Scratch的学习过程中,修炼出了细致谨慎、不骄不躁的品质,那么搞定这些繁琐的语法规划就不在话下了。
因为纯代码语言是更实用的语言,所以每一种语言都可能为满足需求,同一个功能有很多变换形式。
比如for循环,就有for i in range(10)这样的写法,也有for e in obj这样的写法。同类的这些例子还有很多,这都是学完Scratch的孩子,必须面临的挑战。“茴香豆”的“茴”有四种写法,每一种都不能少。
第二个拦路虎,是纯代码语言需要以类似英语的方式书写,需要孩子有一定的英语基础。
当然如果你接受用拼音写变量名、函数名,那我没法强求你也认同这一条。不过最起码的英语,比如if, else, def, import, return, get……这些总是要搞懂的吧!
孩子英语基础越好,学习Python将会更容易。我教过国际学校和知名公立学校的孩子,也教过普通公立学校的孩子。
同样是教他们学习Python, 英语好的孩子,很多地方不需要过多解释,自然就掌握了概念,而英语不好的,可能解释好久都不一定吃透。
一个例子就是:function,我要说这是一个“函数”,那孩子肯定会一脸茫然,而直接让孩子用英文理解,这就是实现一个“功能”,瞬间就接受了。
三是纯代码语言的背后有着比Scratch编程更庞大的知识应用体系。
Scratch是一个玩具型的编程工具,使用它所能做的一切,都是在这个小小的舞台上,发生的一些事情都不会太复杂。(当然也有接口可以接上真实的机器人)
可纯代码的编程语言,用纯代码编写,只是表象,它能做的事情,才是真正的“水下冰山”。
开发网站、图片处理、动画生成、科学计算、文件处理、游戏开发……Python可以做的事情实在太多,而无论做哪一方面的事情,都有一大堆的知识,需要在编写代码之前或同时了解吃透。
现在很多平台、很多机构都非常取巧地选用游戏入门,把很多底层的操作经过打包封装后,只露出简化了的操作,供孩子学习时使用,这也是没有办法的办法。
但是在这个过程中,曹老师发现了两个问题,在这里抛出来,供同行们思考。
其一,如何在简化孩子入门Python难度的同时,保证孩子学到Python真正重要的东西?
其二,如果保证孩子能够顺利往下学Python,并且还能得到与先前学习Scratch时不一样的体验?
孩子如果觉得,这东西用Scratch都能写,为啥还非得用Python写?比如角色碰撞检测。或者为什么用Python写这么难,Scratch不是很容易吗?比如说颜色的碰撞检测等。
作为总结,想说的是,要面向更大范围青少年的Python课程,从理念,到平台、工具,再到课程,仍都需要持续的改进。