芥末堆芥末堆

当孩子学编程时他们在学什么

作者:南瓜博士 发布时间:

当孩子学编程时他们在学什么

作者:南瓜博士 发布时间:

摘要:当大家都在学编程时,应该想想为什么要学?

kevin-jarrett-561802-unsplash.jpg

图片来源:unsplash

关于编程,市面上的各种少儿编程课,总是要先制造焦虑:“AI 即将大范围代替人类工作啦,你要是不懂得和计算机打交道的语言,怎么在未来世界立足呢?”

爸爸妈妈们一听焦虑了,赶紧给孩子报班。各种图形化编程、机器人编程,孩子们玩得很开心,家长看着也挺满意。

但也有善反思的家长会发现:好多编程课,和教孩子画出赏心悦目图画的美术课一个路数,关键是要有漂亮的结果能让家长发朋友圈,孩子到底从中学到了什么却很难说清楚,教育机构鼓吹的“编程思维”又是怎么一回事也很难体会出来。

一方面,我觉得教育机构所谓的“编程思维”没啥稀奇的,甚至根本不需要上编程课,在生活中就可以学到;另一方面,我写了二十多年程序、深感编程对我的思维有很多积极影响,也觉得孩子有机会学编程实在是一件很好的事。所以今天,我想和大家分享下家长在不焦虑不盲从的同时,如何能让孩子从少儿编程中汲取养分和快乐。

今天的分享会分三部分:

首先是我从教女儿,以及女儿学校二十来个孩子 Scratch 编程课的体验中,观察到的:孩子们从编程中学到了什么?

然后是我研究了部分商业机构的课程,对此的思考:糟糕的编程课是什么样的?

最后是我的一些建议:孩子到底要不要学编程、怎么学?

我的观察:孩子可以从编程中学到什么

先来说说孩子们从编程中可以学到什么。多数编程教育机构的宣传,都是说“编程思维”。我猜原因有两个:一是这个词比较容易唬住不懂编程的家长,二是它比较容易教,练几次“如果...那么...否则..."/"重复执行...直到..."等条件控制语句,就可以宣称孩子掌握了编程思维了。

但其实,孩子能从编程中提升的技能,远在编程之外。


  • 一、探索的习惯

首先,是探索的习惯。

可能很多家长提到编程的第一反应是:我不会哎,要不要找老师来教呢?但请看看这些学编程的工具:

640.webp.jpg

这是 code.org 里”我的世界“主题的编程一小时。把中央的代码积木拖动到右边工作区,拼接成完整指令,指挥 Steve 完成一关又一关的任务。

640.webp (1).jpg


这是 lightbot 游戏。简单的几个指令,指挥灯泡小人行走及点亮灯泡。看着简单,但很多编程概念都包含在内了,甚至连重载(overloading)都有。

640.webp (2).jpg

这是和 lightbot 同一家公司出品的另一款编程游戏 spritebox  (http://spritebox.com/ )内容更复杂一些。但对孩子来说,跟随着一步步引导,从开始最简单的执行一句命令,到后面相当复杂的多层循环和条件判断的嵌套,就像玩游戏一样,一关关闯下来就都会了。

如果下次你再听到有人把“如果...那么..."/"重复执行...直到..."当成编程思维推销课程的时候,请记住:这些内容,靠上面几个游戏,让孩子自己摸索,一定都能学会。

让我们再来看 Scratch。

Scratch 的界面要复杂不少,功能也多得多。其实 Scratch 自带非常好的教程,点击菜单中的“提示”就能看到,就是下图中右侧的内容。很可惜教程是英文版的,所以孩子也许还是需要一点大人的帮助。

640.webp (3).jpg

我之前给孩子们上 Scratch 课,发现孩子们最喜欢做的事情,就是东改改西换换,换用一些别的代码块或者设置一些超大/超小的数字看效果。

比如我们做一个游戏,其中星星出现的时候要闪烁三下好让玩家留意到,我给出的程序和效果是这样的:

微信截图_20180726175140.png

孩子们会做什么呢?他们会把大小变化设成1或1000,会把等待时间设成 100 秒或 0.01 秒,还会把重复执行设置成几十亿次。所以他们会做出这样的代码:

微信截图_20180726175211.png

小朋友们觉得这样的极速闪烁非常好玩,一群孩子都笑翻了,纷纷跑到自己的电脑上去尝试。有敏锐的孩子会问为什么能同时看到大小两个星星,知识面广的孩子就回答说是视觉残留。

类似的场景,在课堂上还有很多。往往在孩子的一个“咦,这是什么,我来试试看”的疑问背后,可以引发出一长串的问题:为什么会这样呢?和你的预期一致吗?如果换成那个又会是什么样的效果呢?这个功能可以用来做什么?

Scratch是一个再安全不过的环境,最坏情况无非就是把程序重启重新开始,所以可以放心让孩子大胆尝试。美妙的是,每拼接一块积木,都可以点击运行马上看到效果,这反馈-修正的过程是非常迅速的,所以孩子能很顺畅的自行探索。

所以,我想表达的第一点就是:lightbot 等编程游戏,和 Scratch 图形化编程工具,都是再好不过的让孩子尽情探索的玩具。“我来试试看”的口头禅,是这些玩具能带给孩子的最宝贵的财富。

  • 二、通过切身的体验学数学

计算机界的最高奖项是图灵奖,2003年的图灵奖得主 Alan Kay 有一个非常棒的 TED 演讲 A powerful idea about ideas  。在这个演讲中,你可以看到 9 岁的普通孩子孩子通过玩 OLPC 电脑上的软件,得出了“加速度”的概念。

640.webp (4).jpg

Scratch 是 MIT 的 Meida Lab 创造的,在 Scratch 之前 Media Lab 还有 Logo 语言。你知道吗, Papert 发明 Logo 语言,其实并不是为了教孩子编程,而是为了给孩子一种适合他们的学习方法,用电脑来帮助孩子更好的学习。

Papert 在他的 Mind-Storms 这本书的序言 The Gears of My Childhood 中写到,他幼年时喜欢玩各种各样的齿轮,后来学数学轻而易举,他才发现玩齿轮的体验帮了他好大的忙,例如他会把二元一次方程想象成玩两个齿轮求齿的数量。他在书中是这么说的:

Logo 和 Scratch,其实是虚拟世界的齿轮,能帮助孩子们建构式的学习很丰富的数学知识。

举几个例子:

  • 指挥小猫向前向后走,把星星变大再变小,这些代码可以教孩子正负数的概念

  • 等待 1/0.5/0.25 秒,从中可以学习时间的概念,分数和小数的概念

  • Scratch里角色的颜色变化一共分200级,把颜色设为210其实等同于把颜色设为10,类似的还有造型变化、亮度变化等等,不知不觉的,孩子就掌握了整除、余数、取模等等。

我最喜欢带孩子玩的是画图形。下面这张图是我给孩子们的第一堂用代码画画课的练习纸。指挥画笔重复执行往前走、旋转一定角度的命令,画出各种各样的图形。孩子们从中学到了什么?笛卡尔坐标系,角度,旋转一周是360度,3*120=4*90=6*60……才一年级的孩子乘法都没学呢,这些对他们来说却很容易理解他们也很乐意去学。

640.webp (5).jpg

这就是我想说的第二点:通过编程,孩子们能获得很多关于数学的切身的体验,而这些经验有助于今后他们更轻松的学习数学。关于这一点,Tony Yet 写过一篇阐述 Papert 教育理念的文章蛮值得一读的,推荐给大家。

  • 三、工程化解决问题的能力


孩子们在依葫芦画瓢的开发了几个游戏后,总会想实现自己的创意,创作出自己的游戏。

这时候,你就可以引导他描述问题,把大问题一点点拆解成小任务,设计一条分步骤实现任务的路径,然后一点点的去实现它,不断调试根据结果一点点调整直到最终完成。

编程天然就是 PBL 式学习,在这个过程中,孩子的模块化思考、抽象思考、简化问题、寻找替代方案等等能力,都会得到锻炼。这种方式和别的物理世界的项目例如做木工活儿比起来,成本低廉还极其安全,所以不妨多练练。

不过这些能力对低年级的孩子来说还太难了一些,可以让他们先从看别人的项目、理解别人的代码开始做起。我的公众号里“读码探秘”栏目就是在做这方面的试验。

  • 四、逻辑,算法

最后来讲讲逻辑与算法。编程,把我们很多思考问题、执行任务的过程显性的表示了出来。最基础的,有执行中的顺序、条件、循环,逻辑上的与,或,非。让思维变得可见,本身就已经对思考能力会有促进。

640.webp (6).jpg

算法中有些非常有趣的东西。举一个最简单的例子:这是我带着三个孩子做平面版的“我的世界”,下面这一排是装备栏,最左边的那格是玩家手里当前的装备,是一把铲子。那一课的任务是要点击装备栏中任意一格,就把当前装备和这一格的内容交换。

640.webp (7).jpg

一开始孩子们写的代码很简单:把a设成b,再把b设成a,不就行了吗

640.webp (8).jpg

运行下一看,怎么两个都变成铲子了?冥思苦想想不出来。我用实物演示:左手一把尺子右手一支笔,要交换左右手的内容,手又太小无法同时握住两样,就必须先把一样东西临时放到桌上。这桌子,就是一个临时变量c。

一点点引导,他们终于得出了下面这个正确方式,学会了一个新算法:交换a和b的数值,需要一个临时变量c。把c设成a,再把a设成b,最后把b设成c,这样才行。我深深记得孩子们当时眼睛被点亮的样子。

640.webp (9).jpg

这还只是最简单的算法。计算机世界有大量极其有趣的内容,都是很值得去了解的。

但为什么我会把逻辑、算法排在最后一位呢?因为去学这些算法、进行这样的思维训练,不一定需要通过编程。我们的生活中处处都有素材。

我女儿丢三落四总是忘了带课本和作业回家,我让她画了一张流程图,用到了顺序执行、if else和 foreach。

我们可以用回溯法来走迷宫,用二分法来查字典,有了决策树连晚上吃什么的争论都会少很多。

有一定的编程训练,有助于养成这样的习惯:对生活中的万事万物都问一句“它背后的算法是什么、有没有更好的实现方法”。

如果有相关计算机知识,也能更好的对生活中常见的事物给出具体的、有意思的解释,例如:商品的条形码是怎么回事?为什么会是三个角是黑块?为什么中间挡住了一块还是能够扫码扫得出来?

但这些能力提升的关键,在于思考,而不在于具体的编程。这个不插电编程的网站上有非常丰富的资源 , 国内有清华大学的终身学习实验室在做类似的尝试,我也正在设计一门三阶段的不插电编程教程,后续会在公众号放出。

小结一下,以上是第一部分,我的观察——孩子们可以从编程中学到什么:

  • 最重要的,养成探索的习惯。

  • 其次,是通过编程可以建构式的学习很多别的领域特别是数学的知识

  • 第三,是培养工程化解决问题的能力

  • 最后,是用编程语言让思维可见,学习逻辑与算法

我的思考:糟糕的编程课是怎样的?

有了上面这些观察,我们就可以推导出一门编程课是好还是坏。我要特别说一说糟糕的编程课是怎样的,期望能给正在为孩子挑选编程课的家长一些帮助。

  • 一、不求理解、不能让孩子做到举一反三的

商业机构的通病:买单的是家长,所以课程首先要让家长看到成果,至于孩子们学到了什么,尤其是那些隐性能力的提升,反而是次要的了。所以市面上太多的课,都是这样的:

跟着我做哦

  • 第一步

  • 第二步

  • 第三步

  • 完成啦, OH Yeah!

孩子只是照着做,一点都没理解。但家长不知道呀,看见孩子做出了漂亮的作品,觉得好厉害好高兴。

有些家长可能会觉得,不光是我,孩子也高兴,那还不够吗?

有时候还真不能光以孩子高不高兴来做判断。我之前教过个孩子,每次一上课就来偷我的答案纸,偷去照着把程序全拼好,YEAH 任务完成啦,他就特有成就感。其实变换下题目问他,一点没理解,还是啥都不会。短期来看这样的成就感是可以提升兴趣的,但长期来说实在没多大好处。

  • 二、花哨,只求酷炫效果,买椟还珠的

类似的,那些很花哨、只求酷炫效果的,也不是好的编程课。很多机器人课程是重灾区。有些机器人课产品,提供了大量复杂组件和预先编好程序的模块,只是为了能够让孩子方便的搭建出某些特定功能的机器人。它至多只涉及到一点点逻辑和算法,相关的原理以及在生活中别的应用场景则完全不涉及。孩子们上完课,也只是会用这一种玩具搭这一种机器人而已。

  • 三、不能让孩子自主探索和创造的

举个国内编程课程的作业的例子:让角色从A走到B,说一句“哎呀”,然后倒下。请完成这一段动画。

作为对比,大家可以看一下scratch 官网提供的教材,第一单元的作业:给定10种积木块,请以任意方式使用它们,并把你的成果展示给大家看。

640.webp (10).jpg

我们可以到网站欣赏下孩子们的作品,五花八门什么都有:

640.webp (11).jpg

后者完全开放,前者却是有标准答案的填空题。孰优孰劣相信大家都能判断。

  • 四、不符合孩子发展规律、超出孩子能力范围的

给大家说几个反例:

例子一. 我在最初给孩子们上课时,用了英文版界面,想着孩子们在学编程的同时还能学英语,多好呀。可是孩子需要花很多额外的精力在记忆英语单词上,自主探索的行为也少了很多。换成中文后就顺畅多了。

例子二:我的朋友,试图直接教一年级的女儿 python 和 java script,碰壁,最终还是回到 Scratch。因为孩子打字速度慢,完成代码需要的时间太长了,注意力根本不可能集中那么久。

成人们总急不可待的希望孩子们立马变得很厉害。但是对孩子来说,学习的兴趣远比某一个时刻学到的知识要更有价值。如果超前、用不合适的方法教孩子一些内容,孩子接受不了,反而对学习编程失去了兴趣,那就得不偿失了。这方面我自己的编程课也常犯错,还是需要不断提醒自己。

总结一下第二部分:我的思考——糟糕的编程课是怎样的:

  • 不求理解、不能让孩子做到举一反三的

  • 花哨,只求酷炫效果的

  • 不能让孩子自主探索和创造的

  • 不符合孩子发展规律、超出孩子能力范围的

我的建议:要不要让孩子学编程、怎么学?

最后以几条建议作为本次分享的总结

  1. 学编程远不只是学编程思维,编程思维也远不只是从编程中学。孩子们可以通过编程学数学,也可以在日常生活中也可以练编程思维。当我们说编程时,视角可以更广一些。

  2. 如果你不介意让孩子玩电子产品,那么ipad上装一个 lightbot 或 spritebox,电脑上装个 scratch,陪孩子熟悉后让孩子自己摸索,就足够好了。

  3. 如果孩子实在兴趣浓厚想让你为TA报个班,请仔细考察该机构是否存在我上面说的四个问题。

  4. 如果孩子极浓的兴趣有极好的编程天赋,那今天的分享并不适合,另有机会再和大家交流这个话题。

本文转自微信公众号“南瓜博士”,作者Elfe。文章为作者独立观点,不代表芥末堆立场。

1、本文是 芥末堆网转载文章,原文:南瓜博士
2、芥末堆不接受通过公关费、车马费等任何形式发布失实文章,只呈现有价值的内容给读者;
3、如果你也从事教育,并希望被芥末堆报道,请您 填写信息告诉我们。
来源:南瓜博士
芥末堆商务合作:王老师 18710003484
  • 当孩子学编程时他们在学什么分享二维码