从原型走向公开使用
Blockly的开发始于2011年夏,2012年5月在Maker Faire首次公开发布。尼尔·弗雷泽后来在项目邮件组中确认了这两个阶段。最早的欢迎帖已经说明,项目经过约一年开发,正希望接触更多使用者,更新甚至一天出现数次,并邀请人们取得源代码、提出意见和参与修改。
开发有具体的应用背景。参与者马克·弗里德曼在2014年的讨论中回顾,Blockly最初计划替换App Inventor中的OpenBlocks编辑器。同一讨论里,弗雷泽将自己、负责国际化的艾伦·斯珀特斯、参与实时协作的弗里德曼,以及承担数学积木、云存储和Dart、Python相关工作的Quynh Neutron列为主要核心贡献者。这是当时对分工的说明,并非所有功能在2012年首发时就已齐备。
先降低开始编程的门槛
弗雷泽在2012年6月19日的技术介绍中,把无需下载、插件和安装列为重要目标。面对尚未投入时间的新手,一次复杂的环境配置就可能让人放弃。因此,Blockly以浏览器中的可视编辑方式,让使用者先从选择和连接积木开始,不必先熟悉文本编辑器里的标点和语法形式。
外观也被纳入工程工作。圆角、阴影和连接时的声音反馈帮助使用者理解操作。更关键的是,编辑器能够嵌入别人的网站,加入针对具体任务设计的积木。设计者可以围绕绘图、迷宫或其他任务组织指令,而不是把一整套通用语言原封不动地交给初学者。
参考:[1]
编辑器与程序运行之间
Blockly核心采用JavaScript实现。积木带有连接点,可以排成顺序或嵌套结构;代码生成器再把这种结构转换为文本程序。2012年的介绍已经提到JavaScript、Dart和Python输出,并允许开发者另写生成器。由此,画面中的组合与可阅读的文本代码能够对应起来。
团队在2017年论文中进一步澄清,Blockly作为程序库提供的是编辑界面和生成框架,应用开发者仍要决定积木词汇、输出方式和代码如何运行。例如,表示前进的积木本身不会移动真实机器人,开发者必须把它连接到所控制设备或屏幕角色的动作。这种分工既方便复用,也把执行环境的责任留给采用它的项目。
用重复动作说明积木结构
设想一个简单任务:让屏幕角色沿直路前进三格。可以顺次连接三个前进积木,也可以把一个前进积木放进重复三次的循环里。后者把次数和动作分开,修改次数即可改变行程;积木的包围关系则让循环体的范围可见。若改成有路才前进的条件判断,就要另外检查前方状态,不能把判断一次与反复执行混为一谈。
2015年论文指出,初学者容易混淆条件与循环,团队曾通过分类和颜色调整帮助区分。拖动也有细节:两个积木靠得很近却未真正连接时,外观可能误导使用者,编辑器需要把这种近邻分开。可视化减少了部分输入困难,但判断、重复和程序结构仍须学习。
公开讨论暴露了哪些边界
2012年邮件组中的使用者,很快提出绘图画布、图书馆互动装置和课堂挑战等想法。这些讨论说明,人们把Blockly看作可结合各自场景的工具,而非只能完成一个示范游戏的封闭应用。邮件中的装置方案当时仍是计划,不能作为已经部署成功的案例。
当有人希望把任意Python文本再转换成积木时,弗雷泽明确指出困难:当时的Blockly还无法表达列表推导、闭包及局部变量等多种结构,直接反向转换会有大量问题。因此,输出一种语言的代码,与完整覆盖该语言、更与可靠地来回转换,是不同层次的能力。
参考:[2]
后来形成的设计经验
2015年的总结把易用性问题落实到连接提示、说明方式和学习者对作品的控制。这组开发经验记录了团队怎样根据使用反馈调整界面。
2017年的论文则要求开发者先确定受众和任务,再选择图标、自然语言或接近文本代码的积木,避免提供过多难以寻找的指令,并尽早观察真实使用者。Blockly早期留下的设计方向,因而是提供可组合的编辑基础,再由具体应用决定怎样帮助使用者理解程序;后续教学产品与功能是在这一基础上继续形成的。