首发于父母心
Nemo 的 三门编程语言之旅

Nemo 的 三门编程语言之旅

三门语言分别是:LEGO、LOGO、Scratch。

1. LEGO

Nemo他爹幼年时曾经得到过一套积木,那年头有个带包装的玩具可不容易,自然是很喜欢的,但是天资有限,怎么也搭不出什么好玩的来,后来也就扔一边了。同样遭遇的还有魔方,没人教也没有资料,完全不知道怎么搞,死活也就能拼出一个面了,后来,一怒拆成散件了……

Nemo 有了积木之后,非常高兴的让我不停的搭东西给他玩,这可苦喽。所以很早就给 Nemo 报了乐高教育的课程,有人带着玩,还省得一套一套的买了。

(Nemo 的乐高第一课成果)

得宝、科技(9686)、WeDo、NXT、EV3 一路玩过来。WeDo、NXT 和 EV3 带有图形化的编程环境,实质上是画流程图,驱动传感器、马达机等已经做成非常简单的程序块,拖进去点几下鼠标就行,这样让机器人完成一些简单的任务非常直观。

(WeDo)

EV3 基于 LabView 的图形编程系统其实是具有完整表达能力的,不过实际用下来,复杂到一定程度之后,就很难用了。比如下面这个颜色筛选器,

程序就很大:

我完全没办法在电脑上跟小家伙一起分析程序,只能拿起纸和笔来。

LEGO 课程不是单纯的编程,以玩为主,自然而然地动手动脑还得运用想像力,设计得非常好。不过要循序渐进的玩过来,Nemo 的 LEGO 学习经历从大颗粒的结构和造型入手,头开得不错;中间平面拼图形部分不知道是课程设计的问题还是老师不够有趣,孩子们普遍不喜欢,上了两次就跳过了,动力机械和WeDo部分上得略有点早,其实应该接一段故事启发套装课程,这样做的东西就能活起来,更有趣味,做的东西也能更充分的玩一玩,略遗憾。幸运的时,后来赶上 StoryGames 比赛,好歹补上了一点:


编程课程就上得太早了,小学高年级再学这个会轻松很多,也更容易领略到编程的乐趣,不过也因为这个,小家伙多玩到了 NXT,现在再学的话都是 EV3 了。尽管 J. PAUL GIBSON 表示 5 岁的孩子就能理解算法和计算的概念了(Forget Foreign Languages and Music. Teach Our Kids to Code),我早些年也试过在给 Nemo 整理卡片时给他讲堆排序确实能接受,但是这跟完整的进行编程意义建构,进而能形式化的用程序解决问题,是两回事儿。


从编程的角度看,LEGO 优势在于真实,孩子们可以把想像搭建出来,并按自己的想法控制它,这能带来巨大的成就感。缺点则是过于真实,一定程度上掩盖了编程的抽像本质,就我在两个乐高活动中心看到的情况,低年龄段孩子很少由此对编程很上心的,大家还是对搭东西更来上心。到高年级再开始学 LEGO 编程的话,入境的可能性会更大一些。

LEGO 的另一个优势是,有很多竞赛活动,孩子真热爱的话,有很多机会参加国际比赛。

2. LOGO

由于我生活习惯不好,经常熬夜,成了程序员的坏榜样,家人禁止我教小家伙编程。没成想三年级的时候,人自己混进了少年宫的 LOGO 班,每周六上午跑去学2小时。

LOGO 是专门为孩子学习编程而设计的,兴趣班用教材是基于 PC-LOGO 的,算是比较古老的版本,为了在家用起来,很是折腾 (见:一场 PC-LOGO 引发的穿越之旅 - 父母心 - 知乎专栏)。LOGO 是用指令控制一个图龟在屏幕上移动、作图的系统,以前没认真学总觉得是太玩具了,这回才发现其语言能力是完整的,变量、条件语句、子程序、递归一应俱全。

(小家伙自己的文件管理得井井有条,着实惊着我了)

Nemo 学了这个课程之后,热情很高,下课回来就赶紧写作业赶紧交。头几次课回来,除了作业,还试着自己做了不少练习。我感觉大部分孩子都喜欢涂鸦,LOGO 提供了比较简单的绘图原语,让孩子们可以拿它在屏幕尽情涂抹,这个切入点选得真是妙。

LOGO 兼顾了趣味性和抽象度,唯一的缺点就是需要的平面几何知识有点多,小学阶段都还没怎么学过呢。实际教学里,老师会把一些转动角度之类的关键数据直接给出来,这样倒也能顺利进行下去,换个角度看,也算是潜移默化地体验了一下几何之美了。

LOGO 也有一些竞赛活动,比如上海市“六·一”小学生计算机创新活动,建议积极向学校、少年宫的兴趣班靠拢。

LOGO 也可以用教学机器人,可以输入程序,控制行走转向等,几年前听过一次用 LOGO 机器人的课,演示的老师课堂掌控能力很强效果不错,但授课人多机少毕竟不如直接电脑一人一机实在。孩子在学 LOGO 的话,搞一个放家里还是不错的。

3. Scratch

Scratch 比较新,是 MIT 专门为儿童学习编程设计开发的。国内 2012 年以后逐渐普及,Nemo 是这个学期中间在学校的信息课上接触到的。

Scratch 针对的是 8 岁以上学生,操作上有一点小复杂。孩子们要用媒体元素和程序脚本编写一个舞台剧,编程采用模块化的图形组件。Nemo 非常喜欢这个舞台,一有空就打开 Scratch 开始涂抹编写。

Scratch 采用图形化的编程语言,但表达方式跟流程图或者说一般程序语言编程时语句排列的方式更接近,编写复杂一点的程序时,比 LEGO 的要方便,比 LOGO 的文字形式要更形象一点。

就是 Scratch 离线版的界面文字显示得太丑了,完全没做抗锯齿字体还小,还不如20多年前的 PC-LOGO 看着舒服。

这审美也是没谁了……

Scratch 的国际社区非常活跃,国内活动也越来越多。另外 Scratch 2.0 可以连接 LEGO WeDo 及一些专门为 Scratch 开发的硬件设备,也有第三方开发者做了辅助程序让它可以控制 MindStorm EV3。

MIT 在与 Google 联手开发 Scratch 3.0,本来期望还蛮高的,但是今年 Google I/O 上演示了的 Scratch Blocks 怎么看怎么像是山寨 LEGO 的嘛。机器人连接这块倒是进展很不错,Google I/O 2016 制作能看会说机器人讲座演示用的硬件 Dexter GoPiGo,基于树莓派打造的,能够连接 LEGO 部件,并且可以用 Scratch 编程。

上图硬纸板盒里的 GoPiGo 会说出看到的物体,识别在云端完成,演示代码是用 Python 写的。不过 Scratch 2.0 的 Extension 机制加个对应的组件并不麻烦。

可见 Scratch 是眼下最火热的青少年程序学习环境,发展前景也很乐观。

作为一个已经写了 20 多年程序的职业程序员,我感觉 Nemo 学过这三门语言里,单纯说学编程的话,还是 LOGO 最好。Scratch 有点花哨过头的感觉,LEGO 那边编程只是整个乐趣的一小部分。

Nemo 还在上幼儿园的时候,我就想过怎么教他写程序。想来想去,还是觉得要选 JavaScript,参照 LOGO 的玩法,在浏览器里做一个交互式的环境,用语句操控预置的图形对象,有了编程的概念之后,再扩展一点 HTML/CSS 的入门知识,就可以做网站了嘛,好玩又实用。 可惜在家里被禁止了,也就只是想想……

编辑于 2016-06-08 11:54