少儿编程火热兴起,人人都可以学编程

网友投稿 2018-04-21 17:37

“数字流畅能力”应当是指设计,创造和重新改进,而不是仅仅浏览信息,聊天和与软件交互。
作者:MitcheL ResnicK, John maLoneY, anDRés monRoYheRnánDez, nataLie RusK, eVeLYn eastmonD,KaRen BRennan, amon miLLneR, eRic RosenBaum,JaY siLVeR, BRian siLVeRman, anD Yasmin Kafai
翻译:咸蒙

Scratch 人人都可以编程

https://cdn.china-scratch.com/timg/180423/1IF4A95-0.jpg

人人都可以编程

《通信》杂志的主编Moshe Y. Vardi邀请我们团队发表文章的时候会议了他第一次了解Scratch的场景:“我的一个同事(计算机科学讲师)”,他说,“告诉我他是如何努力让他10岁的女儿学习编程的,唯一能够吸引他女儿的就是Scartch”。

六年前我们开始开发Scratch的时候,我们就在期待发生上面的事情。我们想让每个人,无论多大,无论什么学科背景和兴趣点的人都可以轻易的编写出自己的交互故事,游戏,动画和模拟程序,跟其他人分享自己的观点。

从2007年上线以来,Scratch网站变成了一个人们可以分享,讨论以及在创作其他人作品的知名网络社区。Scratch已经被称作是“互动媒体的YouTube(国外Youku)网站了”。全世界的Scratch用户上传超过1500个可以自由获取源代码以便于分享和在创作的作品到Scratch网站。网站的项目类型及其广泛,包含了视频游戏,互动信件,科学模拟,虚拟旅行,生日贺卡,动画舞蹈比赛(类似于劲舞团之类的东西)以及交互教程,这些作品都是用Scratch开发的。

网站的核心用户集中在8-16岁(12岁的小孩最多,相当于国内的六年级或者初一的样子),当然也有相当一部分成人用户。Scratch在编写和分享互动项目的过程中,学会了重要的数学和计算机概念,也学会了如何创造性的思考,系统的推理以及协同工作,而这些是21世纪必备的机能。其实,我们的首要目标并不是让人们为成为一名专业的程序员做准备,而是培养能够熟练的用编程来表达自己的有创造力的,能够系统推理的新一代思考者。

在这篇文章里,我们讨论了指导我们进行Scratch开发的原则以及我们把编程变得对每个人都伸手可及有吸引力的具体策略。但是在这之前,我们必须先介绍人们是怎样使用Scratch的,我们描述了在Scratch社区名字叫做BalaBethany的13岁小女孩开发的一系列项目。

BalaBethany非常喜画动画角色。所以当她使用Scratch开发项目的时候自然而言的就编制她画的那些角色的动画故事。然后她开始在Scratch网站上分享自己的项目,Scratch社区里的人给了她积极正面的反馈,在她的项目下面发表了热情洋溢的评论(比如“太精彩了!”以及“我的天啊,我炒鸡喜欢你的作品!!!!”),同时请教她是如何实现这些特效的(比如“如何让一个角色看起来是透明的”)。收到鼓励的BalaBethany开始定期在Scratch社区创作并分享更新Scratch项目,就像是连续播出的电视剧。

她定期往连载的动画里加入新的角色,然后就有人问你为什么让整个社区的人都参与到动画制作的过程中来呢?于是她上传了一个新的Scratch项目并宣布了一项“海选”,让社区里的其他人给她动画里的一个人物角色设计一个“妹妹”的角色(如图一)。项目里对于新角色提出了一系列的要求,比如“头发必须是红色或者蓝色,请自选”以及“性格温顺也认死理,或者是两者的结合”

https://cdn.china-scratch.com/timg/180423/1IF54X1-1.jpg

图1,BalaBethany动画作品、竞赛和教程截图

这个项目大概有100多条评论。其中一条是一个想参加海选但是她不知道如何绘制动画角色,因此BalaBethany又设计了一个Scratch项目,是一个分步教程,来演示如何通过13个步骤来绘制动画角色并上色。

在一年的时间里BalaBethany创作并分享了超过200个Scratch项目,涵盖了不同的项目类型(故事,竞赛海选,教程以及其他)。她的编程和艺术技能取得了明显的进步,她的得到了社区的广泛认可,获得了超过12000条评论。

为什么要编程

人们已经习惯于用“数字原住民”来描述纳西而看起来能够流畅使用数码技术的年轻人。确实,很多年轻人都能够轻松的发短信,玩儿网络游戏,浏览网站。但是这些行为真的能够让他们拥有流畅的数字能力吗?虽然他们每天与数字媒体打交道,但是能够开发自己的游戏、动画和科学模拟软件的人真的是凤毛麟角。打个比方,他们只有用新技术“读”的能力,却缺乏用新技术“写”的能力。

在我们看来,数字流畅力不仅要求具备聊天,浏览以及与技术交互的能力,还要求具备用新媒体设计,创造和发明的能力,就想BalaBethany在她的项目中所做的一样。

要做到用新的媒体创作,你就得懂点儿编程知识。编程能力有许多重要的好处。例如,编程极大的扩展了你能创造的范围(以及你表达自己的方式)。也扩展了你的学习范围。特别是编程支持“计算思维”,帮助你学习重要的可以迁移到非编程领域的问题解决能力以及设计策略(比如建模和迭代设计)。因为编程跟你在解决问题过程中体现出来的创造力有关,编程给我们提供了反思我们思维过程的机会,甚至是反思思维本身。

前人研究

上世纪七八十年代发明个人电脑的时候,人们开始热衷于教所有的小孩子学习编程。成百上千所学校教孩子们上百万学生学习如何用Logo或者Basic语言编程。Seymour Papert在他1980年出版的书籍《Mindstorms》里把Logo看做是反思教与学途径的里程碑。尽管有许多孩子和老师被这种可能性所转变,但是大部分的学校很快转向电脑的其他用途。那时候计算机在孩子们的生活中日渐普及,但是很少有人学习编程。直到今天,人们都把编程看做是应用范围狭窄的小部分热衷的技术活动。

到底是什么让人们忘记了向孩子们推广编程的初心?为什么Logo和其他西东到现在都消失匿迹,无影无踪了呢?这是由于以下因素导致的:

  • 早期的编程语言实在是太难用了,以至于很多小孩跟本掌握不了编程的语法

  • 人们在通常用一些跟年轻人的兴趣经验没有任何关联的学习活动(比如生成一堆素数或者画简单的线条);并且

  • 人们学习编程的时候如果出错了,基本上很难找到可以用的指导说明,或者当想深入探索的时候压根没有什么可以借鉴的资料。

Papert认为编程应道有一个“低门槛”(容易学)和“高天花板”(随着不断学习能够创建越来越复杂的项目)。而且,编程语言需要具备“宽领域”(支持创建多种不同类型的项目,这样具有不同兴趣和学习方式的人都可以参与进来)。满足低门槛、高天花板、宽领域这三个条件的向来是很困难的。

最近,人们一直在进行教青少年学习编程的各种尝试。有人用专业的编程语言比如Flash/Actionscript;也有人用转为针对青少年设计的新的语言(比如Alice和Squeak Etoys)。这给我们从事Scratch相关工作带来了很大的启发。但是我们对已有的这些做法都不满意。特别是,我们认为在支持计算思维发展的前提下,进一步降低编程的门槛以及让领域的便捷更加宽阔是非常非常重要的。

为了实现这个目标哦,我们为Scratch确定了三个核心的设计原则:,我们要让它比其他语言更具备反复摆弄尝试(Thinkerable)的特点,更有意义并具备更强的社会性,我们来说说这些原则是如何指导我们设计Scratch的。

更具备可玩儿性(tinkerable)

我们在麻省理工大学媒体实验的终身幼儿园项目组已经与Lego公司合作多年,帮助乐高开发Lego头脑风暴和其他机器人套件。我们一直痴迷于孩子们玩弄和搭建Lego的方式,并且不断从中获取灵感。给孩子们一盒Lego积木,他们立刻尝试摆弄,把一些积木查起来,形成新的结构并给他们带来新的点子。在他们玩弄搭建结构和故事的过程中,不断浮现新的计划和目标。

我们想让在Scratch里编程跟玩儿Lego积木的感觉差不多。Scratch语法基于一系列孩子们可以拼插彼此的图形化“代码块”。就想玩儿Lego积木,带麦块上的连接头提供了如何组合代码块的建议。孩子们可以从摆弄这些代码快开始学习,把代码块用不同的顺序和组合方式拼接到一起观察有什么效果。不像传统编程语言那样有着难以理解的语法和讨厌的标点符号(Python少很多)。

只有当符合语法的时候Scratch代码块才能够顺利的组合到一起,代码块的形状暗示如何使用代码块。控制结构(比如for循环和repeat循环)是C形状,建议人们把代码块放到控制结构的内部。返回结果的代码块根据返回值的不同设计成不同的形状:数值类型是椭圆,布尔值是六边形。条件判断(比如if和repeat-until)有一个六边形的空格,提示需要填入填入一个布尔值。

Scrath名字本身就体现了摆弄的理念,来源于hip-hop打碟师的摆弄碟片的技巧,不断的用手把音乐唱片来回摆弄,通过创意的方式把不同的音乐混合到一起的摆弄技巧。用Scratch编程看起来跟这个差不多,混合不同的图形,动画,照片,音乐和声音。

Scratch被设计极具交互性,单击一堆代码块就能立刻执行这些代码。你甚至可以在这堆代码运行的时候修改代码,因此很容易通过增量和迭代的办法尝试新的想法。你是不是很想开发并行程序?只要创作不同的代码堆就好了。我们的目的就是让并行执行像顺序执行程序一样直观便于理解。

Scratch开发团队有意让人们使用真实的桌子一样使用脚本区域(图3)。我们可以把多余的脚本放到一边以备后用。这意味着即使你的代码乱点、试验性的也没关系。大多数编程语言(和计算机科学课程)提供了自顶向下的设计和自下而上的尝试。而Scratch我们想让尝试写程序的用户像计划者一样舒服的编程。

https://cdn.china-scratch.com/timg/180423/1IF52612-2.jpg

图3 Scratch 用户界面

我们在开发Scratch的时候遵循了迭代和增量改进的开发风格。我们选择支持快速建立原型和迭代设计的Squeak语言作为Scratch的实现语言。在2007年Scratch公开发布之前,我们不断地进行小范围的真实环境下的现场测试,根据其他人的反馈和建议不断的改进Scratch的设计。

更有意义

我们知道人们从事对个体有意义的项目的时候学习效果最好,获得的乐趣也最多。因此在开发Scratch的时候我们把以下两个设计规则放在优先地位:
多样性通过支持创作不同类型的项目(故事,游戏,动画,模拟),兴趣各异的人们都能做一些他们自己感兴趣项目;以及
个性化让人们可以轻易的通过导入照片和音乐、录音,绘画等方式来创建个性化的Scratch作品。
这两个优先条件影响了我们很多设计决策。例如,我们专注于2d而不是3d,因为对人们来说创作二维艺术作品容易的多。尽管很多人可能觉得2d类型的Scratch作品有些过时,但是Scratch作品展现出了3D创作环境缺乏的视觉多样性和个性化。

一位引导两个孩子学习Scratch计算机科学家的博客里很好的体现了个性化的价值“我一开始不理解一个面向孩子的编程语言干嘛要这么以媒体为中心,可是当我仔细观察孩子们使用Scratch的时候就就有点明白了。我发现Scratch最棒的地方在于通过让孩子们可以轻易的添加个性化的素材和积极参与开发过程实现个性化的开发体验。他们不仅可以通过抽象的编程来用小猫或者小盒子做一些漫无目的的事情,他们还可以在Scratch中添加自己的照片或者自己的录音,这可以让他们获得很长时间的乐趣并且驱动他们不断的学习。”

Scratch网站上多种多样的作品也不断的给我们带来惊喜。在我们意料之中的,有许多游戏——从一些经典游戏(比如俄罗斯方块)的仿制版到完全原创的游戏。但是也有许多其他类型的作品看(图4)。一些Scratch记录了日常生活经历(比如一次去佛罗里达的家庭旅行);其他记录了自己愿望中的场景(比如跟其他Scratch用户见面)。也有些作品(比如生日贺卡和感谢信)是为了培养感情。还有的作品体现了对社会问题的关注(比如全球变暖和虐待动物问题);2008年总统大选的时候,出现了大量以奥巴马和约翰为主题的作品之后引发了大量社区制作“总统的Scratch”系列作品。

https://cdn.china-scratch.com/timg/180423/1IF52493-3.jpg

图4 Scratch作品截图

一些Scratch项目来源于学校教学活动。一个来自印度的13岁男孩在地理科学课上创作了一个地心旅行的动画作品,画外音解释了旅途中的不同地圈层。新泽西一个14岁男孩在社会研究课上设计了一个在Rapa Nui岛上生活的生活模拟,来帮助人其他人了解当地的文化和经济。

当人们用Scratch来制作对自己来说有意义感兴趣的作品的时候,他们就已经做好了学习跟自己项目相关的数学和计算机概念的准备,并且他们渴望学习相关知识来尽快完成自己感兴趣的项目。Raul,一个13岁的小孩子在课外活动中心开发了一款互动游戏。他设计了基本的图形元素和角色基本的动作但是他不知道怎么保存得分。当我们团队的一个研究人员访问他们的课外活动中心的时候,Raul向我们的同伴寻求帮助。这个研究人员给Raul演示了如何创建一个变量,Raul马上就明白了应该怎样保存分数。他开始摆弄尝试增加变量值的代码块,然后他跑出来拉着研究人员的手边晃边说“谢谢你,谢谢你,谢谢你”。研究人员感到很高兴,他在想有多少8年级的代数老师会因为教会学生变量的知识而获得这样的感谢呢?

更社会化

Scratch编程语言的开发与Scratch网站的开发是紧密相连的。Scratch想要取得成功,就必须与一个热门可以互相支持、协作、评价彼此作品并在其他人作品上构建自己作品的社区绑在一块。

分享的概念已经深深的融入到了Scratch的界面中,比如屏幕顶端极为显眼的“分享”按钮。通过点击分享按钮,你的项目就上传到了Scratch网站(图6),然后就会出现在页面顶端“最新项目”哪里。一旦一个项目被分享,任何人可以可以在浏览器(用基于Java的播放器)里运行这个作品,评论这个作品,通过单击“我喜欢”按钮投票,或者下载并修改作品的脚本。(所有在网站上分享的作品都是在CC协议下发布的。)

https://cdn.china-scratch.com/timg/180423/1IF5N44-4.jpg

图6 Scratch网站

Scratch发布的27个月以来,人们在Scratch网站上分享了50万以上的作品。对很多人来说,让自己的作品有在大量爱好者面前出现并且能够得到反馈修改意见,是一种及其强大的动机。网站上大量的作品也带来了数不清的灵感。Marvin Minsky曾经说过Logo语言的语法是非常棒的,可惜他的能力太差,能做的事情太少了。年轻的作家经常从阅读经典作品里获得灵感,但是Logo语言并不能给年轻的程序员带来灵感。Scratch网站已经成了一个Scratch网站写的作品集了。

网站也为协作提供了肥沃的土壤。社区成员持续不断的借用其他人的创意,图像和程序并加以修改,并在别人想法的基础上创造自己的作品。超过15%的作品来源于对社区里其他成员作品的融合再创作。例如,有许多版本的俄罗斯方块游戏,因为社区成员不断的添加新的功能并试图改善游戏体验。

一开始,许多Scratch用户对于别人改编自己的作品感到很苦恼,抱怨其他人偷了他们 想法和创意。这在Scratch网站的论坛里引发了关于分享的价值以及开源社区理念的讨论。我们的愿景是营造一种为自己的作品被别人改编感到骄傲而非苦恼的社区文化。我们持续不断的给网站添加新的特性来鼓励这种以别人改编自己作品为荣的理念。现在当改编一个作品的时候,网站自动添加到原作品的链接,原作者会获得荣誉。而且每个作品都包含了到其“衍生”作品的链接,Scratch网站首页会突出改变频率最高的作品。

有的作品关注网站本身,提供了网站上其他作品的分析和回顾。有一个叫做Scratch新闻网的简称为SNN的例子,让默认角色小猫像CNN主持人一样播报Scratch社区的新闻。开始时候我们以为这只是个“模拟新闻广播”,后来我们意识到这是一个提供Scratch这个真实在线社区里人们感兴趣新闻的真正的新闻广播。受SNN项目启发,Scratch社区出现了大量用Scratch编写通讯、杂志和电视节目作品,报道Scratch社区的资讯。

有的Scratch用户成立了在线公司,共同完成靠个人力量无法完成的作品。一个英国15岁的小女孩,昵称是BeeBop,在创作了一个包含了大量动画精灵的作品,而且鼓励其他人在作品里使用动画精灵,也鼓励人们定制动画特效,在这个过程中她创办了自己的公司。一个同样来自英国的昵称是MusicalMoon的10岁小女孩,非常喜欢BeeBop的动画作品,问BeeBop他能否改变作品的背景。这次协作促成了Mesh Inc.公司的出现,自称是用Scratch生产“最高品质游戏”的微型公司。几天后,昵称是Hobbit的来自新泽西的14岁男孩,发现了Mesh Inc.公司的作品,并且发出了求职申请,他说“我是一个很好的程序员,我能够参与调试和编程。”之后,一个来自爱尔兰的昵称是Marty的11岁男孩,也成了Mesh Inc.公司的员工,因为他拥有良好的背景滚动技巧。

这些协作为不同类型的学习提供了机会。一个创办了名为Blue ELk的Scratch公司的来自加利福尼亚的13岁女孩是这样描述她的经验的:
“对我来说通过用Scratch以及创办公司来一起开发游戏的乐趣在于在这个过程中我交了很多朋友学到了很多新知识。我学会了关于不同类型编程的很多知识,我借鉴其他有我感兴趣特效的游戏,下载这些游戏,并且仔细阅读并修改脚本和精灵。我真的超级喜欢编程。刚开始接触Scratch的时候,我意识到自己可能不是一个很好的艺术家。但是从那之后,通过学习其他人的艺术作品,请教他们,并且通过用Photoshop和Scratch自带的绘图编辑器来联系绘画,我的艺术水平提升了很多...在运作Blue Elk公司的过程中我还学会了如何团队的积极性以及如何让团队更好的一起工作...相比于博客和Facebook等社交网站我更喜欢Scratch,因为我们在创作很好玩的游戏和作品供人们玩耍、欣赏和下载。我不喜欢单纯的网聊,我喜欢谈论一些富有创造性的前沿的东西。”

我了促进和鼓励国际分享和协作,我们把Scratch的多语言翻译工作作为一项优先任务来做。我们开发出了把Scratch编程快翻译成任意字符集的功能。全世界的网络志愿者已经把Scratch翻译成了40多种语言。世界各地的孩子们现在都可以分享彼此的作品,人人都可以用自己的母语来使用代码块。

未来方向

现在,世界各地越来越多的K-12学校甚至一些大学(包括哈佛大学和加利福尼亚大学,伯克利大学)都把Scratch当做编程学习的入门课程。因此一个自然而然的问题摆在我们面前,掌握Scratch之后学习什么语言。在Scratch社区人们一直在讨论Scratch之后学习什么语言。我们收到了许多为Scratch添加高级功能的请求(比如继承和递归列表),希望Scratch自身能够成为入门之后的进阶语言。

我们打算把我们的首要精力放在降低语言学习门槛和增加Scratch的广度。对于某些Scratch用户特别是那些希望将来从事编程和计算机科学行业的人来说,迁移到其他编程语言是十分重要的。而对于那些只是把Scratch当做自我表达的媒介,而非职业生涯的路径的人来说,Scratch已经能够满足他们的需求。他们可以不断的用Scratch探索自我表达的新形式,基于他们对于计算机思维核心理念的理解创造多种多样的作品。一点点的编程知识足够他们不断探索了。

我们开发新版本的时候,我们的目标是让Scratch更加具有可玩性,更有意义和社交性。结合Scratch传感器扩展板,人们可以创建能够对物理世界做出感知和回应的Scratch项目。同时,我们正在开发Scratch的移动设备版本以及允许人们访问在线数据在线编程的web版本。

也许对于Scratch来说最大的挑战并非技术性而是文化性和教育性。虽然Scratch在早期的探索中取得了巨大的成功,但我们需要提供更高的教育支持来让Scratch更广泛的传播。我们最近上线了一个叫做Scratch-Ed的在线社区,在这个社区,教育者可以分享他们跟Scratch相关的想法,经验和课程计划。进一步讲,需要从整体上改变人们对于编程和计算机的理解和看法。我们需要加强人们对于包含设计和创造而非仅仅浏览和交互的“数字流畅能力”这一概念的理解。只有这样像Scratch这样的语言才能发挥全部潜能。

声明

很多人对Scratch开发做出了贡献,对Scratch背后理念付出了努力的让你更多。我们非常感谢LLK终身幼稚园组所有曾经从事Scratch相关工作的朋友和前成员,尤其是Tammy Stern, Dave Feinberg, Han Xu,Margarita Dekoli, Leo Burd, Oren Zuckerman, Nick Bushak, and Paula Bonta. 我们对Kylie Peppler, GraceChui, 心怀感激,同样感谢Yasmin Kafai引导和参与Scratch开发现场研究的其他成员。Seymour Papert和Alan Kay的工作深刻对Scratch的出现有着深刻的影响和启发。感谢国家自然基金会,微软,Intel,诺基亚和麻省理工大学媒体实验室研究协会的资金支持。文中提到的儿童名称均为化名。


--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com