儿童编程语言进化史

儿童编程语言进化史

随着奥巴马总统的全民学习计算机(#CSforall)的倡议以及人们对 STEM ( 科学 Science 技术 Technology 工程 Engineering 数学 Mathematics )的日益关注,表明我们到了需要建立儿童计算机教育的标准和最佳实践的时候了。业内一致认为,可视化编程是教授给孩子们计算机科学和计算思想的最好方式,这样可以摆脱艰涩的编程语法,让孩子们在很小的时候就可以灵活地掌握软件编程的精髓。

改进中的 Logo 语言

在过去的五十年,设计师们不断改进 Seymour Papert 创造的 Logo 编程语言(LCTT 译注:应该有同学见过那个“小乌龟”),出现了一大批界面稍有不同而核心思想相同的编程语言。当前的教学标准是基于 模块 blocks 的编程方式,这要归功于 MIT 的 Scratch 编程语言的流行。在 CSTA 的 K-12 计算机科学教学标准中,对于 K-5 年级,要求达到“使用基于模块的可视编程语言来构建和测试解决方案”的编程能力。

越来越年轻化

计算机科学教育的另外一个趋势是受众越来越年轻。研究表明,才仅仅五岁的孩子就能够掌握计算机编程的概念,所以这是必然的趋势。要教还不认识字的孩子们学习编程,就需要避免使用文字。最近像 Scratch Jr 和 Code.org 的第一阶段课程就在基于模块的编程语言中使用图标替代了文字。

机器人编程

看见你的代码出现在生活中是一件神奇的事情。早在本世纪初,乐高和 MIT 就合作了一个项目,将基于模块的编程带到了现实世界。学生们可以在计算机上写程序,然后将其下载到他们搭建的机器人里。早期的 RIS( 机器人创造系统 robotics invention system )看起来十分像 Scratch。

乐高机器人 Lego Mindstorms 2013 版The 2013 中虽然变得更加复杂,但是其大部分所做的事情同之前的版本一样。现在可以给模块增加输入参数,以指定距离、时间、输出等等。

Martin Exner 创建了一幅简明的信息图,概括了由 Logo 以及更近一些的 Scratch 衍生而来的这些编程语言。许多 Logo 语言的衍生语言都是围绕着特定场景的,比如创建游戏、制作 3D 故事情节环境、绘制图片、机器人编程,甚至可以控制虚拟鱼缸。这种方式吸引了许多不同的孩子们,但是许多孩子在学习编写一段程序仍然感觉有些困难。

Logo 之上的编程思想

在现实生活中,计算机编程通常需要考虑各种类型的输入,并且同时还要动态处理各种逻辑判断。让我们举一个判断起床后要做什么的简单例子:如果是周六日,我们会去外面玩;如果是周一,我们需要穿上运动服;如果是周四,我们需要倒垃圾;而不是周末的日子,我们需要去上学。下面展示了用 Scratch 实现的逻辑。

除了这些基于模块的编程语言,还有一种新的语言采用了不同的方式来教孩子们编程。2015年,Wonder Workshop 设计一个名为 Wonder 的新编程语言,采用的是基于流的编程界面。Wonder 可以让学生们将注意力放在一些预先定义好的功能单元(或语句)的连接上,来构建一个 状态机 state machine 。在任何时刻,机器人都是一个单一的给定状态;它会做一些操作,给一些输入就会让它改为做不同的操作。

下图展示了如何使用基于流的方式来判断起床后的任务。

除了摆脱了线性编程范式,这种编程语言还提供了一种不同的计算思想,可以让学生们以一种容易掌握的方式来模拟响应现实中的变化。学生们可以更容易的把问题分解成小的部分,然后用这些部分来解决复杂的问题。学生们在解决问题时只需要一次关注一个问题。这个过程称之为分解,则既是计算机领域的基础知识,也是 Wonder 的设计目的。

在我们的每天的生活中有很多机器人和状态机的例子,而且它们变得越来越常见了。当你投入了正确组合的钱币之后,自动售货机就给你对应的食物。自动驾驶汽车会根据它周围的障碍物来决定该怎么移动。状态机也可以进一步对大量问题进行建模,包括语言解析、人工智能、通讯协议、游戏中的角色变化,甚至神经网络。

随着机器人应用的越来越广泛,教师们正在接受培训,把基于模块的编程作为教授孩子们计算机科学的标准。随着它进入到越来越多的课堂,我们应该思考这是否是一个正确的方向?还有没有其他更好教授孩子们计算机编程的方法。