
个人觉得与其纠结学什么编程语言,还不如先搞清楚让孩子学编程的目的是什么。
编程本质上是一种解决问题的工具。你要解决问题,工具是次要的,最重要的是思路。而解决问题的思路,又必须要靠知识积累以及逻辑思维来支撑。
低层次的编程是执行层面上的编程。要解决什么问题、如何解决问题……这些思路都是别人的,你只用敲代码。就好比盖房子,规划图是现成的,你只用砌砖一样。
高层次的编程是要从现实状况中提取问题,分解成各个任务目标,拿出解决思路,设计好实现路径。这样的编程是有门槛的,一些儿童编程机构宣称“编程可以促进逻辑思维”,事实上却是逻辑思维要达到一定水平,才能真正理解编程。
所以你是想让孩子学哪个层次的编程?
我和队友是计算机专业的同学,在对孩子的教育规划中,编程是一个比较重要的内容。但是在孩子上小学三年级前,我们并不打算正式教他们编程,只是着手给他们做一些编程启蒙。
低龄孩子学习编程,我觉得核心在于帮助他们理解一些重要指令和逻辑。
比如,理解“如果……就……否则”的逻辑,让他们能发现这种逻辑在生活中的运用。
还有对循环的理解,从哪里开始,在哪里重复,到哪里终止,找出生活中涉及到循环的场景
……
为了让孩子能够深入理解这些指令,从他们3岁开始,我就经常带着他们一起玩桌游。
桌游玩多了孩子就能发现,这些桌游不管内容怎么变,架构都是一样的:随机、循环、条件判断。这不就是编程的内核吗?
我们家小孩经过长期玩桌游,除了能充分理解桌游背后的各种逻辑关系,还逐渐学会了剖析桌游的每个环节, 比如某个游戏的结束标准是什么,随机的形式有哪几种(洗牌抽牌、扔骰子、转转盘、转陀螺等等),有2、3、4、5、6……N个随机选项的骰子应该如何设计
……
从5岁起,姐姐开始把理解到规则加以运用,自行设计桌游。
这是昨天晚上最新出炉的游戏,大概玩法是:抽牌——选择对应颜色的形状块——谁先用形状块拼出图案谁就胜利。
除了理解指令,我们还侧重于培养一些解决问题的能力。主要包括解决问题的意识、数学工具的运用和解决问题的实战训练。
在数学方面,相比成绩和做题的难度,我更看重孩子对数学的兴趣,以及在生活中灵活运用数学。
姐姐从会数数开始,我就在教她做统计。统计分析是连接具体世界和抽象思维之间的桥梁,孩子可以通过分类、计量等手段,来观察数据并从中提出问题。
上一年级后,姐姐开始自己设计表格、学着使用excel之类的工具。
上周我和姐姐在上学的途中,发现了一个现象:提前5分钟出门,到校却只比以往提前了2分钟。针对这个现象,我们提出了一个问题:早上出门最优时间是几点几分?
为了解决这个问题,我俩进行了讨论:什么是最优时间?评价指标是什么?如何量化?途中涉及了哪些可能影响上学时间的因素?它们的变化规律是怎样的?……
最终,姐姐认为红绿灯是影响到校时间最主要的变量,于是设计了统计表,最近这几天每天都在对遇到红绿灯的时间进行统计。
再来说关于专业的编程课程。
我个人觉得真正是站在解决问题的角度来学习编程的,还得是在STEAM教育体系下的编程教育,孩子感兴趣,学习效果也是最好的。前提是你身边有正规的STEAM教育机构。
必须要说的是,现在很多编程机构都爱打“STEAM教育”的旗号,但你一追问“什么是STEAM教育”,他们又只会跟你重复概念:STEAM代表科学(Science),技术(Technology),工程(Engineering),艺术(Arts),数学(Mathematics),然后把你越说越糊涂。
其实STEAM是一种教育理念,最早源自美国针对K12年级的科学教育改革,颁布的《新一代科学教育标准》(NGSS),一开始只有STEM,后来加入了艺术,才成了STEAM。
所以STEAM教育本质上是一种科学教育,主要目的是让孩子学物质科学、生命科学、地球科学等等,而不是什么编程、机器人、思维、绘画之类的。编程只能算是工具中的一种,所以把编程教育等同于STEAM教育,那可以说是僭越了。
跟STEAM教育相对的,就是传统的物理、生物、化学、地理这样的学科教育。两者最大的区别在于,传统的学科教育,各个学科之间相对独立,而STEAM教育则是跨学科的。
要把跨学科的知识组织在一起,教授给学生,尤其是低龄的小孩,最重要的就是要设计一个合适的项目课程。比如月球殖民计划、城市农场项目、犯罪调查、城市交通设计、荒岛求生、物种选育等等。
这种包装成项目的课程,就是STEAM教育机构经常说的PBL课程,即采用Project-Based Learning教学法的课程。在这种PBL教学法下,不断以现实问题来启发孩子主动探索。
在STEAM教育体系下学习编程是什么样的呢?我家小孩上课的机构是在道路规划项目下学习的。
在这种PBL课程中,孩子会先提出问题(Propose):如何建设一条真正的道路、真正的道路有哪些元素组成、这些元素要如何呈现出来
其次规划方案(Plan):基建、车道分配、电子系统……
然后解决问题(Execute):浇水泥、埋电线、给红绿灯和巡线机器编程
最后评价和反思(Judge)。
里面涉及到的编程,主要就是学习两条指令:循环和条件判断。
孩子的目标是给道路控制系统编程,模拟红绿灯交替的过程,让机器人只要遇到红灯就会停下来。
道路控制系统涉及到的指令无非就是“红灯亮10秒熄灭,绿灯亮10秒熄灭”的循环;
给Ozobot机器人编程,模拟汽车行驶。Ozobot最大的特点是不仅能用scratch语言编程,还可以用颜色来编程,靠识别不同的颜色做出移动、退后、停顿、旋转等动作。
模拟汽车行驶涉及到的指令就是“如果为红灯则停止,否则前进(左转、右转)”的条件判断。
整个学习的过程中,孩子是学习的主体,是带着明确的目标、积极主动地学习,这样的学习状态让他们对“循环”和“条件判断”的理解会非常深刻。
但这种STEAM教育的主业是科学教育,并不是专门的编程教育。如果要学习专门的编程课程,我觉得可以选择一些采用PBL模式的编程课程,算是最贴近STEAM教育模式的。
姐姐上一年级以后,我和她爸开始逐渐带她熟悉一些编程环境,同时给她选择了一些PBL编程小课包,陪她一起玩。
我们家玩的是咕咚编程的新年课程包,把80多条编程指令,20多个编程思维原理包装成了四款含有春节元素、待孩子去开发的游戏:准备年夜饭、舞龙、迎财神、放烟花。总共只有20节课,每节课15-20分钟,小而精。
4个游戏的难度依次递增,既能满足零基础小孩的入门需求,家长陪玩也很上头。
最简单的年夜饭切菜游戏。就是采用的动画原理,一帧一帧地切换来呈现出切菜的视觉效果
只需要两条指令就能做出游戏效果,零基础的小孩上手非常容易。
后面的接财神、烟花绽放游戏涉及到的知识点难度比较大。不过课程视频里的讲解很详细,孩子虽然不能理解数学原理本身,但对解决问题的思路还是很清楚的。
关于这种PBL课程,我觉得最大优势在于:场景式的学习对小孩子启发很大,很容易让孩子们举一反三,联想到其他熟悉的生活场景。
姐姐就根据切菜小游戏,接连想出了切披萨、串糖葫芦的点子。这是衍生出来的串糖葫芦的小游戏。姐姐先画好素材剪下来,我负责拍照,美图秀秀抠图
简单编程。编程基本上是我在操作,但姐姐完全能理解每一条指令的含义,还经常给我提出建议:这里可以加个声音,那里可以换个背景。
最后呈现出来的效果
咕咚编程新年课程包里的第二个游戏是舞龙,龙头可以跟着鼠标走,使用了鼠标追随的指令;
第三个游戏迎财神,钱袋会随机从天而降。虽然一年级的姐姐对坐标系的理解有点吃力,但不妨碍她对随机概念的理解。
在理解了这两个指令后,姐姐开始举一反三:我们可以做一个鲨鱼吃小鱼的游戏,把钱袋换成小鱼,钱袋竖着掉,小鱼能不能横着游。龙头换成鲨鱼,跟着鼠标走,去捉小鱼。
先做了开头动画效果出来
20节课都学习完后,姐姐提出想做一款自己的游戏——石头剪刀布,因为可以用到她最喜欢的随机指令,和操作最熟练的“下一个造型”指令。
最开始只做了猜拳效果
后来姐姐觉得意犹未尽,要求加上她和弟弟的头像。加了头像还不行,还要根据猜拳结果来确定各自的表情:赢了笑,输了、平局要噘嘴。
我们讨论了各种方案的条件判断方法,最后呈现出来的小游戏
总之,不管选择什么课程、什么编程语言,孩子感兴趣、能够消化理解、能够因此受到启发,才是最好的。
最后我想说的是,像我们这样确定要把编程作为孩子今后的特长甚至是专业方向的家庭,最应该重视的、也是最容易忽略的,就是如何给孩子做好通识教育、打好人文知识基础的问题。
我们家除了我和老公是学计算机的,我的姐姐、弟弟妹妹、侄儿侄女学的也是通信工程、网络安全、电子信息之类跟计算机沾亲带故的专业,教育层次从职业技术学校到清华,从大专到博士都有。
就我们家这些人来说,虽然大家都学过编程,但区别还是很大的。大专生与本科生的区别,主要在于数学和专业基础知识的储备不同,导致前者的编程更多是执行层面上的编程,后者的编程更多是以解决问题、满足需求为核心的编程。
本科生与博士生的区别,主要在于数学水平的高低,后者的数学能力更强,所以在理论层面上的创新能力要强得多。
而普通高校跟清华的区别,主要就在于通识教育水平的高低。在我妹身上,我就深刻体会到了清华在通识教育上的强大。计算机专业的学生通过各种课程、活动,对社会经济、前沿技术、政治文化都有着深刻见解,这样开阔的眼界使计算机技术具备了更多跨行业创新、甚至是改变世界的可能。
除此之外,长期学习编程的人会形成一种非常理性的思维方式,这种强调“目标”,讲究“高效”的思维,用在生活上会产生很多麻烦。因为生活并不是纯理性的,需要追求精神上、情感上的愉悦和满足。这些无法量化的东西,很容易被这些高度理性的群体所忽视,而且更糟糕的是,这些人的逻辑往往非常强大,很难被说服。
跟这种高度理性的人长期相处,你会发现他们少了点梦想、浪漫、情怀之类虚无缥缈的东西,更极端的还会有道德上的缺失。所以越是要往理性方向培养的孩子,越需要一些人文土壤的滋养。
