儿童编程语言进化史
业内一致认为，可视化编程是教授给孩子们计算机科学和计算思想的最好方式，这样可以摆脱艰涩的编程语法，让孩子们在很小的时候就可以灵活地掌握软件编程的精髓。
Logo Scratch
61.172.240.228
呃…… 我以为现在儿童学python了，我小学时候是QBasic……
来自上海的 Chrome 50.0|Windows 7 用户
2016-06-13T10:13:56.000
业内一致认为，可视化编程是教授给孩子们计算机科学和计算思想的最好方式，这样可以摆脱艰涩的编程语法，让孩子们在很小的时候就可以灵活地掌握软件编程的精髓。
随着奥巴马总统的全民学习计算机（#CSforall）的倡议以及人们对 STEM （<ruby> 科学 <rp>  （ </rp> <rt>  Science </rt> <rp>  ） </rp></ruby>、<ruby> 技术 <rp>  （ </rp> <rt>  Technology </rt> <rp>  ） </rp></ruby>、<ruby> 工程 <rp>  （ </rp> <rt>  Engineering </rt> <rp>  ） </rp></ruby>和<ruby> 数学 <rp>  （ </rp> <rt>  Mathematics </rt> <rp>  ） </rp></ruby>）的日益关注，表明我们到了需要建立儿童计算机教育的标准和最佳实践的时候了。业内一致认为，可视化编程是教授给孩子们计算机科学和计算思想的最好方式，这样可以摆脱艰涩的编程语法，让孩子们在很小的时候就可以灵活地掌握软件编程的精髓。


![](/data/attachment/album/201606/04/231646dvnj52wx84vo8omm.jpg)


### 改进中的 Logo 语言


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


![](/data/attachment/album/201606/04/231729trtcni2txr3lrnwl.png)


### 越来越年轻化


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


![](/data/attachment/album/201606/04/231730ufotplutomrzmmom.png)


### 机器人编程


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


![](/data/attachment/album/201606/04/231731duvzp6fp6ip6ngii.png)


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


![](/data/attachment/album/201606/04/231732imbd9dgprt69t3rg.png)


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


### Logo 之上的编程思想


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


![](/data/attachment/album/201606/04/231733g41znh8pf8iclk5q.png)


除了这些基于模块的编程语言，还有一种新的语言采用了不同的方式来教孩子们编程。2015年，[Wonder Workshop](http://makewonder.com/) 设计一个名为 Wonder 的新编程语言，采用的是[基于流的编程](http://www.jpaulmorrison.com/fbp/fbp2.htm)界面。Wonder 可以让学生们将注意力放在一些预先定义好的功能单元（或语句）的连接上，来构建一个<ruby> 状态机 <rp>  （ </rp> <rt>  state machine </rt> <rp>  ） </rp></ruby>。在任何时刻，机器人都是一个单一的给定状态；它会做一些操作，给一些输入就会让它改为做不同的操作。


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


![](/data/attachment/album/201606/04/231733a0czhojc62a35c2o.png)


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


![](/data/attachment/album/201606/04/231735x80os59obfwmgn0f.png)


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


随着机器人应用的越来越广泛，教师们正在接受[培训](http://www.fastcompany.com/3056644/most-creative-people/as-schools-emphasize-computer-science-how-do-we-teach-teachers-to-code)，把基于模块的编程作为教授孩子们计算机科学的标准。随着它进入到越来越多的课堂，我们应该思考这是否是一个正确的方向？还有没有其他更好教授孩子们计算机编程的方法。

