这篇文章是“为孩子写一本编程书”连载中的第二篇文章,上一篇《如果要为孩子写一本编程书》中谈了为什么自己希望能为孩子们写一本编程学习方面的书,以及关于如何教学的一些个人想法,有兴趣的读者可以参考。
我的儿子Ian学习编程已经快2周了,今天他完成了Playground(注:Playground是苹果公司推出的一款在iPad上学习编程的App)上第一部分的学习内容——“命令 Commands”。他的进展让我颇受鼓舞,虽然我以前也曾教10来岁的孩子学过编程,但对于一个6岁的孩子,老实说,一开始我并没有十足的把握。要知道孩子相差一岁,他们的理解和认知能力都会有着天壤之别。而且,我知道自己的孩子并不是什么天才儿童,在与同龄的孩子一起学习20以内的加减法时,当其他孩子都已能熟练地进行心算,他却还需要借助手指甚至脚趾的配合,才能珊珊来迟地给出答案。也正因此,他在编程学习方面的进步才让我对自己的教学方法以及写好这本书变得更有信心。
我要玩编程
在决定教Ian学习编程之后,我并没有马上开始,而是首先考虑如何才能引导孩子对于编程的学习兴趣。而我知道,只有“玩”才是孩子们的天性,我需要找到一个能让孩子玩编程的教学方法。为此,我比较了不同的编程语言,以及可以用于编程教学的网站、APP和其他资源,希望能够找到那门最好玩的编程语言。最终,我选择了Swift,一方面作为编程语言,它非常现代且正得到广泛的应用,使用它能够做出非常美妙的东西,而另一方面结合Playground进行教学,真的可以让学习编程变得非常有趣。
于是,我便在iPad上下载了Playground,备了课(主要是亲自完成第一章节的学习内容,并构思如何为孩子进行必要的讲解),然后挑了一个周末,把在一旁显得有些无所事事的Ian叫到了身旁,略带神秘地对他说:“爸爸来和你一起玩一个非常好玩的东西,好吗?”
听到“玩”,Ian马上两眼放光,凑上前来:“好啊,是什么呀?”
“我们要玩的是一个很厉害的东西,叫编程,只有很聪明的小孩才会玩哦”,接着我便拿出iPad,给他演示了Playground上的一个小游戏——通过简单的命令,让游戏中的主人公Byte,抓到一颗宝石。
Ian的兴趣一下子便被这可以控制的生动动画调动起来了,抢着也要来尝试,嘴里不住嚷嚷“我要玩编程,我要玩编程”。
“好的,你先别急,让爸爸先来教你怎么玩”,就这样我便开始了我的第一节编程教学课。
Tips:兴趣的引导对于孩子来说非常重要,城市中的孩子往往会背负很重的学习压力,因此,我刻意地淡化了学习,而强调玩,希望以此激发孩子的学习热情。当然,如果你只是希望自学编程或你的教学对象是大一点的孩子,则可以用更现实的编程应用场景或实例来激发他们的学习热情。
认识编程
在孩子开始玩“编程”(正式教学)之前,我们有必要清楚地向孩子解释什么是编程?
“编程是编写程序(命令)的简称,这是你与计算机的一种交流方式,通过你编写的这些命令,可以让计算机去帮助你做很多有意思的事情,比如控制无人飞机(Playground的第一章节就会用到类似的例子),做出好玩的游戏,设计出无人驾驶的汽车,还能帮助我们去月球旅行等等等等。”
Ian似乎对我所解释的编程定义很好奇,却又有些似懂非懂,忙问“那学习编程之后是不是也能让狗去做一些事情呢?”,孩子的发散思维很值得鼓励,“我们一般说的编程,是让计算机去做事情,但如果要让狗做事情,可能就会更复杂些,你可能需要让计算机与狗的大脑相连,然后再通过编程来让狗也听我们的话,这或许在你学得更深入后就能实现哦”
Tips:很多编程书虽然名字是教孩子编程,但往往一上来就会介绍编程语言,以及它们的语法等等,好像学编程就是学一门编程语言一样。然而,对于孩子来说,这种做法其实并不可取。编程与我们今天做的很多创造性工作非常类似,学习编程更重要的是学习这样一种思维方式,因此,我们应该首先站在更抽象和宏观的角度来向孩子介绍编程,并同样以孩子特有的发散的思维来加以引导,而不应过早将它与具体的某一门编程语言联系起来,这样反而会限制住学习者的思维,降低孩子们的学习热情和兴趣。
让孩子爱上编程
孩子们的兴趣是非常容易转移的,特别是对年龄更小的孩子来说,要想一件事物始终能吊起他们的胃口很难,他们的注意力往往难以长时间集中,因此,你需要控制好教学的节奏,循序渐进地进行教学。
- 每天就学一点点:每次学习的过程,我都会控制在20分钟-30分钟以内(这对6岁左右的孩子适合,而对于年龄稍长的孩子,则可以适当将教学时间加长),这个时间正好可以完成Playground中一个独立小节的学习,包含教一个知识点,并完成一个相对应的编程挑战。而我基本上会每天或每隔一天给孩子教学一次,即使孩子兴致很高我也不会一天内连续教授好几课。因为我需要建立一种教学的节奏,每天花一点时间,持续地学习和实践,比某一天上2-3小时的编程课,而后连续一周不去碰它要有效得多,当然也更容易持久。
- 激励与反馈:每次完成一个小游戏(编程游戏)后,我都会大声地将Playground中的那些激励的话大声朗读出来。大多是“你真棒...”,“做得太好了...”,我也会自我发挥加上一些自己的评论,比如“你很聪明”,“你又进步了”,“下一次的挑战会更难哟”等等,这常常是每次孩子学习完一个小节后最有成就感也是最高兴的一刻,通过努力完成一项挑战,然后获得赞扬,并期待着下一次的挑战,这可以说是一个完美的正反馈。
- 建立自我认知:游戏方式的教学以及适当的激励往往能够维持孩子短期内的学习热情,但要让编程真正成为孩子自己的兴趣,却绝非易事。我的方法便是给孩子贴标签,赋予他“编程小超人”的称号,并不断地强化他的这种自我认知。比如在生活中我经常会叫他“编程小超人”,并总是对他编程技艺的增长大加赞赏,另外,我还特意为他设计了一张名片,上面显著地写着“编程小超人”的称号。他非常喜欢,而当他将这些名片发给同学和朋友时,就是在不断强化着自己是编程能手的意识。当然,在学习时,他也比以前变得更加积极主动了。
Tips:让孩子自己愿意学习是最理想的,在开始阶段切勿操之过急,影响孩子们的学习兴趣。你也可以像我一样做一张名片或画一幅画贴在家里显著的地方,来鼓励孩子们成为编程能手。关于如何为孩子设计一张名片的简单方法,我也会在稍后穿插的设计教学中告诉大家。
准备工作
虽然我们的目标是最终教会孩子使用Swift语言做出一些有意思的东西,但现在,我们还不需要太多关注Swift语言本身,因为在Playground中的前面几个章节,并不会出现一句有关Swift语言的语法,而是更强调在游戏中学习和掌握编程的基础思维。因此,作为必要的准备工作,我们要做的仅仅是在iPad上下载Playground这个APP,并初步了解这个APP的使用方法。
一台iPad
你只需要一台iPad,便能使用Palyground教孩子编程了。当孩子完成所有课程,并能熟练掌握那些编程思想与技巧后,可以再从iPad转移到个人PC或Mac上使用那些流行的IDE(集成开发环境)去创造更复杂有趣的应用。
Tips:很多家长对孩子使用iPad会很排斥,认为总是在玩或影响视力,但我想说,未来的孩子就是生活在这些电子设备的包围之中的,尽早让他们熟悉,并熟练地使用它们,就像过去我们要求孩子掌握写字技能一样重要。而学习这门课程并不需要在iPad上花费太多时间,Ian每次在iPad上完成一项任务所使用的时间,都不会超过30分钟。
下载Playground
进入App Store,然后在搜索框内输入“Playground”,回车,你便能看到这个应用了。点击获取安装即可。
获取课程
Playground中会不断地推出新的编程教学课程,而我们所使用的就是名为Learn to Code的这一套教程。当我写这篇文章的时候,已经出到了第三套课程 Learn to Code 3。我们可以选择底栏中的“Featured”按钮,然后选择我们所需要的课程,在弹出页面中点击“Get”下载即可。
下载后的课程,通过点击底栏上的“My Playgrounds”按钮便能看到了。点击任意已下载的课程便可以开始我们的编程教学了。(下图中,我下载了Learn to Code的1-3的系列课程,以及Hour of Code课程,它是Code.org所推出的编程一小时活动中,使用Palyground进行编程教学的一节体验课)
Tips: 由于网络原因,部分课程可能下载缓慢,可以在早上网络条件良好的情况下进行下载。另外,当每次Palyground版本更新(增加新功能)后,可能造成部分原有课程无法使用,你可能需要将它删除,并重新获取该课程。
界面与功能
安装完成后,你一定迫不及待地开始使用Playground去探索编程世界了吧,先别着急,Playground虽然非常简单易学,但我们还是有必要来简单看一下Playground中界面以及那些最常用功能。
界面
Playground中的每一小节课程都是一个包含编程挑战的小游戏,学习者通过输入命令来控制游戏中的主人公Byte,去完成任务。我们以“命令”这一章节的第一小节为例,下图中的任务目标就是要让Byte去抓到他前方那颗红宝石。整个界面分为左右两个部分,左边为学习内容区域以及编码区域,右面则为可由命令控制的动画演示区域。当学习者点击编码区域后,便可输入命令(也可以通过选择自动出现在底栏中的命令来快速输入)。当完成命令输入后,便可以通过动画演示区内的“Run My Code”(运行我的代码)按钮来执行你所输入的命令,并查看动画演示的执行效果。如果你顺利完成了任务,Playground便会提示过关的消息,并引导你进入下一小节的学习。
选择你的英雄
Playground为我们设定了三个不同的主角,他们拥有不同的颜色、形状和各自鲜明的性格。通过点击动画界面上的主人公,便可以进入动画角色的选择画面,挑选那个你最喜欢的英雄去一起完成后面的挑战吧。
常用功能
Playground里提供了很多有意思的附加功能,给你编程的结果动画录像,拍一张屏幕截图,你都可以通过功能菜单进行尝试。而下面这三个功能,我却认为对编程教学有着特殊的帮助:
Reset Page:点击菜单栏上的省略号图标,会弹出Tools(工具选项),选择“Reset Page”便能帮助你快速恢复到本节的初始状态。这个功能非常有用,特别在学习的初期,孩子们很容易会将命令写乱,而通过这个重置选项,便可以快速回到起始状态,然后重新开始,这大大降低了孩子们出错的成本,他们会很愿意重新尝试,而不会因为需要反复恢复代码而降低编程的乐趣。
Step Through My Code:点击动画演示区域左下方的仪表盘图标,会显示运行选项。Step Through(单步执行)是程序员们最常使用的调试手段,而在Playground中我们也可以使用这种方式来运行我们的命令,我们将能看到每一个动画步骤与我们的一行代码关联起来,这能让孩子们更方便地调试他们所写的程序,也能帮助他们理解那些复杂的函数调用、判断以及控制逻辑,比如if...else...,Loop、While等等。
Tips: 单步调试虽然是一个很好的调试手段,但我们不应该让孩子们过度依赖这个功能,因为他们会为了避免犯错,而选择每写一条命令就调试一次的方法,这样做会降低编程的速度,更重要的,孩子们会减少全局的思考,而这恰恰是编程中非常重要的一种思考方式。因此,仅在学习语法或复杂控制逻辑,以及寻找编码中错误的时候,才使用这个功能是我的建议。
插入预设代码块:点击点击菜单栏上的省略号图标,会弹出预设代码块的选项,包含变量赋值、函数、循环结构等等。这使得孩子们一开始并不需要去死记那些枯燥的语法和关键字,只需要理解与这些图标所对应代码块的作用,就可以轻松地使用它们进行编程了。
Tips:预设代码块很像程序员们经常使用的代码自动生成功能,简单输入几个英文单词,或自定义的英文缩写,便可生成整段预设的代码结构。未来的编程一定会更加智能,而让孩子们从体验和熟悉使用预设代码块或许是一个很好的开始。
好了我们已经万事俱备,在下一章里,我们将会从最简单的“Commands (命令)”开始一起玩编程。