太阳是石而月亮是土 – 阿那克萨哥拉(古希腊 公元前500年)

模型是揭示真相的谎言

前两天跟小蘑菇分享 Squeak 学习笔记, 里边提到:

Alan Kay 说计算机可以是一切的媒介, 而媒介的作用是将思想具体化。

Alan Kay 在《理解媒介》的影响下说出这样的话, 我们对这种洞察充满敬意。

午饭时间聊起美国刚发生的日食, 聊到日食月食的成因。她一直听我称赞 Squeak 在呈现想法上的潜力, 于是怂恿我在不使用代码的情况下, 用 Squeak 模拟日食月食, 并要求能让没有编程知识的人弄懂系统的运作。

我跃跃欲试, 一边聊天一边使用 Morphic 为我们的想法"塑形", 她一边看我操作, 一边提出新的想法, 并立刻看到新的想法"运行起来"。震惊于Squeak在塑造想法上的能力, 喃喃道她也要用 Squeak。 当我最终让日地系统和地月系统都跑起来时, 她又提议说能不能在日食/月食发生时发出提醒, 记录下来, 提议说可以做一个扫描器一样的东西。于是我从 objects 仓库里拿出一个箭头样子的直线(没有任何功能), 做了雷达一样的扫描器, 不断扫描这三个天体何时连成一条线。

最终有了这样一个简单的模拟:

它完全是在聊天中完成, 一切都是可见和可理解的,没有写一行文本代码。

后记

我尤其喜欢这里的扫描器。

为了知道日食月食何时发生,我最初想到的是三点共线定理, 要实现它, 很难不使用代码。

她想到是不是可以让一根线扫来扫去, 如果同时扫到所有星体, 说明此刻三点共线。

这可能也是许多小朋友会想到的! 这个想法似乎由视觉界面启发, 正展示了视觉媒介的力量!

Alan Kay 在Doing with Images Makes Symbols 演讲里提到让三个年龄段的孩子画圆的故事, 与我们扫描器这个例子有异曲同工之处, 使用符号思考有时候相当脆弱(诸如这里的三点共线定理和视频提到的圆的解析式)。

FAQ

日地系统时如何构建的?

日地系统的构建比较简单:

  1. 太阳不动
  2. 地球绕着太阳转

我们可以完全在视觉环境中做到这点(无需写代码)

首先让地球成为太阳的 submorph:

这样地球就会成为太阳系的一部分, 挪动太阳,地球也会跟着动:

然后将地球拖到合适的轨道上:

  • shift + option + click 选中作为 submorph 的地球
  • 地球会被限制在太阳(椭圆)的 extent 里, 如果轨道比较远, 可以使用 forward 移动地球到目标位置

将地球的旋转中心移到太阳中心位置(shift+click):

这样一来, 地球转动(turn)的时候,就会以太阳为中心了

地月系统是如何构建的?

要构建地月系统, 我们需要做到以下两点

  1. 月球绕着地球转(和上边的日地系统相同操作)
  2. 月球跟着地球一起绕太阳转

要如何做到第 2 条呢?

什么都不用做! 当我们让月球成为地球的 submorph , “地球围绕太阳转” 的运动会叠加到月球上!

submorph 非常强大, 很适合用于构建复合系统。 Snap! 也支持 submorph, Scratch 不支持。

如何在 Snap! 中构建它

前边说到

submorph 非常强大, 很适合用于构建复合系统。 Snap! 也支持 submorph, Scratch 不支持。

我们要如何在 Snap! 里构建地月系统这样的复合对象呢?

参考 示例项目

演示视频:

扫码器的工作留作课后练习 :)