教孩子编程是一件很难的事情。我曾试着在网上找一些资料教小元(熊孩子)编程,例如,麻省理工大学的`Scratch`,这是我知道的最早的面向孩子的编程平台。最近几年微软公司又推出了[编程一小时](https://code.org/),和`Scratch`蛮像的,这些编程平台是免费的,也都有中文版的。
[TOC]
下面是麻省理工大学的`Scratch`[https://beta.scratch.mit.edu](https://beta.scratch.mit.edu)的截图。如果家长有时间的话,可以和孩子一起玩。
![Scratch的效果](https://box.kancloud.cn/531029b376f312dc8189897acefc4e39_1366x768.png)
[TOC]
下面是微软公司[编程一小时](https://code.org/)的截图,和`Scratch`很相似,不同的是,它提供了源代码,有了源代码,就和编程很近了,不过稍微难一些。
![](https://box.kancloud.cn/9139cd3980d76a7aca2f2668120c44e8_1366x768.png)
[TOC]
我看了一下国内一些青少年编程教育机构的课程内容,发现他们也在使用`Scratch`和 [编程一小时](https://code.org/) 的课程。不过国外这些课程都是免费的,国内是收费的。
[TOC]
作为两个孩子的家长,我有时会琢磨,应该怎样教孩子编程呢?我总结了一下,有这么几点需要考虑。
* 孩子多大开始学习计算机编程比较合适呢?
我一个同事,十几岁开始写游戏程序,大一被交换到瑞典学了6年计算机,我问他是不是比国外的程序员要厉害,他说德国程序员都是7、8岁开始学习编程,他们更厉害。我在大学也遇到类似的事情,学习机器人编程,用的是德国教材,老师说这个教材在德国是给中学生用的。
所以,我们可能把编程想的过于复杂了,确实有些编程语言很复杂,成人学习起来都很吃力,但也有很多编程语言老少咸宜、简单易学,例如`python`。
* 怎样保持孩子学习编程的兴趣?
这个是我教小元时遇到的问题,他刚上小学的时候,我就教他 [编程一小时](https://code.org/) ,他确实保持了一小时的兴趣^-^。无论是太简单或是太难,孩子们都很容易失去兴趣。一些教育机构采用比赛的形式,同学们相互竞争,比着学,赢的一方可升级或得到奖励。这确实是一个办法。但我还是觉着孔子“因材施教”是更加和谐的教育理念,毕竟每个家长都不愿听到“你孩子学不好,不是我教的不好,而是你孩子竞争不过其他孩子”这样的话。
所以我一直在调整教小元的方法,有时候会教他一些比较难的编程语言,例如`C`语言、`JavaScript`语言,有些时候会是一些比较简单的,例如`Scratch`、`python`。有些是做网页的(面包店的订单系统原型),有些是做数据分析的,有些是画些漂亮的几何图形,例如下图。
![](https://box.kancloud.cn/a1efafa5f78969026379bd64a1646a68_1366x768.png)
* 几个人一起学习编程比较合适?
这也是我教小元遇到的问题。因为我是他“独有”的计算机老师,有时候他不怎么珍惜这份资源,不过他和他弟弟争夺玩具的情景提醒了我,人类对“稀缺资源”还是很珍惜的,所以,在“因材施教”的基础上,还是要加入一些竞争的要素,几个孩子一起学是有好处的。我觉着5个人以下的小班是比较合适的。
* 应该为孩子准备什么样的编程学习环境?
很多教育机构是给孩子提供学习电脑,孩子不用自备电脑。如果学校有类似`Scratch`这样的编程平台,不备电脑倒也可以,课后还是可以登陆到编程平台上学习,但是如果没有这样的平台,就得自己搭建一个这样的编程环境(这本身也是学习编程的乐趣之一),这就需要有一部自己的电脑,也不用太贵,如果不是用来打游戏的话,3000元以上的品牌笔记本电脑,大概就可以了,几个硬件要留意一下,CPU(Intel i5或AMD)、内存4G以上,硬盘500G以上。当然,买Mac不必考虑这么多,只是贵了一些,我不建议一定要给孩子买Mac。
* 怎样持续的学习编程?
除了英语,我觉着编程可能是另外一门值得持续学习的技能。我目前想到的办法是避免那种死记硬背的、填鸭式的方法,教与学应该是一个互动的过程。为什么学生不可以参与到课程的设计当中呢?通过`Github`平台(世界上最大的开源软件交互平台,微软公司前不久以70亿美金收购的平台)可以建立一个教与学的互动项目,孩子们可以在上面参与设计他们自己的课程,并实时将遇到的困难、想法反馈到项目中去,教师及时答疑并调整课程的进度,这些困难、想法、变化都会体现在项目里,家长也都可以看到。
* 作为老师,应该做哪些准备呢?
老师要做几个事情。为孩子准备一个合适的编程环境,例如`python`编程环境,可以用官方`python`,也可以用`anaconda`、或者`docker`,环境可以有很多种,难度不同,做老师的,得先把每种编程环境都趟一遍(或者是和孩子们一起趟),然后在结合孩子的兴趣、理解程度选择合适的编程环境。课程设计也很重要,尤其是如果想做到“因材施教”、“差异化”的话。很多教育机构或平台,课程设计和教学是分离的,这样可以方便“流水线”式的教学,其实将课程设计和教学放在一起,可能效果会更好。
* 多少钱用来学习编程比较合适?
国内青少年编程教育机构的价格,很大一部分是用来交租金、雇人、硬件投入、推广宣传、网站维护,无论能招来多少学生,这种固定支出肯定不菲。
但如果采取社区化的教学方法,这部分费用实际上就省下了。例如小元的篮球课,请的就是一家小学的体育老师,教得也很好,家长省钱,老师的兼职收入也说得过去,很多时候,很多机构总是强调教育理论之类的话,看起来很高大上,实际上并没有那么好的效果。
家长除了花钱购买电脑外,主要花费应该花在请老师上。老师备课、教学都需要时间、智力投入,至少应该为这部分付费。这笔费用到底应该是多少,我也没想清楚,我老婆说:有没有孩子愿意和你学都不一定,一定要收费的话,给个交通费吧。我想既然这样,“黄埔一期”的孩子就全免费吧,至于“黄埔一期”有多久,看有多少孩子学吧。
[TOC]
以上,有些是心血来潮的做法,没那么系统,可是每当小元写完没完没了的作业,还能再来上一句“爸爸,我们编程吧”,再累也觉着挺欣慰的。希望每个孩子都能从编程中感受到知识的乐趣。