当前位置: 首页 > 儿童教育

如何判断孩子要不要学习编程?

原创 : 陈寅    2020年9月15日
“少儿编程“在这两年还挺火的,那孩子要不要学习编程?少儿编程教育学的到底是什么?怎么学?难度大吗?
各位校友,各位家长,大家好,我是北京5期5班的陈寅。今天主要跟大家聊聊关于编程那点事,如何判断孩子要不要学习编程。

首先要特别感谢王婧老师,组织了这样一个平台,方便校友们交流;其次,还是要感谢王婧老师,因为在这个群里,可能我和绝大多数校友有所不同,我是新晋宝爸,宝宝是今年7月底才出生的,之前是偷偷的溜进来的。也因此,原定于7月份的分享拖到8月份,然后又从8月份拖到了9月份,给王老师增添了不少麻烦,感谢感谢。
我目前就职于一家编程教育的创业公司,主要工作包含两个方面,课程研发以及教师培训。可以说,我天天研究的就是少儿编程“教什么”和“怎么教”这两个问题。而我硕士、博士的专业,恰恰就是关于算法的底层学科--离散数学,天天研究的就是如何设计一个算法,以及如何证明它的正确性。可以说,我不仅知道一个算法如何实现,更懂得它是如何一步一步设计出来的。

也正是因为了解到编程所能承载的巨大教育价值,所以毕业后毅然投身于基础教育之中。去年,也非常有幸能够加入到教育部“中小学人工智能教育项目”中,承担部分教材的编写工作。
“少儿编程“在这两年还挺火的。不过呢,这里面也存在着不少误解。比如,有的人会说,”编程那么困难,我当年都是大学才学的,现在的学生能学会嘛”;也有的人会说,“我们家孩子以后反正又不会从事计算机互联网相关工作,学编程干啥呀”;还有一种声音很有趣,上来就说“编程好,必须得学,我听人家说这是孩子在智能时代生存的关键,得趁早”。

你看,不同的声音其实还蛮多的。呢我就先说说我的想法,完了咱们再慢慢拆解。
先说答案,我认为少儿编程教育学的到底是什么,学的是“学习如何学习”这件事,关于学习本身这件事。换句话说,如何判断孩子是否要学编程的标准就是,孩子本身是不是会“学习”?可能您听到这里,会觉得很奇怪,啥叫会不会学习?这每个孩子,每个人不都会学习吗?还真不一定,拿我自己举例,我英语成绩一直不好,在很长的一段时间里面,我就认为,想要学好英语,就是抱着红宝书开始从A到Z背单词。你看,我就是天真的认为,学习英语等同于背单词,学习英语一定要从背单词开始……这些其实都是关于英语学习本身的一些错误认识。
那在这里也稍微做一个说明,关于学习这件事确实有点大,涉及到脑科学、认知科学等等学科,况且咱们的目的也并不是说学习,还是要回到编程这个主题上来。因此,由于时间关系,我们这次只选择一个侧面去说,只选择一个基本框架去说。

这个基本框架是什么呢?
其实,就是 “系统 = 输入 + 黑盒子 + 输出” 这样一个简单的公式。
你可千万别小看这个框架,虽然描述起来很简单,但是适用性可不是一般的广。不论是机械论,还是演化论,都能用它进行描述与表达。
你比如说,遥控器,当我们按下某一按键的时候,就相当于给系统一个输入,然后这个系统经过内部复杂的,也许我们可以理解也许我们不能理解的处理过程,反馈给我们一个输出,比如执行换台、或者调解音量的操作。再比如,电梯,我们未必真的了解电梯的运行逻辑和实现原理,但是我们都知道,当按下8这个数字的时候,电梯一定会把我们送至8层。你看,这也是输入+黑盒子+输出。

再来,人类自身也是这样的一个系统,大脑就相当于系统的黑盒子,它的运行原理至今我们尚未完全了解,但是我们却总是可以根据系统的输入,比如看到的文字,听到的,感受到的,品尝到的,来做出相应的行为,也就是输出。
那这个“输入、输出”的模型,跟编程、跟学习又有什么关系呢?别着急,这就来。
我自己有一个观点,就是“学习”、“研究”、“解决问题”,这三者在相当大的程度上,其实是一回事。你看,学习,是不是明确告诉你,如果你如何如何,结果会怎样怎样,其实啊,大体上来说,就是给系统一个输入,然后告诉你系统的输出是什么,并且不断加强输入与输出之间的这种联系,不论是理论类型的知识还是实践类型的知识,都是如此。
然而,到了解决问题到了应用的时候,往往就反过来,都是先描述一个预期,相当于先确定了输出,然后问你,想要这个输出,应该给系统什么样的输入呢?
你看,是不是很像,虽然它们的过程方向并不一样。
好,到这里,我们收一下,回到今天的话题。之前说判断孩子要不要学习编程的标准,还记得吗,关于学习本身这件事,孩子是否掌握。在这个“输入、输出”的框架下,其实就可以这样翻译,1、在学习上,孩子是被动等待反馈,还是善于主动利用反馈;2、孩子是仅仅会主动利用反馈,还是能够有主观意识的制造反馈;
其实不难发现,很多孩子学习遇到阻碍,是因为他们的学习只有一种模式,在这种模式下,他们要么是“做对了”,要么是“不会做”。几乎没有中间状态。
万维钢老师在精英日课中说,成功的经验和失败的教训,都应该是你迭代所用的输入,其实说的也是这个意思,也是放在这个框架下面来理解的。
那你肯定会说,好,即便你说的都对,那你如何证明,学习编程有助于孩子掌握这些内容呢?好,我来举一个例子。如何在编程的过程中,学会通过利用反馈,甚至于主动制造反馈的方式来学习—而这些,都是通过“犯错”来完成的。

你比如说,现在有一个任务是在计算机中通过编程画出“正四边形”。
基本上,只要你能纸上画出来,你一定就能在计算机中画出来。无非就是向前移动一段距离。然后拐弯,再移动,再拐弯……对吧。这并不难描述
你看啊,中间这段程序其实就是画正方形的程序,是不是和我们刚才的描述一模一样呢?
为了方便起见,中间这段程序可以进行一个精简,把核心的部分拿出来,放到重复执行里面,设置好次数即可。右边和中间的程序效果是一模一样的,但是更加简便一些。
也许你之前并没有接触编程,但是,这种非常接近自然语言的描述方式,其实很容易理解对吧。
同样的,即便是正三角形,正六边形,按照同样的方式进行,相信也不再话下。

但是,这里面有事情。
刚才咱们说到,这部分程序本身啊,即使对于二年级的孩子来说,也是比较容易掌握的,并不困难。
但是呢,如果孩子在数学课上学过相关知识,那他很快就能把参数填对并画出图像;可如果他没有学过,或者忘了,就画不出来了。
这个情况就是前面说的,要么“做对了“,要么“不会做“,没有中间状态。
有一次我上课,有几位老师来听课,当他们看到自己的学生坐在那里不知道怎么办时,就坐不住了,对学生说,“这个刚学过的,你怎么又忘记了“
你看啊,“怎么又忘了”,似乎这个过程更像是考试,而且更像是在考察记忆力。
孩子之所以,要么明白了要么不会做,主要是因为,他们长期处于“一次就得做对”这种文化氛围中。因此,他们特别害怕犯错。
不知道你有没有这种感觉,这并不是编程课,而是通过编程的方式来考察数学课的学习内容是否掌握,或者用比较陈旧的学习方式来学习新的内容。而他们害怕犯错的心态,其实也源于之前的学习方式与评价方式。

那学过编程的孩子,当他们忘记数学课所学的内容时,他们有办法解决吗?
孩子们在开始学编程的时候,就会发现程序几乎不可能一次就写对,其实你看咱们写文章也是类似,很少有人能够一次写好一篇文章,都是先打框架,然后打草稿,最后反复修改。成为程序员大师,就是要不断培养和提高捉“虫”的能力。所谓的错误,也只是暂时和预期不符罢了;面对一个程序,我们要问的不是它对了还是错了,而是能不能修复,接下来怎么办?

不知道你有没有发现一个细节,“接下来怎么办“这个描述可不一般,它表明了一个基本事实——”有些事情,我可以不用一次就做对,我是有调整的机会“

好,接下来我们看看学过编程的孩子如何面对挑战。咱们拿一个新任务来举例说明。之前画的是正方形,接下来,咱们的任务是画一个五角星。
同样的,相信各位家长在纸上都能画出来,但是用计算机如何画呢?
还记得之前绘制正方形的描述过程吧,前进,拐弯,前进,拐弯,前进,拐弯,再前进,再拐弯。你想想看,五角星是不是也是这个模式呢?
没错,五角星也是这个路数,只不过,前进和拐弯,得重复五次,之前是四次。这是一点区别。再有就是,四边形拐弯,转的是90°,而五角星拐弯,转的是?
好,问题的关键来了,五角星这个图形,每次拐弯时旋转了多少度呢?
如果是之前靠记忆数学知识来完成编程的学生,到这里很可能就卡住了,因为这个角度小学中低龄阶段,是没有教过的。也许有的家长可能会说,画条平行线么,很容易求出来的。没错,可是假如我不知道相关知识怎么办呢?这个挑战,还能完成吗?答案是肯定的,能够完成,而且并不困难。

回到,我们之前说的,编程很多时候,并不要求我们一次就做对,关键是,不对了,接下来怎么办。用这个思路,我们可以大胆尝试啊,比如130度或者150度。

你看,当我们输入130的时候,系统反馈的结果如左图所示,当我们输入150的时候,系统反馈的结果如右图所示。到这里,孩子很容易就能够判断,它们都不是五角星,左图口没有封上,右图又过了。没错,它们都不是五角星,我们仍然接着问,那接下来怎么办?
注意哈,虽然我们仍然不知道答案,但是至少,五角星拐弯的度数,应该在130到150之间。我们缩小了它的范围。
做到这一步,答案就已经出来,就是144,对吧。
你看,这就是不再强调一次做对的力量,即便面对一个看似无法处理的对象,也能通过“试错法”解决。
如果我们仍然以输入+黑盒子+输出的视角来看,那么试错法,强调的则是对于“输出“是否能够进行评价,并进而调整下一次的输入。这个过程,我们一般称为调试,你可千万别小看它,它可是智力活动的精髓。
试错法的本质,就在于能够主动利用系统的反馈。
然而,在实际教学中,有部分孩子即便学了试错法,仍然会小心翼翼地问出这样的问题,“老师,我能不能试一下这个,老师,我能不能再试一下那个”,其实这挺让人心疼的。
试想一下,如果能把这种态度拿到更大的文化氛围里,我们对知识习得过程的认识也许就不会那么僵化,不会那么害怕犯错。

不论是人类创造出来的因果逻辑,还是不完全归纳,亦或者最近比较流行的贝叶斯统计,其实都是这样的过程。如果整个人类文明都是这样发展起来的,那为什么孩子不能享受这样的发展过程呢?
好,如果刚才是通过主动利用错误,那么主动犯错又是什么意思呢?
回到刚才画五角星的例子,有一次,在课堂上,发生了这样一件事。本来是两个学生再争论五角星的外角到底是144还是145,后来虽然他们解决了争议。可是,谁也没有料到,那个小男生,突然又举手问了这样一个问题,“老师,那145既然不是五角星的外角,那它是哪一个图形的外角呢?“

我来稍微解释这个学生的问题
你看,在刚才的过程中,三角形对应120,四边形对应90,六边形对应60,对吧。一个图形对应了一个角度,一个角度也对应了一个图形。这个学生问的就是,那现在145对应了哪一个图形呢?
实事求是的讲,我当时直接就蒙了,我自己也从来没有想过这个问题。但是,我仍然故作镇定的说到,“恩,这是一个好问题。那当我们面对一个问题不知道的时候,该怎么办呢?“令我欣慰的是,学生们几乎异口同声的说到”试一试”。没错,试一试。这一试,可了不得了,居然为孩子们推开了一扇大门。
刚才画五角星,咱们试的是不同的角度,这回啊,就得试不同的边数了。

这是边数分别为5、10、20、以及50的情况。你看,对于右下角的那张图而言,这绝对是意外的收获,因为啊,如果把这张图形设置成一个任务,你还真不知道从哪里下手分析。
就这样,孩子们再次用试错法找到了答案。
如果咱们再次以输入,黑盒子,输出这个视角来看的话,实际上就是,不断的给一个输入,然后观察系统的输出是什么,此时,计算机完全作为,为孩子好奇心提供反馈的一个工具。
到这,可并没有结束。
我们试错的方式,找到了右下角那美丽的图形,但是紧接着,问题就来了,针对右下角的程序,如果把旋转的度数改回144,还是重复执行50次,会得到什么图形?其实,还是五角星,相当于重复画了10遍。那为什么144和145只差了1度,但是结果却差这么多?哦,原来是这个误差每次都会被积累,虽然每次只差1度,但是综合下来,要差了50度,因此才会出现这个结果。
好,那如果我们让边数也每次差一点呢?和度数一样,每次都多移动一些。会发生什么呢?

上图是故意让边长犯错的情况,下图是故意让边长和角度同时犯错的情况。而下图就是著名的螺旋线,如果再加上颜色,就是彩色螺旋线了。

今天,在很多教程序的书上,都会有关于彩色螺旋线的绘制方法,比如python,右图就是它的代码程序,或者作为正式教授内容,或者作为练习题。但不论是哪一种形式,如果仍然以输入+黑盒子+输出的框架来审视,均是输入这段代码,能够得到的输出是这样的彩色螺旋线。
而,你还记得我们是如何得到彩色螺旋线的吗?经历了漫长的试错+主动犯错,带着满满的好奇心,最终得到的一个结果。
面对同样的结果,哪一个孩子更加会学习呢?
前面说过,万维钢老师曾经在精英日课中说,成功的经验和失败的教训,都应该是你迭代所用的输入;其实啊,原文还有一句话,“但是,认知到这一点,可太不容易了”。
但你看,通过编程,就连小学生也是比较容易认知到这一点,至少我的学生们都做到了。
好,时间关系,就不举更多的例子来说明了,但是基本逻辑都是通过编程学习来培养孩子,从被动等待反馈、到主动利用反馈,甚至于主动制造反馈。而这些内容,其实都是关乎如何学习这件事的。
换句话说,其实是计算机能够作为强大理念的载体,书写孩子和知识之间的新篇章。学编程的门槛很低,但是天花板可以很高。
最后还有一点时间,就简单来分享一下,为什么编程可以做到?还有没有其他的学科也能做到这些?
回到我们之前说过的关于写作的例子,其实我们都经历了先下来,再修改的过程。其实,相当于先把写作的内容呈现出来,使得初稿本身成为对象,然后我们的思维对初稿进行再加工的过程。那么,如果把写作换成思维呢?是不是意味着,需要一个思维可视化的工具呢?没错,批判性思维的核心就在于首先把完成的思考过程呈现出来,
其实,编程就是一种把思考过程可视化的方法。你看,现在孩子学的编程,并不是通过敲代码的方式进行的,而更像是拼积木,更重要的是,积木的名字会非常接近人类交流所使用的自然语言。你可千万别小看这一点变化,它也许就是编程的第二次发明。通常第一次是技术上成为可能,第二次是说能够进行大范围普及。
可能家长们又说了,思维可视化,那思维导图也能做到啊。没错,思维导图的确就是思维可视化的工具,但是它和编程相比,还缺少另外一个非常重要的东西,就是实时反馈。我们前面虽然用试错法解决了挑战,但其实是有前提的,就是每次输入的时候,系统是需要给反馈的,而这个反馈几乎是实时的。其实,刻意练习的条件之一,也是获得实时反馈。
因此,正是思维可视化+几乎实时的反馈,才使得这一切成为可能。
即便如此,也并不是说,这件事只有编程可以做到。
传统的数学,其实也帮助孩子培养这一切。但是却太过于抽象,在这个意义上说,编程其实是打破了具象思维和抽象思维之间的边界,在他们之间搭建起了一座桥。
吴军老师在全球科技史纲中,提到了科技发展的两条线索,分别是能量和信息,说科技发展的方向,其实就是用尽可能少的能量去换取尽可能多的信息;当然,信息足够多,才可能进一步减少能量的使用。
如果按照这个视角来看,其实编程,也不正是通过能量来换取信息的过程吗?也许其他学科的学习,使用的生物能,编程呢,使用的是生物能+电能。
最后,再次感谢各位校友,各位家长朋友的聆听,准备不足之处还请大家见谅。有任何问题,咱们也可以继续沟通。也再次感谢刘老师的主持,以及王婧老师的组织。谢谢大家。
知了分享社,来自得到大学校友的有趣有料的知识分享,一个涉及家庭教育、儿童养护、兴趣培养、留学就业、职场套路、健康管理等诸多方面的知识平台。
作者更多文章>>
阅读:281 投诉
陈寅  陈寅
联合创始人/教研总监 
 
西安若恩教育 

微信扫码,了解更多