最近我开始考虑明年的一些个人计划,我并不会强迫自己去完成一些目标,而只是将自己在未来一段时间内感兴趣的事情罗列出来,然后挑一些去进行尝试。而其中的一项便是写一本书。我和一些出版社的编辑都曾讨论过关于出书的事情,唯独对于书的选题让我颇为纠结。我并不愿意去写一本纯技术的书籍,虽然这看起来相对容易也更安全(有市场)——基本上选一个热门领域或技术,然后参考其他同类书籍,结合自己编写的示例和相关经验进行重写,但这对于我来说却有点像炒冷饭,并没有太大的意义。我知道如果缺乏动力,自己很难写好这本书,甚至根本就无法完成。而如果让我按照内心的意愿去选择的话,我更愿意尝试去为孩子们写一本编程书。
我的儿子今年六岁,在区里的一所示范幼儿园读大班,除了上学之外,他还报名参加了思维训练的培训班。虽然每天都在按照要求在完成课程和作业,但看得出,他学得并不快乐。之所以要这么做,也无非是为了想让孩子上一个更好的小学。我同事的孩子今年三年级了,和很多同龄孩子一样,也参加了奥数班,虽然对她的孩子并不了解,但我却总能看到我的那位同事埋头坐在那里,绞尽脑汁地解那些奥数题。我就想,如果这些题目连我们这些大人解起来都如此费劲,那它们对孩子们的成长又是否真的那么有帮助呢?有没有一种更好的方式来训练孩子的思维呢并帮助他们更好应对未来呢?如果能抛开所有功利的应试需求,我想学习编程或许会是一个不错的选择。
虽然有了方向,但要想教好、教会孩子编程却并不简单,我们有必要透过针对孩子们的编程教育现状,来看看那些普遍存在的问题:
- 过时的教材:很多学校还在使用那些过时的编程教材,比如,他们仍在教孩子们学习Pascal语言(一种过时的编程语言),而这是我将近20年前学习编程所时使用的语言。有人说,教编程的真正目的是教会孩子一种新的思维方式,与使用哪一门编程语言无关。对于前半句,我很赞同,但关于编程语言,我却觉得,如果能教孩子那些在未来更能派上用场的编程语言,并且让他们从一开始就能习惯使用这些更现代的编程语言,我们又为什么不这么做呢?
- 不恰当的教学方式:那些给孩子上编程课的大部分都是在校老师。老师当然有他们的优势,比如更了解孩子,也能更好地驾驭教学。但老师们大多并没有太多的编程经验,他们也更多地像是在教数学、物理那样将一门编程语言的语法、语义、算法等硬生生地灌输给孩子,而作为考核标准的也大多是那些毫无生趣的算法题,这恰恰忽略了编程最重要的趣味性以及创造和思维能力的培养。结果是,孩子们如完成家庭作业般去完成那些编程题,一点也无法体会到编程所带来的的乐趣,这也直接摧毁了孩子们学习的热情,学习编程竟成了孩子们的又一个负担。
- 赶时髦般的培训班:随着编程教学越来越受到家长的重视,很多社会上针对儿童的编程培训机构也都冒了出来,当然是鱼龙混杂,良莠不齐。我们姑且不论那些培训班的资质以及老师的教学能力,就拿他们广泛使用的编程语言Scratch来说,也只是像这些年很火的乐高培训一样,一些根本不懂编程的老师经过短期培训,便去教孩子了,能教会孩子什么,真的很难说。编程是一项深入的思维运动,需要长期实践才能逐渐掌握,而像今天那些家长那样,不根据自己孩子的情况,赶时髦般地将他们赶去学习编程,并不会得到理想的效果。
- 美学教育的缺失:我认识很多程序员,他们都不是编程的初学者,但往往阻碍他们写出优秀程序、作出更优秀产品的却并不是大多数人理解编程所需要的逻辑思维能力,反而是对于美的认知。既然不知道什么是美的,那作出来的东西又怎么会美呢?这并不单纯指我们平时听到的那些UI(用户界面)、UX(用户体验)等设计概念和技巧,更在于对美的本质的感知和觉察能力。而这种能力本应该在儿童时期就开始培养,但遗憾的是国内对于美学教育的缺失非常严重。编程教学作为一项制作与创造课程,本是可以将那些关于美的知识和实践融入其中的,但大多数的教材和老师并没有那样做。
通过一本书来解决上面这些问题看似天方夜谭,但却值得去尝试一番,即使作为对现有编程教学大环境的一点小小补充,也会让我觉得颇有意义。
一本给所有编程初学者的入门书
与动辄几百元一节的幼儿编程课不同,我始终认为,教授孩子编程的最佳方式应该是家长与孩子一起学习编程,大人的理解能力加上孩子的想象和创造能力,这简直是一个完美的学习组合,而在家长的陪伴下持续地学习和实践远比每周上一节编程课来的有效。我可能并不会在这本书里加入过多适合低龄儿童的插图,而是希望包含尽可能多的内容,以编程为主,并涉及从艺术、设计、编程、思维、作品发布等各个环节,让孩子们通过学习能够真正作出有意义的作品来。在我看来,这本书应该适合所有有意愿陪孩子一起学编程的家长以及那些希望自学编程的初学者来读。
教手艺,而不是知识
教授知识与教授手艺的最大区别在于其目的性,对孩子们来说,学知识往往是被动的,真正应用如化学、物理等知识常常需要进入大学相关专业之后,而在中小学期间,孩子们学习过程中得到的激励往往来自于比较,如考试成绩,家长的表扬,或老师提问时比其他同学更早算出答案。但比较往往会带来压力,也仅仅对那些优秀学生更有效。而学手艺却是为了去不断作出更好的作品,你是在和过去的自己比较,而只要持续地学习和实践,你就一定能获得正面的激励,因为随着技能的提升,你做出来的东西总是会比过去更好,它对所有学习者都是有效的。我想写的这本书里当然会包含某一门编程语言的语法、语义等基本知识,但并不会包含那些复杂的数据结构或算法,只有在用到的时候我们才会用最简明的方式加以介绍,一切都会围绕获得更好的手艺并作出更优秀的作品去写。
一门现代且面向未来的语言
对于孩子和那些编程初学者来说,这或许是他们的第一门编程语言。这门语言既应该是易学的,又应该是现代且面向未来的。
- 易学:考虑到不同年龄段孩子的接受能力,这门编程语言应该是简明、一致、清晰的。这体现在语言的语法、数据结构、控制逻辑、可供使用组件、甚至包括IDE(集成开发环境)以及教学资源和等各个方面。它应该是易学、且更易构建出丰富应用的。
- 现代的:编程语言的种类非常多,有些语言的年龄比我们都大,而几乎每一门语言背后都会有一个长长的故事,至于为什么发明这门编程语言,它的主要用途是什么,它又有什么特点,这些问题往往要花上一整天才能讲清。今天,很多新语言在不断出现,比如Swift、R、Go,也有很多语言则已逐渐被淘汰,比如VB、Pascal。一门现代语言意味着它具有那些经过长期实践被证明是优秀的语言特性,另外它也正在得到广泛的应用。
- 面向未来的:面向未来的编程语言应该是开放的(比如:开源),这意味着它能借助更多程序员的力量获得持续的发展,并得到更多人的使用和认可。另外,一门编程语言的基因也能决定它的未来,比如:面向过程、面向对象、声明式编程、函数式编程等等,正是它们决定了一门编程语言的特性、编程思想、适用场景以及未来的发展方向。举例来说,虽然,现在仍有很多iOS应用是用Object C来开发的,但当我们理解Swift将会成为“第一款工业级质量的系统编程语言!”这个断言,以及认识到Swift的那些优秀语言特性后,我们就应该意识到对于iOS开发者来说不去追求Swift是非常愚蠢的。
基于这些考虑,我比对了自己心目中那些可以用来教学的编程语言,决定在Python或Swift中选择一门语言,来完成这本书。
利用所有优秀的资源
很多编程书籍中都会包含自带的代码、示例、工具等等,看起来这样的书非常完整,但我却发现这些附带的资源往往并不好用,或没有什么价值。现在网上有太多优秀的学习资源,只是很多人不知道,或者不善于使用罢了。而我希望这本书能够更加开放,如果网上已经有了更优秀的内容,那我就没有必要再去重复,而只需要帮助大家去发现和更有效地使用它们。例如,假设我这本书最终使用Swift语言进行教学,那我一定会告诉你利用iPad上Palyground这款APP进行学习,当然我会在书中告诉大家如何更有效地使用它,这会大大提高我们的学习效率。
兼顾艺术、设计与创造
光有编程,我们并无法得到那些吸引人的东西,人们特别是孩子都是视觉动物,如果做出来的东西不漂亮,那他们很容易会感到失望而对学习失去兴趣。我希望这本书能对编程教学做一些延伸和扩展,比如在那些示例中引导孩子正确地理解和运用色彩、合理地进行排版使内容更加清晰,巧妙使用动效让作品更加生动有趣等等,通过这些,让孩子们在学习编程的同时,掌握最基本的设计知识,并启发他们对于对于美的认知。
关于书的形式
关于书的形式,我希望会有不同的版本,我可能会做一个网站来呈现这本书,包括那些教学视频、示例代码、并且展示那些孩子们通过学习制作出来的作品。我也希望有纸质书和电子书的版本,以满足不同读者的需求。
上面的这些观点只是我此时此刻所能想到的,而更多的东西只有在实践中才能获得。好在我已经有了自己的学生,我的儿子Ian。我会不断在这个专题中更新我教学的内容、进展、孩子学习的反馈,并接受大家的意见。如果你对教孩子编程这件事也有自己的想法,不妨留言,这将能帮助我更好地完成这个挑战。
网友评论
可以借鉴下,进行本土化,加入些天朝元素…