作者:Michelle
无论你愿不愿意,科技飞速发展,我们的生活每天都在发生改变。具备编程技能会帮助孩子在未来获得更多的机会和可能性。关于为什么要学编程,我们之前已经有过详细介绍:
不想当程序员,孩子就不用学编程?别天真了,不懂编程将来就寸步难行!
乔布斯、比尔盖茨、扎克伯格、奥巴马都说了,要教孩子学编程!
今天来分享一位资深的编程教育学者Michelle设计的编程游戏。
18岁那年,我才写出人生中的第一个简单程序,不过最终我还是拿到了博士学位,找到了一份全职工作——为科学研究写代码、跑代码。我现在特别确幸自己掌握了这项技能,因为这项技能给了我坐在家里就能赚钱的资本,让我能一整天都能陪在孩子身边。我不想自己的孩子等到上了大学才能学到编程的基本法则,所以,我的孩子从幼儿园就开始就学编程啦。
我设计了一个“乐高迷宫编程”,这个游戏可以随着孩子水平的增长不断升级。(点击免费下载打印)
学会如何像一个程序员那样去思考就如同婴儿学步,有很长的一段路要走。 过去一些年,我至少用了6种不同的计算机语言写过程序(C、C++、Java、Fortran、Matlab和Python)。对一个初学者而言,重要的不是某种语言的特性(句法规则),而是要理解所有编程语言的构成要素——即所有编程语言的共性。我设计的这款乐高迷宫游戏的破解靠的是手写“代码”而不是机写“代码”,该游戏有四个难度等级,囊括各种编程概念。我会一边介绍玩法,一边对设计理念和孩子的收获进行详尽描述:
推荐年龄段: 幼儿园,小学,初高中
所需时间: 一个小时(包括制作素材的时间)
难点: 准备工作不难,等级3和等级4可能更适合五六年级和年龄更大一些的孩子。
材料: 打印纸、 剪刀、双面胶、 乐高小人儿(或其他类似尺寸的小人儿)、 乐高或得宝积木(可选)。
操作指南
仅限第一次——你需要打印、剪开、用双面胶贴合(可选,不是必要步骤但是推荐使用)所有“乐高迷宫编程”免费可打印的纸片(请点击下载并自行打印 )。
接下来,你就要建立自己的迷宫了。共有5个迷宫供你选择, 或者你也可以用提供的空白方格制作一个自己的迷宫。 确定要选的迷宫类型后,有三种构建选项供你选择:
选项1:
如果你没有乐高或得宝小人儿,或者你只是想节省时间,你可以原封不动地使用pdf提供的迷宫。你只需再找一个小人儿放在迷宫里就行,这个小人儿得有正反面,这样你才能知道他对的是哪面。
选项2:
你要是个乐高迷的话,你可以用乐高积木覆盖所提供迷宫的灰色部分。
选项3:
你要是个得宝迷的话,我建议你把迷宫的白色部分剪掉,将其放在得宝板上,然后用得宝积木盖满该板以形成墙壁。你也可以直接把得宝积木放在层压板材迷宫上,但是我发现这样做效果不好,因为墙壁要足够高,这样所有部件才能连接在一起,不过这样一来小人儿就不好移动了。
完成后,你的迷宫可能就是下图这个样子:
或是这个样子:
等级1:
对幼儿而言,第一步就是要教会他们如何以迷宫里的小人儿的视角(坐标系)思考。为了达到这个目的,你需要把小人儿摆在迷宫入口处,把所有绿色卡片分三摞(向前走,向右转,向左转)。
孩子需要把他/她自己认为小人儿需要遵从的指令列到一个长单子里。例如,在上面所示乐高(见下图)迷宫里,建筑工埃米特需要:向前走,向前走,向前走,向右转,向前走……我让我六岁的孩子把他认为让埃米特走出迷宫所需的所有开篇列到一个长单子里。
等级1以此迷宫为例
然后,我想用儿子写下来的“代码”,直接把小人儿移出迷宫,不过他想自己手动完成。于是,我让他一次只完成一个指令,然后边执行指令,边把卡片翻过来。结果,效果非常好。
我唯一要提醒你们的是:你要注意向左转和向右转的问题。当埃米特朝着我儿子走过来时,他把一个“向右转”的牌子翻了过来,但埃米特需要的是“向左转”。在他翻卡片时,我让他把卡片放到埃米特手中,告诉他错在哪儿了。他立马明白过来并改正了错误。另外,就是不会英语的孩子,需要认识一些简单的英语。
设计理念&孩子的收获:
孩子可以看到手头面临的特定问题,然后一步一步地让乐高小人儿走出迷宫。和“机器人海龟”游戏一样,最低等级教会孩子从不同于自身坐标的角度思考问题。孩子的左边和迷宫里乐高小人儿的左边不完全是一回事儿,不过就算是年龄最小的孩子也能学会这项转换坐标系的宝贵技能。
等级2:
要是孩子在等级1中变现还不错,这时候你就可以教他们如何使用循环语句“走___步”去完成一个指令,而不是一遍又一遍地重复翻着同一张卡片。上述例子的解决方案如下。你可能会注意到“for”循环语句中的一条或多条指令略微缩进了一些。关于缩进问题,不是所有编程语言的要求都如此严格,不过有些确实如此,而且这么做会让代码的可读性更高,所以这是个好习惯,可以保持。 “for”循环语句的结尾需要你放置一个“end”(结束)卡片以表明该循环语句到此结束。 再次说明,不是所有编程语言都需要一个“end”(结束)指令收尾,但多数如此。
设计理念&孩子的收获:
但愿此时孩子们已经拿下了等级1,然后就会意识到连续7次告诉小人儿“前行”有点儿乏味烦人。要是能有一种方法下达这样一个告知——“接下来7次都执行这一指令”就会方便很多。该等级引入了“for循环语句”这一概念。
等级3:
我知道我幼儿园同龄小伙伴儿远达不到这个水平,但最终,只要孩子们能进行更为抽象的思考,你就能教他们“if”条件语句的知识了。大学第一次接触到“if”条件语句后,我就一发不可收拾地将其应用到日常生活的方方面面。基本上,所有决定都能归为决策树。比如,我正拿不定主意去哪儿吃晚饭,我可能会这样思考:
“IF 我朋友凯莉有空,
—> then 我就和她一起吃泰国菜.
ELSE IF 公寓餐厅供应的餐食尚且说得过去,
—> then 我就从那儿随便吃点儿.
ELSE—> 我就窝在公寓里吃点儿麦片和冰淇凌.
END IF.”
谢天谢地,在我每周不再在计算机实验室里花十小时后,我就改掉了这个“毛病”。
基本上,只要是写程序,你就会把所有的可能性都考虑在内,评估一下每种情况下应该做什么,以怎样的顺序去做(或者什么才是当务之急)。例如,迷宫里小人儿面临的可选项数是有限的——面前或左右两边有无墙壁。但是,基于这些有限选项,可写代码的可能性则不少。孩子可能会给小人儿下达这样的指令:“若面前无墙,向前走,结束。”单凭这条代码确实能解决一些迷宫难题。但对于一些需要小人儿转向的迷宫,孩子们可能会想出一些更像下面这样的代码。
上图所示的代码翻译过来,基本上就是如下指令:“若能左转,就向左转;否则若能右转,就向右转;再否则,若碰到了死胡同,则转180度。排查过所有情况后,向前走。重复(repeat)。”整个代码的“while”循环语句部分就是“repeat”的开始。说“While仍处在迷宫中(然后执行一堆代码),End(结束)”的意思是一直重复这些代码直到走出迷宫。
还需指出的一点是,我没用到的一个代码语句是ELSE语句。 “IF”语句指的是只要其后跟着的特定条件成立,就百分之百执行if部分的代码。 “ELSE IF”语句指的是其后跟着的特定条件成立且在此之前出现的“IF”和“ELSE IF”之后的特定条件都不成立,就执行该“ELSE IF”部分的代码。“ELSE”指的是上述所有情况都不成立时,就执行该ELSE代码语句(我的麦片配冰淇淋晚餐就是这种情况)。 “END”意味着“if”条件语句(或“while”,抑或是“for”循环语句)的结束。
设计理念&孩子的收获:
此时,大龄儿童可能不会轻易局限于此,然后会意识到继续使用等级1和等级2中的方法去解决某个特定的迷宫难题,工程量是巨大的。 有了“while循环语句”和“if语句”的概念,孩子们可以挑战自我,写一个尽量简短的程序出来去解决迷宫难题。 程序员只需将乐高小人儿在任意位置可能遇到的所有情况都考虑在内,决策出最佳通用动作序列即可。例如,左边有路可走小人儿该怎么办,要是碰到死胡同了有该怎么办?
等级4:
如果你家孩子在提供的所有迷宫中都尝试了以上代码(或自己创造的结构类似的代码),他们可能会发现该代码并不适用于所有迷宫。有些情况下,由于给了“向左转”优先选择(或优先选择其他任何代码指令),小人儿会卡住,陷入一个死循环中,一直在同一路径中重复向前走、向后走。要解决这一问题,同时又不引入诸如存储变量一类更为复杂的概念,这时候可以利用随机数字产生器移除优先选择项。
例如,不说“若能左转,就向左转”,取而代之,我可以说“若能左转,一半情况下向左转”。因为我们确实没使用电脑,也就无法使用随机数字产生器函数,不过孩子们可以拿扔骰子代替。引入随机性这一概念后,小人儿走的可能不是最符合逻辑的一条路,但是他也不会陷入死循环。我“认为“这是一个适用于所有迷宫的可能的代码之一(如下图所示),但这并不是唯一“正确”的答案,可能也不是最佳正解。 在你家孩子尝试用自己的代码解决问题之前,我不建议你把该代码展示给孩子。 编码就是一个不断试错的过程。在程序员思考出新的可行代码前,一遍又一遍的试验和检测是必不可少的。
设计理念&孩子的收获:
虽然等级3会让孩子们有幸尝到胜利的滋味,但是他们可能会发现换个迷宫,这套“代码”可能就没用了。很有可能小人儿会被卡在程序员口中的“无限循环”中,一遍又一遍地重复着同一个行为,无从逃脱。引进一个随机数字产生器,大龄儿童可以写出一个程序,让小人儿走出任何迷宫。
四个等级都完成后,心智最成熟的孩子将会认识到:要是他们的乐高小人儿能记住自己走过的路,那他们就能系统前行,而不是漫无目的地瞎转。这可能会引发有关更高级的编程概念的讨论,比如存储器和存储变量。
最后祝大家“编程”快乐!
翻译:金玉璨
本文来源于果壳童学馆guokr_kid,禁止二次转载。如有需要,请联系kids@guokr.com
本站内容未经许可,禁止任何网站及个人进行转载。