查看原文
其他

不需要电脑,一个自制迷宫让孩子Get编程思维

2017-03-07 Michelle 海码爸爸

 

不管是海码爸爸的线上活动还是线下活动,我们都发觉,本身从事IT行业的家长对孩子学编程这件事非常重视,倒不是因为他们希望孩子子承父业,而是他们自己从学习编程中获益良多,才早早地给孩子布局编程学习。就像此文的Michelle一样,他说:具备编程技能未来一定会帮助孩子获得更多的机会和可能性。


Michelle是一位IT工程师。学编程比较晚,他说自己在18岁那年,才写出人生中第一个简单程序。不过最后他还是拿到了博士学位,现在在为科学研究写代码。这份工作最好的一点是不用坐班,Michelle在家就能工作赚钱,还能陪着孩子。为了避免孩子像自己一样,到上了大学才学到编程思维,他带着正在上幼儿园的儿子现在就开始学了。


Michelle在家设计了一个“乐高迷宫编程”,并且还给游戏设计了难度等级,随着孩子年龄的增长,难度等级会一点点上升。




他解释说,就如同婴儿学步,要学会像一个程序员那样思考,是需要训练很长时间的。对一个初学者而言,重要的不是某种编程语言的句法规则,而是要理解编程思维。我设计的这款乐高迷宫游戏靠的是手写“代码”而不是机写“代码”,游戏有四个难度等级,囊括各种编程概念。我会一边介绍玩法,一边对设计理念和孩子的收获进行详尽描述。


  推荐年龄段: 幼儿园,小学,初高中

  所需时间: 一个小时(包括制作素材的时间)

  难点: 准备工作不难,等级3和等级4可能更适合五六年级和年龄更大一些的孩子。

  材料: 打印纸、 剪刀、双面胶、 乐高小人(或其他类似尺寸的小人)、 乐高或得宝积木(可选)。

  操作指南:

  打印“乐高迷宫编程”(在公众号对话框中回复“迷宫”,获得素材),并把编程指令裁剪出来。



接下来,你就要建立自己的迷宫了。共有5个迷宫供你选择, 或者你也可以用提供的空白方格制作一个自己的迷宫。 确定要选的迷宫类型后,有三种构建方式供你选择:


选项1——直接用打印出来的迷宫


如果你没有乐高或得宝小人儿,你可以原封不动地使用PDF提供的迷宫。你只需再找一个小人儿放在迷宫里就行,这个小人儿得有正反面,这样你才能知道他对的是哪面



选项2——用乐高积木搭迷宫


你要是个乐高迷的话,你可以用乐高积木覆盖所提供迷宫的灰色部分。




选项3——用德宝板子搭建迷宫


如果你有得宝的话,可以把迷宫剪出来,放在得宝板上,然后在迷宫通道旁用得宝积木盖满该板以形成墙壁。注意,要让部件连接在一起,又要方便小人移动。



完成后,你的迷宫可能就是下图这个样子:



或是这个样子:



难度等级1 —— 学会坐标系概念


如果直接让孩子在电脑上学习坐标系,他们很难理解。因为他们的左边和游戏角色的左边并不是一回事,但玩熟练了第一个等级,他们就会学会怎么样去转换这个坐标的视角了,这可是学编程最基本的技能。


那怎么样教会他们用迷宫里的小人的视角(坐标系)思考呢?首先,把小人摆在迷宫入口处,把绿色卡片向前走,向右转,向左转分三堆。



孩子需要把他/她自己认为小人需要遵从的指令列成长长一条。例如,在上面所示乐高迷宫里,建筑工人埃米特需要:向前走,向前走,向前走,向右转,向前走……我让我六岁的孩子将这些编程指令排成长长一列。



本来我打算用儿子排好的“代码”,直接把小人儿移出迷宫,不过他想自己来移动小人。我想了个办法,我让他一次只完成一个指令,然后边执行指令,边把卡片翻过来。这样做的效果非常好,不会让指令混乱。


我唯一提醒孩子的是要注意向左转和向右转的问题。当埃米特在最后一个拐角处,出现了BUG,他放了一个“向右转”的牌子,但其实埃米特需要的是“向左转”。我让他把卡片放到埃米特手中,他立马明白过来并改正了错误。如果不会英语的孩子玩这个游戏,需要先认识一些简单的英语。


难度等级2  ——“FOR”循环语句


在等级1中,告诉埃米特向前走5步,需要5张“向前走”指令。这一关中指令升级了,告诉孩子用“FOR循环”指令会方便很多。


比如向前走3步,原本需要3张向前走的卡,用“FOR”循环指令,只要在空格中写上3,在“FOR”循环指令下接上“向前走”的指令,就代表“向前走”重复3次,如下图。


这里还要说一下格式。编程语言都会有格式要求。跟在“FOR”循环语句后的指令缩进了一些,这样做让代码容易读。“FOR”循环语句的结尾需要一个“end”,表示该循环语句到此结束。虽然不是所有编程语言都需要这样,但这样做让孩子更加严谨。



难度等级3  ——“IF”条件语句


用“IF”条件语句可不是机械地指挥小人往前走,向左转或者向右转那么简单了。这个指令是要教小人“思考”问题了。需要将乐高小人在任意位置可能遇到的情况都考虑在内,决策出最佳通用动作指令。孩子们可以挑战自我,写一个尽量简短的程序解决迷宫难题。例如,左边有路可走小人儿该怎么办,要是碰到死胡同了有该怎么办?


这需要孩子们能进行更为抽象的思考,你才能教他们“IF”条件语句。我是在大学第一次接触到“IF”条件语句的,然后就一发不可收拾地将其应用到日常生活的方方面面。基本上,所有决定都能归为决策树。比如,我正拿不定主意去哪儿吃晚饭,我可能会这样思考:

  “IF 我朋友凯莉有空,

  —> then 我就和她一起吃泰国菜。

  ELSE IF 公寓餐厅供应的餐食尚且说得过去,

  —> then 我就去那儿随便吃点儿。

  ELSE—> 我就窝在公寓里吃点儿麦片和冰淇凌。

  END IF。”

谢天谢地,我后来改掉了这个“毛病”。


不过,学会这个思维方式的好处是,你考虑事情会更加全面,会把所有的可能性都考虑在内,评估一下每种情况下应该做什么,以怎样的优先级顺序去做,明白什么才是当务之急。很多成年人都不一定能分得清事情的轻重缓急,这个技能要是提前教给孩子,他能获益终身。


那迷宫游戏里怎么用这个“IF”语句呢?比如可以给小人儿下达这样的指令:“IF面前无墙,向前走,结束。”但对于一些需要小人儿转向的迷宫,那就需要下面这样的代码。



图中的代码翻译过来,意思是:“若能左转,就向左转;否则若能右转,就向右转;再否则,若碰到了死胡同,则转180度。排查过所有情况后,向前走。重复(repeat)。”


红色代码“while”开头和红色代码“End”结尾,意味着是一个循环语句。只要小人还处在迷宫中,就会不停重复,然后执行一堆代码。一直重复这些代码直到走出迷宫才“End”。


这里还有一个ELSE语句。这就是一个优先级的顺序执行啦!“IF”后面跟的特定条件成立,就百分百执行if部分的代码,后面的代码就废了,直接跳到“End”。 


“ELSE IF”语句指的是其后跟着的条件成立,并且之前出现的“IF”和“ELSE IF”之后的条件都不成立,就执行该“ELSE IF”部分的代码。


“ELSE”指的是上述所有情况都不成立时,就执行该ELSE代码语句,我的麦片配冰淇淋晚餐就是这种情况。 


蓝色“END”意味着“if”条件语句的结束。


难度等级4  ——  随机数字产生器函数


虽然等级3会让孩子们觉得自己很厉害,但是换个迷宫,这套“代码”可能就没用了。而且很有可能小人儿会被卡在“无限循环”中,一遍又一遍地重复着同一个行为,无从逃脱。这时候,如果引进一个随机数字产生器,让小人儿走出任何迷宫。


如果在程序中给了“向左转”优先选择,也许小人会卡住,陷入一个死循环中,一直在同一路径中重复向前走、向后走。要解决这一问题,但又能不引入诸如存储变量一类更为复杂的概念,这时候可以利用随机数字产生器移除优先选择项。


例如,不说“若能左转,就向左转”,取而代之,我可以说“若能左转,一半情况下向左转”。这个“一半情况”就是随机数字产生器函数,简单点就是扔骰子可以代替。引入随机性这一概念后,小人走的可能不是最符合逻辑的一条路,但是他也不会陷入死循环。


我“认为“这是一个适用于所有迷宫的可能的代码之一(如下图所示),但这并不是唯一“正确”的答案,可能也不是最佳正解。 在你家孩子尝试用自己的代码解决问题之前,我不建议你把该代码展示给孩子。 编码就是一个不断试错的过程。在程序员思考出新的可行代码前,一遍又一遍的试验和检测是必不可少的。



四个等级都完成后,心智最成熟的孩子将会认识到:要是他们的乐高小人儿能记住自己走过的路,那他们就能系统前行,而不是漫无目的地瞎转。这可能会引发有关更高级的编程概念的讨论,比如存储器和存储变量。




如何获得迷宫素材?


1、关注“海码爸爸”公众号。

2、在公众号对话框中输入迷宫,就能获得素材。




相关阅读: 

国外的计算机思维课是这么上的,国内居然不流行!

一块三明治怎么教计算思维?英国教育专家这么做

玩立体拼图还启蒙了机械力学,这玩具比乐高更STEAM!

还在玩积木?玩具都已经进入4.0时代了!








海码爸爸 一群计算机博士发起的父联组织

长按识别二维码,加关注;欢迎加入QQ群:361999832(注明“编程”)




戳阅读原文,参加少儿编程课!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存