我是一个老码农,1999年毕业于上海交通大学计算机系硕士,有两个儿子,分别上初一和初二。他们在9岁时开始接触编程,经过家庭里的启蒙教育后,又在后续几年在各种场合学习了不少编程相关技能。大儿子已经连续两年参加上海市科技创新大赛,今年两个儿子联合做项目,获得了两个一等奖(实践类和创意类)。其中,创意类的项目还推送到全国参选,获得全国比赛的优秀奖。孩子自己也是乐在其中,也认为编程对其创新思维有帮助。

本文介绍了我教孩子的一些过程和心得、指出一些“坑”和误区,介绍了一些成功经验,并做了一些相关实践。希望能够跟大家讨论沟通。

 

一、选错了编程入门软件,启蒙阶段遇到的“坑”

2011年,我去北京拜访图灵教育办公室,做了个关于社群运营的访谈。临走时,谢工老师送了很多书给我,其中有一本《与孩子一起学编程》,我一看名字就喜欢,又是讲我最熟悉的python编程,拿回家就决定给在上小学三年级的大儿子来学。

他用网络教程教孩子学编程,无意间培养出少儿编程神童-少儿编程教育网

老大从小爱玩计算机,对学编程也很来劲,一开始,我拿着书手把手地教孩子学python编程基本概念,让孩子自己敲代码,大概了解编程怎么回事儿。后面,就直接到作者提供的官网上下载了例子代码,直接运行和修改。这样很快把大半本书就学完了。

但是,每当我们抽空继续学的时候,发现孩子又忘记了不少。我猜是基础不够牢固,于是我又找到网络版的《笨办法学Python》让孩子去照着学一遍。可奇怪的是,不管是去照着书、电子书还是网上的资料,孩子跟着走一遍练习都OK,但是一直会有各种基础问题卡住,拿了例子敲代码可以跑通,做些修改就会报错。我耐心地帮他解决。

好不容易把基础问题都解释清楚了,看起来自己去学习也没问题了,却发现根本没有孩子实际使用的场景。在我的引导下,他偶尔用来做下奥数题目的验算,但是大部分时候连验算也不方便。由于没有用,很快就又忘记了不少。过一段时间,我们说再学一些更深的编程技巧时,就又得把书或网上的例子找出来复习一遍。

做到后来,我觉得这样不对,老是在入门级低水平重复。这个学习方法太差了,效率低、枯燥、无高频使用场景,显然不是正确的方法。旁观许久的二儿子也觉得编程很枯燥无味,压根就不愿意学习。

回过头来复盘,发现过早学Python确实是个大坑,在10岁前第一门语言选Python可能是“欲速则不达”,因为工业级语言的使用场景跟孩子们入门启蒙完全不同。

 

二、什么样的编程软件适合孩子?

我认为是:1)孩子能轻松学会,入门简单。2)容易完成作品,错误少,成就感强;3)有能玩得开心的应用场景。比如,机器人和乐高教育虽然不是编程,但是勉强符合前三点特征,所以有很多家长愿意花钱,因为孩子玩得开心。

他用网络教程教孩子学编程,无意间培养出少儿编程神童-少儿编程教育网
▲Scratch社区

后来,我偶然发现了Scratch这个编程语言满足以上三点要求,很容易学习,而且特别方便地做出很漂亮的动画和游戏出来。更棒的是,在网上还有Scratch社区(scratch.mit.edu),可以看到全球各国孩子们发布的作品,这样的话,既解决了应用场景问题,也解决了共同学习问题,跟着社区很多其他孩子一起学,这样,即便对二儿子,学编程也变得特别简单了。

于是,我们首先找到官方的Scratch入门教程,直接拿来照着学,很容易跑通,之后就拿一些安装程序自带的官方例子,一个个打开学习,并对感兴趣的修改玩玩。

编程还是需要有环境刺激的,一个人学编程,可能还是觉得不够有趣,那么如果能够更多人一起学,就有了一种互相促进的作用。为了带动老二也参与学习,让孩子们有个学习氛围,我就联合了两个朋友,一起搞了一个乐创编程俱乐部。

他用网络教程教孩子学编程,无意间培养出少儿编程神童-少儿编程教育网

我们几个轮流讲课,还找到一些其他讲师一起来。初期完全免费,后来为了对人数做些控制,保持持续学习,就以会员制运作,少量收费,每月举办两次活动。

大概10多个小朋友一起学Scratch,在这个过程中,有模仿、有完全原创、还有改编。学得快的孩子开发的代码,复制给其他孩子们一起来改,每个孩子都按照自己的兴趣来调整,很有意思的是,有一个小女孩把打飞机的游戏改成了一个海底世界,玩得很开心。

他用网络教程教孩子学编程,无意间培养出少儿编程神童-少儿编程教育网

有一个小孩自己曾学过Pascal和Scratch,带来作品演示来切磋,引起了孩子们的好胜心,另外一个小金,父亲是软件公司的总经理,也不服气,积极开发自己的打飞机程序并演示。孩子们很享受在众人面前展示作品获得赞誉的时刻。

 

三、自主学习,鼓励孩子用Scratch做自己感兴趣的东西

2014年8月夏令营之后,发现俱乐部制度行不通了,主要是由于孩子大部分没时间(要去补课)。既然招生困难,我们就不搞Scratch俱乐部常规教育了。

Scratch官方网站上面有很多很优秀的作品,孩子们主要就是自主学习,经常抽空去访问Scratch官网,自己去研究好的程序,存下来自己Remix,边玩边改。发现很多的编程小窍门,然后去努力学习和掌握,再利用这些窍门儿自己编一些小游戏。

孩子们喜欢玩各类游戏,不过能够编写游戏后,经常也在思考能否把手机游戏用scratch来开发,就去琢磨各种游戏的一些设计,然后用Scratch把一个简单版本的游戏开发出来。比如腾讯微信的打飞机游戏风靡的时候,孩子也尝试做了一个。

他用网络教程教孩子学编程,无意间培养出少儿编程神童-少儿编程教育网

在玩过上海迪士尼乐园之后,我鼓励孩子花点时间做了一个花车巡游Scratch,配音动画等,做的很有意思。

孩子一直觉得自己是在玩Scratch,过程非常快乐,也不断地有新的好玩的作品做出来,强化自己的信心。形成一个自主学习的氛围。当然他也用Scratch做过一些计算类的,比如奥数验算。

相比而言,Python、Arduino、其他单片机、网站编辑等就没有那么好玩,自然也就弄得少。

四、应用实践,比赛和实际应用形成良性循环

有一次,学校里面举办一个动画设计比赛,大儿子用Scratch做了一个动画,拿了个奖,早操期间在全年级学生之前领奖,感觉很棒。

2014年,长宁区少科站的蒲老师鼓励我大儿子报创新大赛项目,他又成为少年科学社会员。他报了一个网站和微信形式的创新项目,又自学了MySQL数据库和php开发,以及微信开发,半年内,他完成了一个简单的基础应用,获得了2015年上海市青少年创新大赛科技实践三等奖。

2016年,老大老二两个孩子联合起来,一起拿到了2016年上海市青少年创新大赛科技实践一等奖和2016年上海市青少年创新大赛创意一等奖。这下就更有信心了。这个比赛含金量很高,不少上海的好高中在录取学生时候也作为重要参考。

他用网络教程教孩子学编程,无意间培养出少儿编程神童-少儿编程教育网

我家老大也参加过Google举办的在线codejam比赛,题目是全英文的,看起来还是有点难懂,好不容易懂了题目之后呢,做起来也不容易,勉强做过两道题进入了资格赛,后来还是放弃了。做这个竞赛,当然是用的Python语言,由于题目有乐趣,后来又把历年试题的Python代码答案找出来学习,了解其他人的编程思维。

这些比赛当然距离真正的实践还比较远。但是都是非常好的实践基础。

我们也参加过新车间里面举办的面向成年人的硬件马拉松,买了几套硬件,家里还有树莓派和英特尔的伽利略等单片机。不过目前他还玩不起来。因为还需要物理的电子学知识,需要有个系统化的教程。打算等他物理学了一段时间后再来研究。

最近两个儿子喜欢玩密室逃脱,然后大儿子研究了一些相关的密码学知识,然后就开始用python来做一些密码相关的代码。我就顺便教他用正则表达式,做一些文字处理等相关的做法。慢慢引导他学习更多的有趣的算法和数据结构。

孩子一定要真正应用编程技能,不断碰到新问题,才会掌握整套编程体系,完成一个像样的作品。这样进一步指导他参与应用。

 

五、参观大公司、参加科技展,帮孩子打开视野

编程需要创意和创新,这需要让孩子对生活中的事物有足够多的了解、体验,进行思考和感悟。

应该鼓励孩子多接触电子类产品和工具,鼓励思考其组成和原理。

可以带孩子们经常去看一些科技展,看别人一些作品,一些有趣的项目,也会不断刺激孩子自己思考,让他有想法来做自己的东西。

我在孩子五年级结束的那个暑假,带大儿子去过美国,参加Google IO大会,看到眼花缭乱的各类新科技,可以实际动手体验,非常开心,他也感觉非常刺激。也带他去了Google总部、苹果公司总部参观。

他用网络教程教孩子学编程,无意间培养出少儿编程神童-少儿编程教育网

上海每年都有各种科技类的行业性展览,很多里面都有新的科技产品,比如CES Asia就很适合孩子们去看看。

孩子看得多了就会有自己的创意想象,这时候编程技能可以帮助把一些想法进行实现。即便没办法实现,有了编程基础,在分析很多新事物的逻辑和原理时候也会方便很多,可以更深入了解。

有了创意后,他参加上海市科技创新大赛就会更加积极,也会反过来刺激他根据申报的创新实践项目来针对性地学一些新的知识和技能,不断循环迭代下去。这样才能把编程技能转变为有价值的项目,从做题目、做好玩的项目到做有用的项目。

 

作者:陈世欣,互联网创业导师,96级上海交通大学计算机系硕士。