编程启蒙教育思考

本文主要分享本人关于编程启蒙教育的思考。

为什么要学习编程呢?我相信在未来社会,大部分工作都会用得上编程。而且编程能够帮助养成逻辑、严谨的思维习惯。

那么小孩子可以学会编程吗?我相信在孩子具备一定的逻辑和数学基础之后,循序渐进一定能够学会。

这里我将编程启蒙教育分为三个阶段。

阶段一: 编程初体验(小学二、三年级或以上)

这一阶段的主要目标是引领孩子入门,大致明白什么是编程,以及编程的基础概念。

这一阶段可以采用一些编程机器人或者编程游戏app作为教学工具,培养孩子对编程最初的感觉。例如有一种编程机器人,孩子可以通过编程向机器人发送“上下左右”的移动指令:

  • 程序“存储”在一块木板上:没错,就像当年的纸带程序一样,是可以拿着在手上的。
  • 能够控制一个机器人向4个方向移动:让孩子直观感受到程序能够做什么。
  • 能够定义和调用一个四个动作的函数:这个设计非常厉害,让孩子接触函数的概念。

当然,市场上有很多编程入门教具或者app。无论是哪一款,只要能够达到让孩子了解基本编程概念的目标,都是可以的。

这一阶段建议至少花一个学期时间。有朋友可能会觉得这么简单的概念要花一个学期?其实这些概念对从来没有编程过的孩子来说并不简单,例如程序的指令、顺序执行、函数、程序状态、流程图等等,这些都是编程最基础的概念,不要着急,要慢慢去消化、理解。

这一阶段可以学习程序流程图,甚至让孩子尝试先画流程图,再编程实现。

有人会问能不能更早开始学习编程?这个我不太确定,个人感觉难度会比较大,可能也没太多必要。毕竟要理解这些编程概念的话,孩子要具备一些最基本的逻辑思维能力和数学知识,揠苗助长可能会得不到期望的效果。当然这只是个人想法,事实未必如此。

阶段二:可视化编程(小学三、四年级或以上)

这一阶段主要学习变量赋值、条件语句、循环控制等基础概念。个人觉得可以选择Scratch,原因有:

  • Scratch是可视化编程,相对容易入门和理解。
  • Scratch的图形编程能够帮助孩子学习二维平面坐标系的概念:这个是更像是数学范畴的概念,不过大多数的图形和游戏编程都会用到。
  • Scratch采用事件驱动模型编程:一方面,事件驱动模型简化了编程流程的设计。另一方面,事件驱动也是应用非常广泛的编程概念。

有朋友觉得为什么要学可视化编程,为什么不直接上Python或其它语言?个人感觉,这个阶段让孩子像写作文一样写出程序代码难度偏大。我们学习编程,最重要是学习到概念、方法。至于是可视化编程,还是文本编程,并不影响到这个目标。而可视化编程可以帮助孩子更快达成这个目标。

这一阶段需要多长时间?个人的实践,一个学期应该足够了。如果孩子对Scratch的游戏设计特别感兴趣的话,我也不反对投入更多时间。毕竟多实践总是好的。

经历过可视化编程之后,我们就可以进入下一阶段,真正的编程了。

阶段三:孩子的第一门编程语言(小学四年级或以上)

从现在开始,孩子将会像程序员一样写代码了!

这一阶段孩子将要接触到更多的概念,例如:

  • 基本的数据结构:数字,字符串,数组等
  • 变量
  • 理解程序的循序执行概念
  • 流程控制(条件语句,循环,循环终止)
  • 函数、函数的调用和嵌套
  • 能够读懂一段程序
  • 能够对简单的问题进行编程建模
  • 能够开发一些简单的游戏

注意上述不是一个完整的体系,只是作为举例。

但是,程序语言有很多,而选择第一门编程语言很重要,因为这门语言将会成为孩子编程的“母语”。个人偏好选择Small Basic作为第一门编程语言,原因有:

  • Small Basic能够支持帮助孩子掌握上述的概念。
  • 根据Small Basic主页的介绍,Small Basic是唯一的为帮助学生从可视化编程过渡到文本编程而设计的语言。
  • Small Basic不支持太多的高级语言特性,例如:
    • Small Basic支持GOTO语句:别以为这是个缺点,这是低级语言(例如汇编语言)的机制,了解和正确运用GOTO语句将能够帮助孩子更接近于计算机编程的本质。
    • 缺乏面向对象的支持,甚至连break语句都没有,要通过GOTO来实现,但我却认为这是优点,因为虽然Small Basic不支持类,却提供了TextWindow等一些现成的对象,这将会帮助孩子将来学习面向对象编程。

有朋友觉得,为什么不选择流行的Python或者其他语言,而要选择偏冷门的Small Basic呢?对此我的观点是:

  • Small Basic既具备了一些低级语言的特性(例如GOTO),同时也没有引入一些高级语言的特性(例如面向对象、break语句等)。我认为作为一门面向教育的语言,其火候控制的恰到好处,需要的功能,不多也不少,刚刚好。既能帮助孩子掌握最重要的概念,也避免了分散孩子的注意力或者增加学习难度。
  • 虽然Python很强大,业界很流行,但我认为要把编程教育和编程职业区分开来。Python是很强大,但不要着急,我们不应该期待孩子很快成为职业程序员,而应该给孩子非常充分的时间,慢慢地去学习所有的概念。例如,虽然面向对象很重要,但让孩子过早接触的话,增加了不必要的学习难度。我反而觉得,应该让孩子去写大量的面向过程的程序,这些程序看起来可能看起来很业余、不专业,但是没有关系,在写了足够多的代码之后,孩子自然而然地会产生优化程序地需求,那个时候再学习专业的编程语言也不迟。

当然,如果你希望选择Python或其它语言作为第一门编程语言,我也是完全赞同的。无论选择了哪种语言,我们的初衷是让孩子掌握编程的概念,以及逐步形成编程思维、编程建模的能力和习惯。

我觉得可能需要用上一、两年时间,才能完成这一阶段的目标。不要着急,关键是要打好坚实的基础。

阶段四:第二门语言、游戏编程、数据结构和算法

这一阶段我会考虑让孩子学习专业的编程语言,以及数据结构和算法,也让孩子做一些相对复杂的游戏作为实践项目。(这一阶段等积累足够心得再分享)

留下评论