教孩子们什么编程语言好?

如今计算机已经非常普及了,智能手机也基本上人手一部了。美国总统也在吹嘘人人都要会编程。我有两个小孩,作为一个码农,总得把这门手艺传递下去。那么我就寻思究竟教他们什么好呢?

回想我个人的编程经历,最早是初中开始接触编程的。因为参加信息学奥赛,第一门学习的语言是 Pascal,然后又自学了诸如 Basic,C,Logo 等等。

我的印象中,我最喜欢的便是 Basic,原因就是他简单。Logo 也很好玩,但是功能过于简单,没法实现复杂的功能。Pascal 则过于严格。C 最让人难以入门的便是指针,而且非常容易出错。了解指针往往还需要有一些操作系统常识,否则也不能理解其中的原理。

中学时代之后还学习了 C++和 Java,但实际上都没有掌握其精髓,以当时的心智还不能理解面向对象,对于 C++的模板也是不能理解具体开发中如何使用。

其实对于一个初学者来说,最重要的是引导他建立编程的基本概念,培养他的兴趣。这个过程中应该尽量减少他们的心智负担,像什么 C 的指针,Java 中面向对象的什么 abstract,interface, C++中的 virtual、引用等等,这些深奥的概念,对初学者并不友好,如果没有实际工作经验,会让人深陷不自信的状态,无法自拔,最后往往放弃。在这方面,我觉得脚本语言在这方面则比较有优势,既没有特别严格的格式,有些也不需要强调类型系统,把关注点集中在编码本身。

另一个很重要的就是可视化,或者说所见即所得。对于孩子们来说,他们的抽象思维还不足以达到成人这样,可以直接对着一些抽象的数据进行开发。对于他们来说,像真实世界一样的东西是最好理解的,因为人的心智就是从这样的世界中进化出来的。

同时如果能立刻得到反馈,则非常有助于孩子们在编程中的探索,像一些 reactive programming 的环境,就非常好,Logo 就是这样的。

基于以上的经验,我把孩子的编程学习分成两个阶段。

第一阶段是启蒙阶段,大约就是小学阶段。根据我前面所说的三点,1. 减轻心智负担,集中于编程本身 2. 可视化  3. 实时反馈。目前首选的是 Scratch 语言。

Scratch 由 MIT 发明,就像搭积木一样,他把各种要素以积木的方式呈现给学习者,通过积木的组合来形成指令,不得不说是一种创新。然而这种概念在某些程度上是继承了 Squeak Smalltalk 的 Etoy,但是依托于互联网时代,得到了发扬光大。

第二阶段是转型阶段,有两种选择:

A 方案,让孩子们在这个阶段跟上逐渐接受工程化的开发思想。尝试教授诸如 Ruby,Python,JavaScript 这类脚本语言。逐渐引导让他发现现实生活中的需求,让他能把需求转化成设计和代码,并通过测试再去修改调试代码。通过迭代的方式不断完善代码。期间会让他熟悉敏捷开发的方式,了解单元测试,GIT 等等。

采用这个方案的孩子,在高中就基本上可以拥有非常强的实际开发能力,能独立完成小的产品。即便不上大学,也完全可以胜任一般的工作。

B 方案,让孩子们钻研算法,参加信息学竞赛。这样的好处是如果能得奖,保送进大学也是非常不错的方案,在大学里继续深造,最后进入大公司做专精的方向也是非常好的。但是毕竟竞赛是残酷的,能得奖的也就那么几个人。

以上毕竟只是设想,同时除了编程之外,还有很多精彩的东西。

“教孩子们什么编程语言好?”的一个回复

  1. 呵呵,看了这个想法觉得好好玩,为你点赞哈,我第一门语言也是pascal,再后来就是各种坑,然后是创业,不过我觉得我们在思想上是可以交流一部分的

发表评论

电子邮件地址不会被公开。 必填项已用*标注