前言

低门槛、宽围墙、高天花板 – 《终身幼儿园》

如果你是一位编程新手, Scratch 或许是最好的选择。 Scratch 拥有庞大的社区、友好的社区文化, 以及丰富而优质的学习资源。

Scratch 团队对于引入新功能非常克制, 这保持了 Scratch 的简单性, 对新手非常友好; 但也付出了代价: 没有持续迭代优化和解决一些棘手问题,以至于社区里许多老用户不满。

如果你是重度 Scratch 用户, 经常撞到 Scratch 的天花板, Snap! 可能是你下一步的理想选择。

Snap! 保留了 Scratch 的低门槛(比 Scratch 要高一些)和宽围墙,但试图拆除 Scratch 的天花板

在 Scratch 里想要的东西

作为 Scratch 重度用户, 在 Scratch 里编程时, 你有时可能会想要下列这些东西:

  • 暂停/恢复程序
  • 支持调试(断点积木)
  • 自定义舞台大小
  • 支持函数返回值
  • 携带数据的广播积木
  • 使克隆体可见
  • 嵌套列表
  • 与网络交互
  • 可编程的角色服装
  • 增强自定义积木(更多类型(reporter…)、下拉菜单、输入类型、指定类别…)
  • 原地更换积木
  • 强大而简单的可扩展机制
  • 自省和元编程能力
  • 积木与代码(lisp code)的双向转化

Scratch Addons/turbowarp 以 hack 的方式实现了愿望清单的一部分, 但限于 Scratch 的架构设计, 有些愿望可能永远无法实现(诸如 嵌套列表, 会破坏兼容性)。

Snap! 实现了上述愿望清单的所有条目,以及更多你一旦使用就会觉得哇塞的功能 !

如果你正在做以下这些事情, 你的头可能在 Scratch 的天花板上磕的有点疼:

  • 试图理解 Scratch 社区里的大型游戏: 难以理解,代码可读性差, 背后的原因是 Scratch 缺少合适的结构来组织代码和进行抽象,导致了代码杂乱难读。
  • 制作大型项目(诸如一部动画片): Scratch 不支持暂停和恢复程序, 这导致你经常需要一遍遍从头播放项目来进入 bug 中, 此外,你也无法进行单步调试
  • 在 Scratch 里学习和复现一些复杂算法: Scratch 的列表不支持嵌套,这导致许多数据结构难以制作; Scratch 的自定义积木是 command 类型(没有返回值), 这也造成了许多限制。
  • 你想编写插件来扩展 Scratch 的能力(像我之前在CodeLab Adapter里做的事情): 在 Scratch “下一层” 编写 JavaScript 代码非常臃肿、低效, 最要命的是没有乐趣! 这是 Scratch3.0 糟糕的底层设计导致的(Scratch 初代代码要比 Scratch3.0 优秀许多,让人费解)

如果你恰好在做这类事情,或许正是从 Scratch 进入 Snap! 的好时机。

参考