从计算机科学里拎出来“少儿编程”,纯属耍流氓!1万字少儿编程简史让你清醒
“6岁就可学编程,8岁就可写程序,14岁就可写人工智能!”
“先人一步学编程,让孩子的未来离伟人更进一步。”
这些听上去特别“振奋人心”的广告语,都出自近几年异常火爆的少儿编程培训机构。如今,“少儿编程”,被定义为素质教育中的一个热门赛道;并且高攀上了“信息学奥赛”,被不少从业者寄希望于能重现当年“奥数”的辉煌。
根据《2017-2023年中国少儿编程市场分析预测研究报告》显示,当前中国大陆少儿编程渗透率为0.96%,按预计每人每年在编程培训领域消费6000元来计算,粗略估计目前国内少儿编程市场规模达105亿元。而就在不久前,某猫完成了13亿元的D轮融资,这也是至今为止少儿编程领域内最大的一轮融资。
对于“少儿编程”,我一直带着客观谨慎的态度来看待。在去年,我曾整理过一系列的少儿编程相关的科普文。在此基础上,今天通过这篇文章,带大家盘点一下“少儿编程简史”。
01 什么是“少儿编程”?
在回顾发展历程之前,我们先缕一缕“少儿编程”的概念。
往往一说到“编程”,很多人想到的都是密密麻麻的看不懂的代码,时髦而又具备高精确度的机器人。但是,这仅仅是一种狭隘的理解,或者说它们只是编程的最表面现象。我们首先必须要清楚的是,“少儿编程”不完全等同于“编程”。
少儿编程最关键的内涵,是适合孩子学习的编程内容,这与高等教育中的编程是不同的。它的主要目不是为了让孩子顺利升学,更不是让孩子去当码农。
那么,少儿编程想让孩子学得是什么?我用一句话概括:一学思维,二学能力。
毕竟,让孩子直接学习如何写代码,如何编写一段实用的程序,是非常困难的,也并不切合实际。少儿编程主要做的,是通过编程游戏启蒙,以及一些可视化的图像编程内容,培养孩子的逻辑思维,以及创新解决问题的能力。这将锻炼孩子的动手能力,并在解决问题的过程中,使得他们做事有条理,有逻辑,有创意。
少儿编程这样做是有着理论依据的。著名心理学家皮亚杰在《结构主义》一书中,提出的“建构主义”理论认为,个体的认知发展与学习过程密切相关,因而知识主要不是通过教师传授而得,而是学习者在一定的情境即社会文化背景下,通过人际间的协作活动而实现的意义建构过程。
少儿编程正是以“建构主义”理论为基础的。简单地说,孩子作为一个活跃的个体,可以通过编写计算机程序,尝试理解和掌握最现代、最强大的技术工具,有机会触及科学和数学的最深处,并在这个过程中构建出属于自己的创新体系。
除了以“建构主义”作为理论基础,少儿编程也以计算思维作为底层思维,这是与计算机科学一脉相承的。Google教育就开发出了专门的计算思维课程(CT:computational-thinking),请注意人家可不是叫编程课程。
所以,少儿编程的意义在于:培养孩子的计算思维,并指导其掌握面对计算机世界的“通用语言”。这可绝不是狭义上的编程,而是对认知能力、思维能力的全方位训练。
02 “少儿编程”及编程语言在国外的发展
根据上述的概念界定,我们可以初步得知,运用图形化的编程内容对孩子的逻辑思维和创新能力加以培养,是“少儿编程”教育的主要方式。说到图形化编程,不少家长和孩子首先想到的应该是Scratch,毕竟它是目前最令大众熟悉的少儿编程语言之一。
不过,“少儿编程”从半世纪前在国外兴起,至今为止已经形成了多种不同风格的编程语言和编程平台,绝不仅仅Scratch这一例。这其中,不仅包含了类似于Scratch这样的图形化编程语言,也包含了Python、C++这样的热门编程语言。下面让我们一起穿过时间海,看一看这么多年里,“少儿编程”都经历了哪些精彩的瞬间。
1967年,一名来自南非的计算机科学家、数学家及教育家西摩尔·派普特(SeymourPapert),在LISP语言的基础上发明了一种名为LOGO的编程语言。与一般计算机语言不同的是,LOGO语言输出的表现结果是几何图形。由于绘图的光标一开始是一只小海龟,所以它也被亲切地称为“小海龟画图”。
可能很多80后甚至90后对这只“小海龟”是有印象的,毕竟当年计算机课的教材中专门有一章是介绍“小海龟画图”的。以这只“小海龟”为特色的LOGO语言,不仅是很多人接触到的第一种编程语言,更是第一款针对儿童教学使用的编程语言。派普特作为它的发明者,也由此被称为“少儿编程之父”。
不过,经历一段时间的爆红后,LOGO编程语言热逐渐消退了。一方面,编写LOGO程序的过程充满了不够直观的语法和标点,使用门槛依然不低;另一方面,学生对使用LOGO完成的任务并不感兴趣,学习LOGO变成一门技术活,而创意不够。
1983年,在剑桥大学计算机中心工作的Bjarne Stroustrup以C语言为背景,以Simula思想为基础,开始从事将C改良为带来的C(C with classes)的工作。该语言在同年被正式命名为C++。至今,这都是认可度最高的编程语言之一。
Bjarne Stroustrup对编程的理解是,不仅要简单、正确、科考,而且要运行高效、可移植。在这样的理念下,C++语言的功能非常全面,它不仅支持数据封装和数据隐藏,还支持多态性和继承性。
随后出现的,就是大家非常熟悉的乐高机器人。1984年,时任乐高公司 CEO 的克伊尔德·克里斯丁森在电视中看到了一次派普特的采访节目。当时派普特正在电视中演示实体 LOGO 海龟。克里斯丁森认为,实体化的海龟跟乐高的产品哲学有相通之处,二者如果能够结合起来,一定是个不错的新产品。
于是在14年后,也就是1998年,乐高发布了全新的可编程机器人产品——Mindstorms系列。它既具有计算的功能,又能像其他乐高产品一样小巧便携。乐高Mindstorms在 1998 年 9 月发售,当年 12 月 1 日即全部售罄。时至今日,乐高机器人依然是全球最火爆的教育机器人。
在C++诞生到乐高机器人出现的这几年间,第一个Python编译器(同时也是解释器)在1991年诞生了。从一出生,Python就已经具备了包括类、函数、异常处理、表、词典在内的核心数据类型,以及模块为基础的拓展系统。
相比C++语言,Python的编程语言要更容易上手一些。由于它强制缩进的特点,代码结构显得相对清晰简短,这对于编程新手来说是比较友好的。而且,它的功能也是很全面的。这使得它成为当下最通用的一门编程语言。
1994年,又一个如今使用非常广泛的编程语言诞生,它就是JavaScript。它诞生的背景,是因为网景公司在1994年发布Navigator浏览器9.0版本只能用来浏览,不具备与访问者互动的能力,所以急需一种网页脚本语言。JavaScript就是在这样的场景下出现的。
JavaScript主要是用来建设网站的,它不仅可以用于前端,也可以用于后端。不过,相比于Python,它的语法要稍微复杂一些。
有了这些编程语言和工具的基础,一款风靡至今的编程工具终于诞生了。2003年,“少儿编程之父”派普特的学生瑞斯尼克推出了更易于儿童理解的积木块式的编程语言——Scratch。它在2007的时候首次向公众开放,随后在2013年发布了可直接在网络浏览器里在线操作的2.0 版本。
Scratch从可操作性、创造性和社交性三个方面进行改良,保留了Logo编程语言的初衷,让儿童在编程学习中更容易上手、更感兴趣;并通过作品社区,让更多的儿童与同伴、老师、家长形成了分享和交流。
2019年1月,Scratch发布了3.0版本,3.0版本最大的特点是增加了丰富的硬件拓展,比如与乐高EV3机器人和WeDo 2.0机器人兼容、与Makey Makey、Micro:bit硬件兼容。这是当下的少儿编程领域使用最多的一个编程版本。
总的来说,Scratch的产品哲学理念,正是“少儿编程之父”派普特的“实体化的海龟”,即让虚拟编程和触手可得的实物硬件进行结合,让编程更具象,进一步启发儿童的创造力。
Scratch的诞生,在“少儿编程”的发展历史中是一个重要的里程碑。而且,它也影响了“少儿编程”目前的教学和市场格局,这个格局主要分为两大类,一类是以Scratch为代表的图形化编程,一类是以C++、Python、JavaScript等为代表的高级代码编程。
但是不是图形化编程就属于Scratch?编程就只是纯软件呢?其实不是的。在Scratch诞生之后,更多的适合儿童学习的编程语言、编程平台以及开源硬件源源不断地出现,少儿编程的发展迎来“爆发期”。
首先,编程语言的种类更为丰富,风格也更多样化。
2010年,苹果开发者工具部门总监克里斯·拉特纳开始着手Swift程序语言的设计工作。历经4年的开发期,Swift语言最终在2014年发布。Swift语言和Python等语言属于同一级别,一般适用于在iOS平台上开发APP。
同一年,Google实验室提出手机编程软件的子计划:APP Inventor。它是一个完全在线开发的安卓APP编程环境,也是一种图形化编程工具,可以直接在手机上安装使用。之后在2012年,为了替代APP Inventor的Open Blocks,Google又推出了Blockly语言,这也是一款可视化的编程语言。
与Scratch类似,Blockly的基本操作单位也是图形化的代码块。使用者可以将这些代码块拼接起来,创造出简单的功能,再将一个个简单的功能组合起来,构建出一个程序。整个过程只需要拖拽鼠标,不需要敲击键盘。我们可以把Blockly视为一个库,而把Scratch的3.0版本视为一个框架。
其次,在2010年之后,全世界各地的组织基于孩子的需求,开发了不同风格的编程学习平台。
2012年,Tynker在加州山景城创立。这是一个教授编程语言的网站平台,主要的内容是教导孩子如何编写游戏和程式。
2013年,Code.org成立,这是一家致力于普及电脑科学,并鼓励更多弱势群体受益于电脑科学教育的非营利性组织。它做过的一件最重要的事,就是发起了风靡全球的“编程一小时”活动。
“编程一小时”起步于2013年,在活动开启之时,美国总统奥巴马曾亲自写下一段代码,呼吁全美的孩子们不要只在手机上玩游戏,更可以在手机上学编程。他说道:“没有人生来就是计算机科学家。但是仅需一些苦功,一些数学和科学知识,每个人都能成为一个计算机科学家。”
2014年5月,一向重视科技教育的以色列人研发出CodeMonkey。这是一个在线少儿编程的学习平台,平台上提供了很多闯关模式的编程游戏,很容易吸引孩子们参与到其中。
2017年左右,微软开放免费编程平台:MakeCode。虽然它也属于图形化编程,但是相比Scratch的功能要丰富的多。它不仅可以与Micro:bit这样的开源硬件相互结合,还与JavaScript语言相通,可以说是很强大了。
2019年,MakeCode又开启了Python的功能,现在大家不仅可以在MakeCode中使用JavaScript,还可以体验用Python编程的感觉。
此外,步入21世纪后,适用于少儿编程工具的开源硬件也陆续出现了。2003年,一家制作开源硬件和开源软件的公司Arduino成立,它开发出的Arduino非常适用于C++语言,也是公认的较为强大的开源硬件。
2012年,英国树莓派基金会推出树莓派。它是基于Linux的单晶片电脑,目的在于促进学校的基本电脑教育。随后,BBC在2015年推出Micro:bit,这个硬件此前我专门介绍过。和Arduino的区别是,它可以用于MakeCode这样的图形化编程工具,使用起来相对轻松。
当然时至今日,国外有关于少儿编程的学习平台绝对不止这些。比如我前段时间梳理的STEAM学习资源中(DiscoverE、BBC、NASA、国家地理、微软、英特尔),就有着数不清的少儿编程工具和学习资源。但出于篇幅考虑,这里就不一一列举了。
总的来说,国外的少儿编程历经半个世纪的发展,已经形成了多元化、高质量、强互动的特色,而其丰富且优质的内容逐渐传到了我国,对我们的基础教育产生了不小的影响。
03 “少儿编程”在国内的发展和现状
相比国外,我国的少儿编程的发展历史则要短得多。大约在1984年,邓小平同志在上海看了当时程序员们计算机代码,发出了“计算机的普及要从娃娃抓起”的号召。我国的少儿编程教育从这时才开始萌芽(当时还没有编程这一说)。
这个号召直接促成了1984年的第一届全国青少年信息学奥林匹克竞赛(简称NOI)的举办,在当年就有8000多人参加。不过,此时的人们还没有对编程的概念。直到21世纪,国外的少儿编程行业呈现爆发式的发展态势,国内的少儿编程行业才正式开始发展。
体现的最为明显的,就是2014年到2020年这6年期间,我国教育局、各地人民政府出台了很多响应少儿编程教育的政策和方案。
2014年,浙江省人民政府发布《浙江省深化高校考试招生制度综合改革试点方案》。该方案明确指出,信息技术被正式划入高考考试科目,并以100%的纸笔闭卷测试的方式纳入高中阶段的检查。
2016年,教育部印发《教育信息化「十三五」规划》通知,将信息化教学能力纳入学校办学水平考评体系。有条件的地方要积极探索信息技术在众创空间、跨学科学习(STEAM教育)、创客教育等新的教育模式的应用。
2017年7月,国务院印发《新一代人工智能发展规划》,明确指出在中小学阶段设置人工智能相关课程,逐步推广编程教育。
同一年,教育部发布普通高中信息技术课程标准。该方案要求理解信息技术对人类社会的影响,并提升信息技术学科的核心素养。
2019年,教育部办公厅关于印发《2019年教育信息化和网络安全工作要点》的通知。通知中透露:将启动中小学生信息素养测评,并推动在中小学阶段设置人工智能相关课程,逐步推广编程教育;同时,推动大数据、虚拟现实、人工智能等新技术在教育教学中深入应用。
2020年9月初,为了响应高中信息技术课程新标准,浙江省三到九年级的信息技术课同步更换新器材。其中,八年级新增Python课程内容。新高一信息技术编程语言由VB替换为Python,大数据、人工智能、程序设计与算法按照教材规划,五、六年级开始接触。
在这些政策的推动下,相关的竞赛活动也纷纷出现。比如,从1995年开始,全国青少年信息学信息学奥林匹克联赛(简称NOIP)开启,由中国计算机协会进行全国统一命题,组织全国各地的学生参加比赛。直到2019年,NOIP取消,CSP认证取而代之。
除了信息学奥赛,我国还有另外四项学科竞赛,分别是数学、物理、化学、生物。这几项竞赛举办至今,每年都会有数不清的学生去参加。曾经的“奥数班”风靡全国的时候,CMO(中国数学奥林匹克)就非常火爆。
在国家政策和知名赛事的双重驱动下,各学校和有关机构纷纷投入了少儿编程行业,开设了很多相应的课程。可以说,这是继曾经的“奥数热”后,又一轮“编程热”的浪潮。
然而,国内少儿编程更多的是跟着政策之风。从编程课程设计和编程创作平台方面来看,这些少儿编程的培训课仍然处于市场早期。
再回到政策层面来说,现在确实开始鼓励少儿编程进课堂,但从课程的设计来看,目前我国还没有实质性的,从少儿编程教学价值出发的指导性或者课纲性的突破。
这就导致,虽然这些年国内少儿编程的市场越来越壮大,资本的雪球也越滚越大,但真正有实质性突破的课程依然不多。反倒是在市场对“全民编程”的大肆宣传下,家长和孩子不得不投身于其中,这大大增加了他们的焦虑感。
简单来说,国内的少儿编程目前主要具备如下几点“特色”:
1. 过于强调编程的低龄化学习,过于渲染编程的重要性。
但是根据上文的梳理,我们可以清晰地指导,某些编程语言(比如Python、C++、JavaScript这些高级编程语言),并不适合低龄的孩子学习。反倒是图形化的编程工具更能吸引他们的兴趣。
所以,过于渲染低龄化学习只能是本末倒置。甚至我认为,6岁以下的孩子大多是不适合学习编程的。
2. 走了一条奥数的老路,先去营造刚需,比如用信奥、新高考去强调和升学有用,但忽视了少儿编程的初衷。
少儿编程的初衷,是培养孩子的计算思维,培养他们解决问题的能力。但是考试、竞赛走的大多走的是标准化的路线,并不能契合这一初衷。
3. 过早地拔高或者深入到代码编程。Python,C++等代码语言,居然开设在了9岁之后的年龄段。这样的过早学习,缺少和真实世界的结合,不利于创新能力的培养。
4. 让大部分孩子变成编程应试的陪跑者。无论孩子对编程有没有兴趣,都必须参与其中。那么试问,他们如何能够主动地去参与学习,又如何心甘情愿地接受编程的学习呢?
那么,为什么少儿编程会逐渐走上“应试化”的道路呢?原因有二:
第一,国内的应试教育大环境导致了这一局面,毕竟考上好学校是家长和孩子的“刚需”。如果各教培机构不去炒作“刚需”,不去制造“刚需”的氛围,那么获客、转化和续费都会面临很大的困难,这对于它们来说是不愿意看到的。
第二,资本是追求标准化和规模化的,只有应试可以快速适应规模化和标准化的过程,因为它代表的是高度一体化的竞争。这些年国内的少儿编程因为受到资本的青睐,已经形成了很庞大的规模,这个时候是很难不被同样注重标准化的应试体系关注的。
这里并不是说,资本的涌入就一定是一件坏事。资本的涌入,在一定程度上确实能够快速促进某一行业的崛起,并给这个行业提供大量的优质资源。而且,它还可以提升某一行业的工作效率,使得它在一段时间内保持极高的活跃度。
但是对于少儿编程教育而言,一味的资本积累反而会导致较多的负面效果。因为,从“编程一小时”活动的全球参与人数,以及各类图形化编程工具和创作平台的发展来看,国外的少儿编程更多侧重于启发创造力。它从计算机科学普及这一方面,让更多的孩子掌握和计算机、互联网、物联网交互的能力。
然而,国内的很多少儿编程课程却忽略了这些,反而在“应试化”的道路上越走越远,这无形中加剧了家长和孩子的负担,也增加了学校老师的焦虑感。
我想,这绝对不是提出“少儿编程”的人想要看到的结果。
04 如何正确认识少儿编程?
那么,少儿编程到底是什么?我们应该如何正确认识它呢?
从上述对少儿编程的回顾可以发现,少儿编程在国外属于计算机科学的一部分,而且是其中非常关键的内容。例如在美国斯坦福大学开设的计算机科学专业中,就包含了“编程概论”和“编程方法论”等课程。
同时,“少儿编程”也是STEAM教育公认的一环。它是一种提高少儿多学科能力的教育方式,这完全符合STEAM教育提倡的多学科综合教育理念。
所以,想要理解少儿编程,就必须要先了解计算机科学。因为,Computer Science(CS)才是真正的教育体系,编程仅仅是其中的一个科目或者说一种技能。我们也可以看到,目前国内校内类似的课程都是叫“信息技术”。
说到CS课程,我们先要看看最权威的CSTA课程标准。这是国外公认的计算机科学的课程标准(其中涵盖编程),描述了5-18岁各年龄段学生学习编程的核心目标。CSTA标准基础包括核心概念和核心实践两部分,并按照不同的年龄段划分出不同的标准。其中包含算法和编程、计算机系统、数据和分析、计算机的影响、网络和互联网等五个方面。
那么,我国的信息技术课程的课标又是什么样呢?根据《普通高中信息技术课程标准(2017年版)》,此类课程培养的核心素养包括信息意识、计算思维、数字化学习与创新以及信息社会责任。可见计算思维在编程学习中确实重要。
课程结构由必修、选择性必修和选修三类课程组成,包括数据与计算、人工智能突破、开源硬件项目设计等等。
根据国内外的课程标准,我们不仅可以印证少儿编程属于信息科学的范畴,还可以清楚地看到,孩子学习编程不仅仅要掌握理论,更要亲身参与实践。也就是说,要在编程的过程中和身边的事物进行互动,这一点国内的少儿编程教育目前做得还不太够。
其次,我们可以在对少儿编程发展历史的回顾,以及计算机科学课程标准中发现,编程的学习主要是为了培养孩子的计算思维、设计思维、工程思维等能力。此外,它还要求孩子们可以结合人工智能、计算机交互等形式,提升自己解决问题的思维和能力。
由此可见,离开计算机科学教育,离开和真实世界的结合,离开解决问题为出发点、提升计算思维、创造能力的“少儿编程”课程,是需要打一个大问号的。所以,少儿编程的应试化是一把双刃剑。
一方面,应试化可以引起更多家长的关注,毕竟以考带学,是国内固有的教育思维。这和美育和体育被纳入中高考,是一样的逻辑,在上篇讨论“内卷”的文章中我已经陈述过。
但另一方面,应试化是违背少儿编程教育的真正本质的。因为,考级标准往往会先于课程标准推出,再加上不少机构的夸大,家长难免会被引入歧途。
这就是目前国内的少儿编程遇到的困境,也可以说是正在陷入的误区。如果不能认清这一误区,少儿编程只会在“应试化”的道路上继续行走,甚至在最终迈入“走火入魔”的境地。
05 我们应该怎么做?
那么,在这样的环境下,我们的孩子应该如何学习编程呢?老师们应该怎么做,才能体现出少儿编程的真正价值呢?
在文章的最后,让我们回归到少儿编程的初衷,从STEAM领域和计算机科学领域来正确地看待这些问题。
具体而言,有这样一些建议大家可以参考:
“
1. 家长、孩子、老师都要明确一点,编程是工具而非目的。少儿编程教育要做的,并非从小培养程序员,尤其小学初中阶段,并非以追求编程语言的深度掌握为主。
2. 编程是理解计算机科学及互联网、物联网科技的一种语言。脱离互联网、物联网,追求编程技术本身,是进入了误区。编程的过程是与计算机互动的过程,缺少互动这一环节是不可取的。
3. 掌握和计算机虚拟世界交互的工具,是为了思考创作、理解虚拟世界,或者运用于解决问题。
如果课程设计和教学一味地导向应试,你将看不到孩子身上用编程闪现的创造力,和解决问题的能力的提升。那么,还不如先把数学基础和创意思维好好地培养,“回头是岸”!
”
总而言之一句话:让孩子在学习少儿编程的过程中,为这个世界创造出更多的精彩和美好。