双减政策学科和非学科科目划定结果出炉,编程算是非学科,我算暂时松了口气,不用纠结是否提前退费了。
我们家熙熙学乐高EV3机器人编程学了5年,之前太懒,没考虑什么将来的发展方向,只是跟着机构的节奏按部就班的上课,每周一节,孩子喜欢,就一直坚持到现在。
后来孩子够年龄参加比赛我才开始花心思研究,请教了自己创业做编程教育的朋友,基本捋清楚编程的学习发展路径。
▲EV3初级,搭了一条会张口的响尾蛇
如果你的孩子正在学编程,或是有打算去学,我会建议你们先搞清楚学习路径,我们首先得知道这条路通往何方,才能定阶段性的目标,才有利于在每个节点做选择。
今天这篇都是大实话,是我们5年学下来的点滴经验和心得。
1、编程是神马东西?
2、编程思维是神马东西?
3、学编程能提高数学成绩吗?
4、学编程对升学有帮助吗?
5、几岁学编程合适?学习路径规划
1
编程是什么,不是什么?
我们从一年级开始学的是乐高EV3“智能机器人编程”课程。当初报班时并不大知道编程是什么,以为机器人编程就是编程,后来才发现自己太狭隘。
编程通常用“语言”来区分种类,常见的编程语言有:Scratch、Python、C++等。
目前市面上少儿编程课大体上分两类:
一类是Scratch或是仿Scratch的图形化编程课程,运行软件可以创造属于自己的动画,故事,音乐和游戏,以培养孩子学习编程的兴趣为主,起到锻炼孩子思维能力的作用。西瓜编程、核桃编程等属于这类。
▲用Scratch设计的“接苹果游戏”
Scratch是美国麻省理工学院(MIT)设计开发的少儿编程工具。
它将程序指令变为一个个“积木块”,对孩子比较友好,不需要懂英文,不需要敲击代码,不需要背诵任何编程指令,只需要将积木块拖拽,按照一定的逻辑连接在一起,就可以很方便的进行编程,从而快速制作出动画、游戏、交互程序。
▲Scratch编程软件界面
编辑好后运行,孩子就能马上看到自己的设计成果。发现哪里不好,还能随时修改参数,所以这种可视化的、及时反馈的形式深得孩子欢心。
另一类是基于Python和C++等计算机语言的编程课程,这类编程课主要是后期参加编程比赛,比如智能机器人赛事或者科技创新赛事等等。
我儿子学的乐高EV3属于这种,主要是通过组装、搭建、编写程序让机器人完成指令。但是乐高机器人有自己的课程体系,用的是robotc这款编程软件。
▲不同造型的乐高机器人
机器人编程会综合学习到很多概念与知识,比如:机械、电子、工程、自动化、数学、计算机软硬件,同时会运用很多先进的传感设备来实现机器人的功能。
▲ev3的硬件设备
▲用乐高ev3做的自动涂抹奶油机器人
这么说下来你可能已经明白了,少儿编程≠学习写代码!
两种课的形式虽然不同,但本质上,编程就是你和电脑之间的对话,用电脑听得懂的语言,告诉它我想让它做的事。
举个例子来说:
你渴了,让孩子帮你拿杯水过来,你会这么和孩子说:
麻烦你帮我倒杯水,谢谢啦。
如果想让电脑听懂这句话,就需要这么和电脑说:
1、定义对象:什么是水和水杯2、先往水杯里倒满水3、拿起水杯4、直线向前移动2米,停止5、左转(身),递水给我
说完这五个步骤,电脑才完成我们想要它做的事情。
机器没有感情,不会猜测你的心思,程序的世界没有模糊地带,你下达的指令表述和逻辑要严谨,没有歧义,才能获得想要的结果。你给电脑发送指令时,得站在电脑的角度去思考问题。
▲端水机器人
另一个,编程≠人工智能!
前面说的两种编程,和“人工智能”还相去甚远。
真正的人工智能,其实是指以“机器学习”为主的一种软件系统。
机器学习是什么?
“机器学习是一门研究让计算机无需专门编写程序,就能完成工作的科学。”
很意外吧?我们现在这么努力的学习如何编写程序,你告诉我人工智能的目标是“不需要编程”?
举个栗子就明白了,比如AlphaGo和柯洁的围棋大战,AlphaGo的胜利是因为我们给它编写了下某一步棋的程序指令吗?
当然不是。
那它是怎么下棋的呢?
AlphaGo研究了15万盘高手的棋谱,自我对弈了3000万局,柯洁每下一步,它都会利用大数据在脑中过一遍,自己的最优落子点在哪,下哪里胜率最大。
AlphaGo其实是训练了人工神经网络来进行围棋图像的理解,具体说来就是落子的选择和盘面形势的判断。
如果哪个机构用“学了我家的课程,孩子能自己编写很厉害的人工智能程序”这类说辞来招生的话,都是扯!
2
编程思维到底是个啥?
还记得那个经典的脑经急转弯吗:把大象装进冰箱分几个步骤?
中国人都知道:第一步打开冰箱门,第二步把大象装进去,第三步关上冰箱门。
▲如何把大象装进冰箱
其实这个答案包含了典型的编程思维。
到处都在说编程思维,显得很高深的样子。其实学过编程就明白,编程思维是我们解决问题的一种方法,利用已有的知识和工具,将解题思路转化成逻辑运算的步骤,从而完成复杂任务。
如何用编程思维解决问题,用专业术语解释可分为四步:分解-模式识别-抽象-算法。
我帮你翻译一下就是:
1、分解:把一个复杂问题,先拆解成更好理解的、可执行的、简单的若干小问题。
假如我们全家要去上海迪士尼游玩,具体该怎么玩呢?
是不是可以把这个问题拆解成——必玩的项目有哪些、哪些项目适合小孩子、吃什么、住哪里、预定机票酒店、准备出行物品等若干小问题。
把复杂问题拆解、理顺的过程是解决问题的基础,只有把问题拆解清楚,才有接下来实现的可能。
▲迪士尼游玩思维导图
2、模式识别,有点类似数学中的化归,就是通过观察分析,找出“重复规律”,把新问题转化成老问题。
假如老师给你布置了一个任务:画100棵不同的树。怎样画更高效?
我们首先对树木进行模式识别,发现一棵树有这些共同点:有树干、树枝、树叶。根据这些特点建立起树的“模式”,按照这个模式就能批量画树了。
在类似的树干上画不同形状和颜色的树叶,改变局部特征,就能画出好几种树。
也就是说,当你发现一些可重复的步骤,就可以把它们整合起来,建立模式;再遇到类似问题时就让计算机套用此模式,快速解决。
3、抽象:这个很好理解,把上一步识别出来的新模式,进行抽象归纳总结,便于之后的问题解决。
就像我们做数学题时套用的公式,公式就是抽象概括出来的。要想编程学得好,得具备具象与抽象之间的转换能力。
4、算法,是一步步解决问题的过程。
根据前面对问题的拆解与分析,设计每一步的路径方法,解决整个问题。
过程中不断揪出并修正bug,最终到达目标。
看,整个编程思维就是这么一个完整的闭环。
不管你学不学编程,这一套解决问题的方法都是应该在日常生活中教会孩子的。
3
学编程能提高数学成绩吗?
总有人说学编程有助于提高数学成绩,因为编程的核心是算法,而算法的核心是数学。C语言学习中会大量用到算法,本质是数学模型计算问题。
我并不否认编程所需要的能力很多和数学相通,但实际上并没具体数据支撑学编程能提高数学成绩。
就像我们说游泳运动员身材都很好,手长脚长,殊不知,可能正是因为他们手长脚长才被选去游泳呢。
熙熙学了5年编程,对提高数学成绩有没帮助我不敢说(虽然他数学一直不错),但小伙子的耐性倒是见长。
乐高机器人课每次要上三小时,前面一个小时搭建,后面两个小时写程序,运行,调试,修改,再运行,再调试。
因为没有人能一次把程序写对,写完运行会发现这样那样的问题,这时候就需要进行“调试”。包括去参加机器人比赛也是这样的,要反复调。
▲这一连串的任务调了几个小时才成功
调试对于孩子来讲非常磨人,有时候调半天愣是差一点不成功。我见过他调不成功负气摔门而出的样子,也见过他调不好偷偷哭鼻子的样子。
但现实不相信眼泪,光生气,光哭没有用,程序调不好,机器人就是不听话。
后来他慢慢成熟了,懂得要静下心来,仔细观察,找到问题出在哪。然后思考,该调整哪个参数,一点点测试,每个参数调整多少。
在这个过程中,需要你冷静,需要你有耐心,需要你在极度挫败的情况下还能不放弃,需要你在心情差到极点的时候还要想办法去解决问题,这样的煎熬都走过来了,数学成绩提不提高真的不重要了。
学机器人编程这么久还有一个很大的收获就是,孩子会有意识的观察生活中的现象。
比如上个月我们去北京玩,在广州白云机场,看到有个扫地消毒的机器人。熙熙说它里面肯定有自带的波传感应器,感应到人或障碍物时会避开,会自动转向。同时还设定了每隔多少秒就喷一次消毒液,他和弟弟跟在这个机器人后面看了许久。
▲广州白云机场的冰清玉洁机器人
比如学搭了感应门,乘坐APM线时他就明白出站人一靠近门就自动打开的原理。
再比如我们去买东西,他发现家乐福超市和宜家的结账区设置就很不同。
家乐福有10个结账台,顾客自行决定到哪个台排队买单。看你运气,如果你排的那条队大家的东西少,收银员动作麻利,结账的速度就快。
宜家则不同,也是有10个结账台,但顾客刚开始是按照先来后到的顺序排在一队,轮到你时看哪个结账台空了就去哪里,这样你不需要纠结哪个队伍快哪个队伍慢,因为这种排队方式不会出现“后来者先买单”的不合理现象。
我忘记拍现场照片了,用一个示意图你们一看就明白。
什么时候统一,什么时候分流,如果孩子通过学习编程,能去思考生活中解决一个问题的最优路径是什么的话,我觉得也是比提高数学成绩更重要的能力。
4
学编程对升学有帮助吗?
早在2018年教育部就已经发文要求,“义务教育阶段压缩特长生招生规模,2020年前取消各类特长生招生”,而且,大部分人都是读了小学才开始学编程,很多学校连编程课都没开,更别提什么组队参赛了。
所以,小升初这个阶段,编程特长对升学是没什么帮助的。
那中考、高考,有没有学校招编程或机器人方向的特长生呢?
有是有的,前提是你至少得拿到区级以上的奖项才有用。
最有用的是拿NOI(全国青少年信息学奥林匹克竞赛)的奖。
NOI的学习内容和少儿编程学的东西完全不一样,NOI学的是系统的计算机知识,选用的是大学教材,将大学计算机专业课程里面基础性的和思维性的,下沉到青少年阶段进行学习。
NOI系列活动包括:
全国青少年信息学奥林匹克联赛(NOIP)
全国青少年信息学奥林匹克竞赛(NOI)
全国青少年信息学奥林匹克竞赛冬令营(WC)
国际信息学奥林匹克中国队选拔(CTS)
进入国家队的选手将参加国际信息学奥林匹克竞赛(IOI)
如果高中阶段在NOIP取得奖项,并通过省选,参加全国赛,取得三等奖以上,高考的时候就有机会报考各大高校的“综合评价招生”。
如果能在高中阶段获得NOI全国赛国二以上奖项的话,全国36所名牌大学的强基计划都可以报考!
在这期间如果能够通过国家集训队的选拔,成为国家集训队的队员,那么就有机会保送北大清华。
如果你有规划出国,国外不少大学、高中对IOI的奖项也是很认的。
信奥赛虽然比起数学奥赛、物理化学奥赛等还算小众,但每年全国比赛金牌也就几十个,也不容易拿的。
如果我们是为了拿奖去学编程,为了升学去学编程的话,那真是本末倒置了。学任何东西都应该是兴趣优先啊,不要让好端端的一个东西变了味,得不偿失。
5
几岁学编程合适?
学习路径如何规划?
接下来聊聊编程的学习路径规划。
我们学语言都讲究习得,越小学越无痛,但学编程不是。
按照我两个儿子的经验,小学一年级开始学是没问题的,太早可能理解不了,天赋异禀的孩子除外。
熙熙是一年级开始学的,当时我给他5岁的弟弟哈哈也报了一个,发现弟弟搭建没问题,但一旦涉及到程序和逻辑,比如序列、循环、变量等这些抽象概念就理解不了。为了不打击孩子的自信,我就把弟弟的课停了。
▲哈哈在课上讲解自己做的“捕鼠夹”,其中的原理还说不大清楚。
编程这东西在小学阶段早一点学和晚一点学其实没什么损失,别信“输在起跑线”那些鬼话。等孩子抽象思维和逻辑思维发展到一定程度,他才能学得进去,学习效率反而更高。
如果你们想学,建议1-4年级的孩子可以从可视化编程语言开始学习,比如Scratch或是机器人课程,先通过这些直观有趣的入门,了解基本的编程逻辑。
学Scratch还是机器人,看孩子的兴趣。
如果是喜欢乐高的孩子,从搭积木到机械结构、再到机器人自动化是一个比较自然的路径。
如果是天马行空喜欢捣鼓设计东西的孩子,学Scratch就挺不错。
但需要提醒的是,Scratch可视化的课程再好玩,本质上还是比较初级的东西。Scratch课程最多学两年就差不多了。
而机器人课程呢,它搭建和编程都有涉及,属于交叉领域,但在少儿阶段,学习的内容还是集中在逻辑控制层面,并不会特别深入。
所以,5年级以上的孩子,建议开始转向纯编程语言的学习。只有使用正规的编程语言,才能学会严谨地表达程序结构和逻辑。像我们现在学到乐高EV3的高阶拓展阶段,老师也建议我们转语言学习。
那编程语言这么多,选哪一种呢?得看孩子将来的规划。
如果想开发iPhone的App,那就学Swift;
如果想打竞赛,那就一定要学C++,因为2022年之后信奥赛只能用C++语言编译了。
也许你会问,既然只有高中获奖才对自主招生有效,为什么小学/初中就开始学?道理很简单呀,信奥赛要经过层层选拔,这么高难度的比赛,可能要多参加几次才有机会拿奖啊。
如果以上都不喜欢,那就试试学Python吧,因为Python在各个领域都有比较广泛应用,比如3D游戏开发、云计算、操作系统、Web应用开发、人工智能里的机器学习等诸多领域,Python都可以胜任。
比如下面就是一段用Python语言编写的程序,当你输入“Love”之后,电脑就会自动打印一个爱心:
6
编程比赛参加哪个好?
这么多赛事,参不参加好,参加哪个好?
按照我了解的情况,国内赛最好参加教育部白名单内的,能进入白名单的赛事都是比较正规的。
教育部办公厅从2019年起印发《面向中小学生的全国性竞赛活动名单》,该白名单每年动态更新一次。
我撸了其中“自然科学素养类”的比赛,你们可以看看:
整体来说,机器人类的比赛比纯编程类的赛事要多很多。
你留意看证书的右下角那行字:不作为中小学招生入学依据,这下相信我上面说的,在义务教育阶段学编程对升学没有直接帮助了吧。至于在投简历时,学校会不会参考获奖情况这个就不知道了。
讲完国内比赛,再来看看国际的。
1、VEX(VRC及VIQC)机器人竞赛
2、First联盟系列机器人竞赛(FLL、FTC、FRC)
3、Botball机器人竞赛及JuniorBotball挑战
4、RoboRave国际机器人大赛
5、RoboCup机器人足球世界杯
这5个赛事都是纯正的国际性比赛,熙熙2019年参加了RoboRave中的“超级巡线”专场赛,也是一等奖,有点遗憾没进全国的总决赛。
我大致列了一下这两个比赛的明细,供了解:
▲点击看大图
基本上机器人比赛都是组队参加的,除了要搭建和编程以外,还讲究和团队队员的配合,沟通协调能力都有锻炼到,有机会和条件还是可以选择一些让孩子去参加的。
7
学习编程的资源
①亲子游戏
对于幼儿园的小朋友,前面说过了,不着急学编程。但是可以通过一些亲子游戏来理解编程逻辑。
国外有个很流行的“If…Then…”动作游戏,我把玩法给你们介绍一下。
“If…Then…”是很常用的程序指令,用于告诉计算机当某件事发生后,该执行某个指令。如果怎么怎么样,就怎么怎么样。
多喊几个小朋友一起玩,有好几种玩法:
(1)如果我这样做,你也这样做
一个小朋友站在中间当主角(引发者),主角开始转圈圈,则另外的孩子也开始转圈圈;当主角停止的时候,其他孩子也停止。
通过这个,让孩子去理解如果发生了什么条件,相应会产生什么结果。
(2)如果我这样做,你就那样做
事先跟孩子约定好,当主角开转圈圈的时候,其他孩子要原地踏步走。当主角停止,其他孩子也停止。
通过这一步,孩子慢慢理解到,在条件语句中,条件和结果是可以不一样的。
(3)如果我这样做,你就那样做,剩下的人做其他
这一步更复杂,当主角举起右手,指定的一个孩子举起左手,剩余的小伙伴们抬起右脚。
通过这一步,孩子就理解了整个条件语句的概念:如果发生了某个条件,于是就产生相应的结果;但如果没有发生那个条件,于是会产生别的结果。
以上三个步骤可以结合起来连续做,做错的孩子被淘汰,坚持到最后的孩子获得胜利。
其实,三种规则分别对应了条件语句里的三种情形,在户外的嬉笑奔跑中,孩子轻松地就理解了“if……then”这个概念。根据这一原理,还可以自创更多更复杂的玩法。
②具有编程思维的桌游
除了亲子游戏外,市面上也有不错的具有编程思维的桌游,训练孩子的条件判断思维、推理和策略能力。我推荐几款,篇幅有限不展开详细讲,大家感兴趣可以去搜来详细了解。
ThinkFun的RobotTurtles(机器乌龟):
游戏设计为棋盘格局,根据一定的规则,让孩子们通过选择卡片内容,控制乌龟的前进方向,路途解决各种障碍,最终到达宝石目的地。每次游戏的难度会一级级增加。4岁以上就能玩。
Pixblocks的奔跑吧兔子:
这款比机器乌龟稍微难一些,个人认为至少得5岁以上才能玩。目标就是设计一条符合规则的行进路线,让兔子吃完所有的萝卜,过程中要考虑限制条件和可能出现的意外情况。
通过游戏可以了解编程中的“跳转”功能、“goto语句”、事件触发、循环等概念。
等到孩子7岁左右,可以考虑玩ThinkFun的PotatoPirates(土豆海盗)和“编程三剑客”:
▲PotatoPirates(土豆海盗)
▲“编程三剑客”从左到右依次是:
OnTheBrink(边缘地带)
RoverControl(探测器控制)
RobotRepair(机器人修复)
③学习网站
在这个网站上有很详细的免费课程,它会一步步教授孩子如何运用scratch来编程,把序列、循环、事件等专业概念拆解成小步骤让孩子一点点练习,像玩游戏闯关一样,无痛学习。
④编程书籍
市面上有不少针对零基础学习编程的书,我们可以带孩子到图书馆去找一些,让孩子翻翻看,哪一本更喜欢,再决定是否购买。
推荐两套我们看过觉得还不错的Scratch入门书。
一本是DK的《编程真好玩——6岁开始学Scratch》。
作者乔恩·伍德科克(JonWoodcock)是牛津大学物理学学士、伦敦大学天体物理学博士。8岁开始编程,为孩子写过多本编程书。
这本书通过八个具体的游戏案例(寻宝、竞速、迷宫等),介绍如何使用Scratch软件,让孩子从零开始,轻松入门。
我觉得它比较好的一点是难度循序渐进,图文结合,步骤讲得比较清楚,关键指令块均配有详细的解释,如果有懂一点的父母带着孩子一起学那就最好不过了。
另一套是《Scratch少儿趣味编程》和《Scratch少儿趣味编程2》
这两本书是以漫画的形式,通过七个卡通人物:喵太郎、搜索君、小数、阿粉、世界博士、节奏妹、跳跳哥,带小朋友们学习语文、数学、科学、音乐、体育等不同科目的scratch编程。
色彩丰富,语言有趣易懂。
作者阿部和广一直专注于面向少儿的编程课程研发,师从PC之父、图灵奖得主艾伦·凯博士。美国麻省理工大学(MIT)媒体实验室教授米切尔·瑞斯尼克特别作序推荐,算是Scratch教材中比较经典的书籍了。
这两年因为疫情,我们的线下编程课也上上停停,导致学习有些不连续,我们也一直没想好到底转哪种编程语言继续学习。
上周入了两本书,都是朋友推荐的,一本是《DK编程真好玩:9岁开始学Python》:
一本是《栀子猫的奇幻编程之旅——21天探索信息学奥赛C++编程》:
打算甩给孩子暑假翻翻,让他把Python和C++都先了解一下再做决定。
以上就是我所了解的编程内容,算是知无不言言无不尽吧。
不要问我编程值不值得学,得看孩子是不是真的喜欢。
熙熙坚持学了这么久,我想一方面是我没给什么压力给他,另一方面也是因为这个新领域给我和孩子带来了新知识,装载着这些新知识的我们获得了新的思维和新的看待世界的角度吧。
如果文中有什么错误,欢迎指正,你对编程还有啥疑问或想法,也欢迎留言区交流。