儿童编程语言的进化史

2016-05-29 伯乐在线/周树强 Python开发者 Python开发者

(点击上方公众号,可快速关注)


英文:June

译文:伯乐在线 - chowchowT^T

链接:hhttp://blog.jobbole.com/101515/


奥巴马“计算机从娃娃抓起”的倡议和人们对科学(Science)、技术(Technology)、工程(Engineering)、数学(Mathematics)教育日渐增长的关注都说明了一个问题,那就是,为了教导孩子们学习计算机知识,我们需要建立一套标准,还要找到好的教学方案。在工业界,人们普遍认为,要让孩子学会些什么,最好的方法就是使用可视化的编程语言,这样的话,即使是年纪很小的孩子也不必纠结于语法问题,而可以自由创造,同时掌控着自己编写的软件。


Logo 语言的更新换代


在过去 50 年里,设计师们以 Seymour Papert 创造的 Logo 语言为基础,造出了一大堆编程工具,它们虽然在界面上稍有不同,但其目的都是为了引导孩子们对编程进行思考。同时,由于 MIT 设计的 Scratch 的流行,基于模块的编程方法便成为了教学的标准。 在 CSTA 为中小学生制定的计算机课程教学标准中,也明确地将“在基于模块的可视化编程语言上进行构建和测试的能力”用于评估小学 5 年级学生的编程水平。



趋向幼龄化


引入机器人技术


看着自己写的代码变成现实是件很神奇的事。在本世纪初,乐高 和 MIT 合作了一个项目,致力于将基于模块的编程带入到现实世界中。学生可以在电脑上写程序,然后把代码下载到他们搭建的机器人上。早期的 RIS (机器人发明系统)和 Scratch 十分相似。



2013 年推出的乐高机器人虽然变得更加复杂,但工作原理仍然不变。现在学生们能够给组件增加输入参数,用来指定距离、时间、输出和其它的一些特性。



Martin Exner 在 Logo 和更晚一些的 Scratch 的启发之下,发明了这种简单的信息图,它被用来描述可视化的编程工具。


事实上,Logo 语言的大部分衍生产品都是为了特定的场景而被设计出来的:用于游戏、创建 3D 场景、画图、对机器人进行编程甚至是用来操纵一个虚拟的鱼缸。


但即使这些东西能够吸引许多不同的孩子,很多小孩在之后学着编写语句时仍会觉得很难。


超越 Logo


在现实世界里,计算机程序总是需要考虑一大堆的输入,以及一个逻辑条件是否成立。举一个例子,我们要决定今天需不需要早起。如果今天是星期六或者星期天,那么我们就会出去外面玩。如果今天是星期一,我们就得去收拾运动服。如果是星期四,就得倒垃圾。另外除了周末之后的日子,都要上学。下面这幅图展示了如何使用 Scratch 对这个问题进行解答。



除了基于模块的编程方法之外,还有一种新的语言采用了不同的方法来教孩子编程。在 2015 年,Wonder Workshop 设计了一种流式的编程语言,叫做 Wonder。Wonder 让学生将注意力放在多个功能单元之间的连接,通过这种方法来创造一个状态机。这个状态机在任意时刻都只能处于一个状态,如果它正在处理某个任务,给定一个输入就可以让它改变状态去做一些其它的事情。


下面这幅图说明了如何使用流式的方法解决之前的起床问题。



除了使学生们摆脱了线性的编程范式,Wonder 还让他们能以一种简单的方法来对现实世界的问题建立模型。


学生们可以更容易地把一个问题分解成小的模块,然后用这些模块来解决一个复杂的问题。这样他们在解决一个复杂的问题的时候,就能把注意力放在在一个个子问题上。这个分解问题的过程,既是计算机科学的基础知识,也是 Wonder 语言的设计初衷。



在我们日常生活里也有很多机器人和状态机的例子,并且它们正在变得越来越普遍。自动售货机会在你投入正确的金额时吐出商品。自动驾驶汽车能够根据周围的障碍物决定如何前进。状态机还能对很多其他的问题进行建模,就像句法分析、人工智能、通信协议、游戏中的角色发展,甚至包括神经系统。


随着机器人技术的应用和其影响力的扩大,教师们自己现在也需要学习模块化编程。但在这些方法被越来越多人采用的同时,我们应该思考的是:这是否就是正确的前进方向?又或者是不是还有其它更好的方法可以帮助孩子们学习计算机呢