1 发展历程

1.1 诞生背景MIT团队

Scratch的诞生源于麻省理工学院(MIT)媒体实验室“终身幼儿园”团队对儿童编程教育的创新探索。该团队由米切尔·雷斯尼克(Mitchel Resnick)领导,长期关注如何通过技术促进儿童的创造性学习。20世纪末至21世纪初,以Logo语言为代表的传统文本编程对低龄用户门槛较高,缺乏直观反馈和趣味性。雷斯尼克团队提出“低地板、高天花板、宽围墙”的设计理念,旨在让编程从枯燥的语法输入变为可视化的积木搭建。2003年,团队启动Scratch项目开发,最初名为“Squeak Etoys”。2007年,首个正式版本Scratch 1.0发布,以“Scratch”一词(意为“刮擦”,源自唱片DJ的搓碟技术)隐喻用户可以像拼接声音片段一样拼接代码。

1.2 版本沿革

1.2.1 Scratch 1.0(2007)

Scratch 1.0基于Squeak语言开发,仅支持Windows和macOS桌面端。该版本包含8个积木类别(运动、外观、声音、画笔、控制、侦测、运算、变量),引入了“舞台”与“角色”的基本概念。用户可创建二维动画和简单游戏,但缺乏在线分享功能,项目以本地文件(.sb)形式保存。

1.2.2 Scratch 2.0(2013)

Scratch 2.0是重大升级,核心变化包括:

  • 在线编辑器:直接运行于浏览器(需Flash插件),开创“即开即用”模式。
  • 矢量图编辑器:取代1.0的点阵编辑器,支持平滑缩放。
  • 云变量:允许项目存储和读取远程数据,实现简单的排行榜和在线游戏。
  • 克隆积木:替代1.0中笨重的“图章”功能,支持动态对象生成。
  • 工作室功能:用户可创建主题分类的项目合集。

此版本同时提供了离线编辑器供无网络环境使用。

1.2.3 Scratch 3.0(2019)

Scratch 3.0以HTML5和WebGL技术全面重写,彻底脱离对Flash的依赖,兼容移动设备触摸操作。主要改进:

  • 界面扁平化:积木造型更圆润,色彩更鲜艳。
  • 扩展体系:支持翻译、文字转语音、微控制器(micro:bit、LEGO MINDSTORMS EV3)等第三方扩展。
  • Sound编辑器:集成基础音频编辑功能。
  • PicoBoard替换:集成硬件扩展,如Makey Makey和LEGO BOOST。

3.0版本至今持续更新,成为当前Scratch生态的主流形态。

1.3 关键里程碑:在线社区上线与iPad版

  • 2007年5月:Scratch官网(scratch.mit.edu)上线,用户可上传和讨论作品,社区迅速积累数百万个项目。
  • 2012年:推出iPad版ScratchJr(面向5-7岁),但主平台Scratch的iPad优化直到2019年3.0版本才实现。
  • 2013年:Scratch 2.0在线编辑器使社区创作量爆发增长,截至2020年,社区项目总数超过8000万。
  • 2014年:Scratch团队推出“Scratch Teacher Account”系统,教师可管理班级项目,并加入ScratchED教育社区。

2 核心特性与编程机制

2.1 图形化积木系统

2.1.1 十大积木类别(运动、外观、声音等)

Scratch积木按功能分为以下类别(颜色标识在括号内):

  • 运动(深蓝):控制角色位移、旋转、跳转至指定坐标。
  • 外观(紫色):切换造型、说话泡泡、显示/隐藏、图层排序。
  • 声音(粉红):播放音效、音量调节、音调变换。
  • 事件(黄色):触发脚本,如“当绿旗被点击”“当收到广播”。
  • 控制(橙色):循环(重复、重复直到)、条件判断(如果-则)、等待。
  • 侦测(浅蓝):检测颜色碰撞、鼠标位置、按键按下、距离测量
  • 运算(绿色)数学运算(加减乘除、随机数)、逻辑运算(与、或、非)、字符串处理。
  • 变量(深红):变量赋值、增减、显示/隐藏。
  • 自制积木(红色):用户自定义可复用代码块,支持参数传递。
  • 扩展(深绿):通过加载扩展新增类别,如翻译、MIDI、微控制器控制。

2.1.2 控制积木(循环、条件判断)

控制积木是Scratch编程逻辑的核心:

  • 循环结构:包括“重复10次”“重复直到”“永远”三种形式,支持嵌套。
  • 条件判断:“如果-则”执行单分支,“如果-则-否则”实现双分支。
  • 等待:可设置固定时间或等待特定条件成立(如“等待直到<条件>”)。
  • 停止:停止当前脚本、全部脚本或特定角色的脚本。

2.1.3 事件积木与广播机制

事件积木用于触发脚本执行,常见类型:

  • 外界触发:“当绿旗被点击”(程序启动)、“当角色被点击”“当按下空格键”。
  • 消息广播:“广播消息”和“当收到消息”组合可实现角色之间的异步通信,类似于网络协议中的发布-订阅模式。
  • 场景切换:配合“当背景切换为...”可实现关卡或场景控制。

2.2 角色、背景与舞台

2.2.1 角色(Sprite)的创建与编辑

角色是Scratch中的基本运算单元,每个角色可拥有独立脚本、造型和声音。创建方式包括:

  • 内置角色库:包含动物、人物、道具等分类。
  • 外部位图或矢量图:通过拖拽上传或粘贴导入。
  • 编辑器绘制:使用矢量图工具绘制并保存为.svg或.png格式。
  • 拍照:利用摄像头捕捉图像。

角色允许调整图层顺序(前移/后移),且支持克隆体生成。

2.2.2 背景(Backdrop)切换与特效

舞台可配置多个背景,用户可通过“切换背景到...”积木实现场景变换。特效积木包括:

  • 颜色特效:改变图像色相,适合制作变色动画。
  • 鱼眼/漩涡:扭曲视觉效果,用于实现迷幻或爆炸等视觉风格。
  • 像素化:降低图像分辨率,形成复古像素风。
  • 虚像:调整透明度,实现渐隐或透视效果。

背景也可与角色类似,应用运动和声音积木(如播放背景音乐)。

2.2.3 坐标系与位置控制

舞台坐标系以像素为单位,原点(0,0)位于舞台中心,x轴水平,y轴垂直,范围分别为-240~240和-180~180。位置控制积木包括:

  • 移到x: y: 直接指定坐标。
  • 滑行 xx秒到 x: y: 平滑移动,支持时间参数。
  • 碰到边缘就反弹:自动检测边界并反转方向。
  • 转向:面向方向(0-360度)或鼠标指针。

Scratch还提供“x坐标”“y坐标”和“方向”等报告变量,便于计算路径。

2.3 变量、列表与云变量

2.3.1 普通变量与列表

变量用于存储数值或字符串,支持全局(所有角色可访问)或局部(仅当前角色可访问)作用域。列表是变长数组,可存储多个值,支持增删改查,并可通过“项目编号引用元素。典型应用包括存储游戏得分、角色属性、对话文本或存档数据。

2.3.2 云变量(Cloud Data)与联网功能

云变量专属于Scratch在线社区,允许项目在用户之间共享实时数据。其特性:

  • 同步:所有查看同一项目的用户会看到相同的云变量值。
  • 限制:每个项目最多10个云变量,仅支持数值型数据,且每次操作仅有几秒更新延迟。
  • 用途:多人在线游戏(如实时排行榜、棋盘对战)、聊天室(需编码为字符串替代数字)。

云变量的存在是Scratch社区区别于纯离线工具的关键创新之一。

2.4 扩展与硬件连接

2.4.1 扩展积木(翻译、文字转语音等)

Scratch 3.0的扩展机制通过JavaScript API实现。内置扩展包括:

  • 文本转语音:调用浏览器TTS引擎实现角色说话。
  • 翻译:基于Google翻译 API实现多语言互译。
  • 音乐:MIDI合成音符与和弦。
  • 画笔:在舞台上使用角色绘制图形(类似Logo的turtle模块)。

用户可通过加载社区开发的“非官方扩展”进一步扩展功能。

2.4.2 连接外部设备(LEGO EV3、micro:bit等)

Scratch 3.0支持与主流教育硬件的通信,通过蓝牙或USB连接:

  • LEGO MINDSTORMS EV3:控制电机、传感器(如障碍物检测)。
  • micro:bit:读取加速度计、温度、按钮,驱动LED矩阵和蜂鸣器。
  • Makey Makey:将日常物品(水果、铅笔)变为按键输入。
  • PicoBoard:测量光、声音、温度、电阻。

这些扩展使编程从屏幕走向物理世界,提升了硬件认知和创客教育价值。

3 在线社区与文化生态

3.1 社区功能

3.1.1 项目分享与工作室

用户可在主页点击“分享”发布项目页面,包含缩略图、标签(如“游戏”“动画”)、作品描述和操作说明。工作室(Studio)是主题合集,允许用户将多个相关项目归入同一空间,支持多人协作创建。

3.1.2 评论、转发与“收藏”

社区提供互动功能:

  • 评论:支持文字和表情,但受审核过滤(如禁止URL、辱骂、政治内容)。
  • “点赞”:以“❤️”表示喜爱,计数显示在项目页面。
  • 收藏(Favorites):用户可保留感兴趣的项目,供后续混改或学习。
  • 转发:将项目分享至社交平台。

3.1.3 混改(Remix)机制与版权惯例

混改是Scratch社区的核心创作模式:

  • 技术实现:用户点击“看见内部”按钮查看并修改他人项目,新项目自动标记“基于...”。
  • 版权规则:社区遵守“创作共用-署名-相同方式共享”(CC BY-SA 2.0)协议,默认允许非商业性修改和再分享,但要求注明原作者。
  • 文化影响:混改被类比于音乐中的采样和 remix,形成了“优秀作品被大量分支再创作”的健康生态。例如,知名游戏《泡泡堂》在Scratch社区被复刻数十个版本。

3.2 社区文化

3.2.1 “Scratcher”称号与声望系统

Scratch社区设有成就徽章与用户等级:

  • Scratcher:完成一定数量的作品、登录天数、评论互动后可解锁正式用户身份,并获得“回复他人评论”等权限。
  • 特定徽章:如“100个项目”“1000次点赞”“爆款作品”等,由Scratch团队手动授予。
  • 声望系统:用户主页可显示“项目总数”“点赞总数”“最喜欢数”等公开数据,形成隐形激励。

3.2.2 著名作品与“出圈”梗(如“当绿旗被点击”梗图)

社区曾孵化出多个“现象级”作品和流行文化梗:

  • 《Phaser》:一款基于Scratch的复古街机射击游戏,被移植至网页版。
  • 《Griffpatch》:一位英国资深Scratcher(ID: griffpatch)创作的《马里奥赛车》《我的世界》复刻版,展示积木编程的极致性能。
  • 梗文化:最著名的当属“当绿旗被点击”梗图——一张角色高举绿旗的图片配文“当你发现了一个bug……”,被广泛用于社交平台调侃“程序员的日常”。
  • “ScratchCat”形象:粉色小猫角色成为Scratch的象征符号,其“咧嘴坏笑”的表情被做成表情包。

3.2.3 社区争议:抄袭举报与审核政策

社区管理并非一帆风顺:

  • 抄袭争议:虽然混改鼓励二次创作,但“几乎完全照搬代码仅更换贴图”的“盗包”行为曾引发多次举报潮。Scratch团队通过算法检测和人工审核“取消混改标记”来解决,但争议反复出现。
  • 审核过严:为保护未成年人,Scratch对评论、项目描述实施严格过滤,如禁止提及“恐怖”“暴力”“恋爱”等关键词,被部分用户批评为“过度审查”。
  • 政治敏感:涉及政治、宗教、毒品的内容会被立即删除,引发用户对言论边界的讨论。

3.3 教育版与教师社区

3.3.1 ScratchED教育资源

ScratchED(scratched.gse.harvard.edu)是面向教师的专属平台,提供:

  • 教学案例库:按年级、学科、目标编程概念分类的课程计划。
  • 活动指南:如“初学者迷宫游戏”“数学概率模拟”。
  • 教具:包含可打印的积木卡片、海报和角色模板。
  • 培训工作坊:线上线下结合的Tinkering(动手学习)活动。

3.3.2 与Code.org、CS First的对比

Scratch并非孤立的编程教育工具,常与其他平台比较:

  • Code.org:以课程体系完整、面向K-12全阶段著称,但其积木系统趋于简化,适合大规模课堂,但创意自由度低于Scratch。
  • Google CS First:侧重语言(Scratch)和行业项目(如“游戏设计-编程=艺术”),强调与科学、艺术的交叉,但社区活跃度不如原生Scratch。
  • 优劣:Scratch凭借高自由度和全球社区,在“自学爱好者”和“创意竞赛”场景中占据优势;Code.org更适合学校里“从零到一”的系统化教学。

4 教育应用与教学实践

4.1 编程思维培养框架

4.1.1 计算思维(分解、模式识别、抽象、算法)

Scratch教学常与计算思维对标:

  • 分解:将复杂任务拆分为“移动-碰撞检测-得分计算”等子步骤。
  • 模式识别:发现不同游戏中“循环+条件”的相同代码结构。
  • 抽象:将角色行为(如“点击后消失”)封装为自制积木。
  • 算法:通过“如果…那么…”实现决策树,通过“重复直到”实现循环搜索。

4.1.2 创意学习螺旋(想象-创造-游戏-分享-反思)

这一由雷斯尼克提出的学习模型被完全内嵌于Scratch教学:

  • 想象:用户构思游戏主题,如“太空战争”。
  • 创造:拖拽积木实现角色、规则和内容。
  • 游戏:测试项目,发现bug并修改。
  • 分享:发布到社区,接受评论和混改。
  • 反思:查看他人实现同一功能的不同思路,激发新创意。

4.2 典型教学场景

4.2.1 小学信息科技课程

在中国大陆及欧美多地,Scratch已被纳入义务教育阶段信息技术课程标准。典型课例如“小猫接水果”(变量与随机数)、“弹球游戏”(物理模拟与碰撞检测)。教师通常采用“展示-模仿-自由创作”三步教学法,每节课后提交“项目卡”进行过程性评价。

4.2.2 编程夏令营与课后社团

在“创客教育”背景下,Scratch夏令营(如MIT Scratch Day、Code.org Hour of Code)广泛开展。社团活动中,高阶学员可尝试硬件结合(如Scratch+micro:bit制作智能盆栽)。课后社团则以“限时挑战”形式展开,例如“24小时做一个植物大战僵尸复刻版”。

4.2.3 跨学科项目(数学、艺术、语文)

Scratch被证明能有效嫁接其他学科:

  • 数学:通过“勾股定理动画演示”理解几何本质。
  • 艺术:使用“画笔”扩展生成分形图案或随机构图。
  • 语文:制作“交互式童话故事”或“成语猜谜游戏”,将益智与文学结合。
  • 科学:模拟“太阳系行星公转”或“食物链生态”,增强科学可视化能力。

4.3 教师资源与培训

4.3.1 官方教程与创意计算课程指南

Scratch团队提供了丰富的教师支持资源:

  • 入门教程:如“互动式剪纸”“音乐鼓手”等系列视频。
  • 创意计算课程指南(Creative Computing Curriculum Guide):包含6个模块、12小时活动,覆盖从“第一行代码”到“社区评价”的完整教学闭环。
  • 教师手册:包含课堂管理技巧、评估量表和差异化教学策略。

4.3.2 社区中的“教师工作室”

教师们在社区内自发组建“教师工作室”,例如:

  • CS4All:纽约市教师上传的城市主题项目。
  • TeacherGuided:标注了教学目标和年级的项目合集。
  • 中国Scratch教师群:基于微信和QQ群分享本地化教案、作品与竞赛信息。

Scratch官方也定期组织“教师研讨会”和“Scratch Educator Showcase”。

5 局限性、批评与延伸

5.1 性能与平台限制

5.1.1 大规模项目的卡顿问题

尽管Scratch在80x60像素的舞台中足够流畅,但当项目包含数百个克隆体、大量循环或实时物理计算时,帧率会显著下降。例如,经典像素游戏复刻项目(如《超级马里奥》)常因背景循环和碰撞检测数过多导致画面卡顿,玩家往往需要牺牲细节换取性能。

5.1.2 移动端兼容性

Scratch 3.0虽支持移动设备触摸,但积木拼接的精准度远不如鼠标操作。在智能手机上,开发者需将“绿旗”缩小到点击不易误按,且项目列表加载缓慢。这意味着Scratch的“真·移动创作”依然受限,更适合消费者(观众)而非创作者。

5.2 教育争议

5.2.1 是否会养成不良编码习惯?

批评者认为,Scratch的“脚本随搭随跑”特性可能培养以下陋习:

  • 大量使用全局变量而非参数传递。
  • 忽视代码复用,出现大量重复积木块。
  • 代码无需测试(“运行”就是测试),导致缺乏调试思维。

支持者则辩称,对于8-16岁学习者,这些“坏习惯”在高阶编程(如Python)中可以自然矫正,早期应以趣味性优先。

5.2.2 从积木到文本语言的过渡困难

许多教师发现,学生熟练Scratch后转向Python或JavaScript时,会面临“语法冲击”:

  • 习惯用积木逻辑思考,却不熟悉if-else、for的标点符号。
  • 无法理解“列表索引从0开始”为何与Scratch不同。
  • 难以克服“将循环和条件写在同一行”的愿望。

为此,衍生工具如Snap!(见5.3.1)加入了文本代码显示功能作为缓解。

5.3 衍生项目与变体

5.3.1 Snap!(伯克利大学扩展版)

Snap!(原名BYOB,Build Your Own Blocks)是加州大学伯克利分校开发的开源Scratch变体,增加了:

  • 一等公民函数:可将自定义积木作为变量传递。
  • lambda表达式:支持高阶函数(如map、filter)。
  • 列表嵌套:支持列表的列表(树结构)。

Snap!常被用于大学一年级计算机科学导论课程,作为从积木到Scheme/Lisp的过渡工具。

5.3.2 ScratchJr(面向5-7岁)

ScratchJr是专为学龄前和一年级儿童设计的简化版本,运行在iPad和Android平板。其特点:

  • 积木仅有“运动”“触发”“声音”“控制”“外观”“结束”等6类。
  • 数字和文本输入被图标取代。
  • 项目基于“页”而非“舞台”,每页最多一个角色。

ScratchJr强调“讲故事”而非“游戏开发”,深受幼儿园教师欢迎。

5.3.3 Turbowarp(加速器与离线增强版)

Turbowarp(turbowarp.org)是一个第三方开源在线编辑器,通过编译Scratch项目为更高效的JavaScript代码,大幅提升性能(对包体积达10MB的大项目提速数倍)。它还被广泛应用于:

  • 网页嵌入:复制一段HTML代码即可嵌入任意网站。
  • 打包为应用:生成.exe或.app文件。
  • 无网络运行:支持完全离线。

但Turbowarp不提供社区功能,也不支持云变量。

6 未来发展

6.1 官方更新路线(AI扩展、无障碍支持)

Scratch团队在2023年公布的未来路线图中强调:

  • AI扩展:将集成机器学习(如通过摄像头识别手势、对图像分类)和自然语言处理,使用户能无缝调用计算机视觉和语音模型。
  • 无障碍支持:优化屏幕阅读器兼容性,增加色盲模式和高对比度主题。
  • 界面改进:改进编辑器响应式布局,支持大小屏同步设计。
  • 云变量升级:提升数据读写速度和容量。

6.2 社区治理挑战

随着社区用户数亿,治理难题日益突出:

  • 内容审核:日均新项目超过10万,自动审核模型可能产生误判。
  • 儿童隐私:GDPR/COPPA等法规要求强化匿名化设计。
  • 反霸凌:需要更精细化的举报和封禁机制。
  • 商业化:是否允许付费课程在社区推广?付费混改?这些议题尚无定论。

6.3 在低代码/无代码时代的定位

在低代码(low-code)和无代码(no-code)浪潮中,Scratch并非正面竞争,而是发挥其“教育入口”角色:

  • 错位竞争:低代码面向企业开发,Scratch面向青少年启蒙。
  • 融合趋势:未来若Scratch开放积木背后的文本代码视图(类似Snap!),则可能成为“从积木到代码”的完整学习链。
  • 市场价值:低代码面向专业需求,Scratch坚持“人人都能编程”的初心,两者将在不同赛道并行发展。