我最近从 Pharo 切到 Squeak,它们都是 Smalltalk 的现代实现。Pharo 派生自 Squeak。

有几位 Smalltalk-80 的实现者(他们之前在施乐实验室创造了 Smalltalk)都参与到了 Squeak 中,包括 Alan KayDaniel Ingall,这个项目依然在持续演进,他们抱有跟今天计算机整个领域不同的愿景。

入门材料

关于 Smalltalk ,我读过的最好入门资料是 《Byte Magazine Volume 06 Number 08 - Smalltalk》: 其中有两篇文章尤其适合入门者:

  • introducing the Smalltalk-80 System(author Adele Goldberg)
  • The Smalltalk-80 System(author the Xerox Learning Research Group)

这份特刊对我影响很大,它是我进入 Smalltalk 世界的入口。尽管之前也花了不少时间在 Smalltalk 上,但来自 Smalltalk 设计团队成员写的这些文章,让我真正进入 Smalltalk 的精神世界。

进入 Smalltalk 世界对我来说,是被启蒙的时刻, 此处沿用康德关于启蒙的看法:

启蒙运动是使人从自愿接受监护的状态中解放出来……在这种状态下人不依赖外在指导就不能运用自己的才智。这样一种我称之为“自愿接受”监护的状态,并不是由于缺乏才智,而是由于缺乏在没有领导帮助的情况下运用自己才智的勇气和决断。

环境

Smalltalk 是一个环境,进入这个环境时,最好放下你过去所受的教育中关于操作系统语言用户界面以及编程的看法。大胆地在环境中玩耍,与环境中感兴趣的物体交互,随时可以进入到它内部去看看。

“学习”

我不能创造的东西,我就不了解。 – 理查德·费曼

别急着”学会“Squeak,Squeak 不是一种可以”学会”的事物。 如果“学会”的含义是指学会“语法”,那么 Squeak 可能比你学过的任何语言都要简单(读完《The Smalltalk-80 System》即可)。

但 Squeak 是“学不会”的,编程不是通过学会语法来掌握的东西,正如写作不是关于掌握拼写和造句规则的东西。只有乏味的教科书和考试才满足于这种目标,可悲的是,通常它们连这点也做不好。

在系统中与那些活生生的小物体(small object)一起玩耍吧(talk),如果你不知道玩什么,Etoys是很好的起步。可以先下载 Etoys 玩一玩,也可以在 Squeak 里创建 Etoys 对象。

教育

首要之务是不可伤害 – 希波克拉底

如果你对编程教育感兴趣,Smalltalk 特刊里的 《Is the Smalltalk-80 System for Children?》极有启发性,它是那种典型的 the better old thing。在 40 年前就想清楚了 Scratch 的精神内核和身体形式。直到今天,Scratch 的支持者和反对者们的争论焦点, 还围绕积木语法和文本语法这类幼稚话题。至于围绕文本的编程教育,则比前者还要更糟,而且有一种奇怪的鄙视链,越反人类则越骄傲,因为它“更难”,在脑经急转弯风格的考核里洋洋自得。 在此,我们想起 Dijkstra 的倡议:某些编程教育会使心灵瘫痪,因此,其教学应被视为刑事犯罪。

Scratch 的重要性在于直观的表达能力(媒介),积木只是微不足道的一种技术手段。其背后的重要想法是把计算机看作个人动态媒介(Personal Dynamic Media)。

理念

如果你对 Smalltalk 背后的理念和设计原则感兴趣, Design Principles Behind Smalltalk可能是最好的入口, 我写过一篇译文

这篇文章也适合架构和人机交互的爱好者。

这些思想(建构主义)的全景在Seymour Parpet的《Mindstorms》里做了更为清晰的阐述。

实现

如果你是一位编程语言设计者,可能对 Smalltalk 的实现细节感兴趣(Ruby 作者就深受 Smalltalk 影响)

我目前通过阅读《Smalltalk Bluebook》了解这些,更好的材料可能是这本书的删减版:Purple Book

紫皮书减去了蓝皮书的第四部分,而第四部是关于 Smalltalk-80 的实现,这部分只是 Smalltalk 不同实现的细节问题, 包括:

  • The Compiler
  • The Interpreter
  • The Object Memory
  • The Hardware

阅读 Smalltalk 实现细节的最好方法是在 Smalltalk 环境中去阅读,使用 Smalltalk 环境提供的 Halo、Browser、Inspector…这些强大工具去阅读,通过与对象的交互去深入理解系统,而不是在纸面上阅读源码,在大脑里构建堆栈。

文艺复兴

有两种东西,我对它们的思考越是深沉和持久,它们在我心灵中唤起的惊奇和敬畏就会日新月异,不断增长,这就是我头上的星空和心中的道德定律。 – 康德的墓碑

Smalltalk 的深刻洞见主要关于人与计算机的关系,人是表达的主体,计算机是一种足够灵活的媒介,编程则是一种表达想法的方式。

在 Smalltalk 的思想传统中,计算机是一种是表达思想的工具,这种表达需要足够灵活的媒介,这种媒介在今天恰巧是一种能够快速运行指令的机器。

今天人们把心思都放在改进这种指令机器上, 人们并不关心思想和表达的自由,甚至,总是走向它的反面。

Smalltalk 希望人们关注思想,重要的变革总是关于思想的。在过去,这些思考者是柏拉图、牛顿、休谟、康德、洛克、维特根斯坦、波普尔、爱因斯坦…

Alan Kay 、Bret Victor 肯定也是其中的一员,人们似乎还没意识到他们主要是一位哲学家,只是恰巧使用计算机来书写。

这些想法在今天依然没有熄灭。Bret Victor 试图在 Dynamicland 中复兴它,今年年底它将离开实验室。 Daniel Ingall 则花了十多年时间,将它带入了网络世界(我正在尝试Daniel Ingall项目的最新版本(目前bug很多),前头是目前在做的一些小实验)

新的变革并不总是轰轰烈烈,当康德写就他那些关于宇宙、星辰、灵魂、律法的作品时,终生都没有踏出他的小镇。而Bret Victor、Daniel Ingall 以及 Smalltalk 的其他后继者们,直到今天,也依然默默地工作在他们的那片”故乡”。

下一位说出

我看见了未来(1979 年乔布斯看到 smalltalk 的 GUI 演示时作如上感慨)

的人或许正冒着风雨骑着自行车前来(计算机是我思想的自行车–乔布斯)。