前言

2014年的时候,曾对Smalltalk有过一段时间兴趣: Smalltalk学习笔记, 那会儿刚毕业工作几个月,对各类事物都有兴趣,同时兴趣来得也浅。最终浅尝辄止,并没有实际用Smalltalk写过项目,哪怕练手项目也没有。

后来,由于对人工智能、认知论、教育感兴趣,开始读让·皮亚杰西摩尔·派普特艾伦·凯的东西.

西摩尔·派普特艾伦·凯将计算机视为一种增强人类智能的工具。

Bret在他的博客将这些概念综合在一起,以一种清晰的媒介重新展现出来。几乎是一夜之间,我突然知道自己在寻找什么,它如此确定无疑,你知道这就是你期待的东西了, 你愿意投入你往后的所有时间。 关于计算机的未来是什么,编程的未来是什么,教育的未来是什么,这些问题我想了很久,深受其扰,而且一度怀疑它们不是好问题,它们大而无当。Bret让我确信,他沿着西摩尔·派普特艾伦·凯所走的路,继续前行,最终带着我们看到了理想的未来。它如此耀眼,以至于你会担心,如果这些想法没被实现,未来得多么黯淡和乏味。

在技术方面,Bret使我确信,Smalltalk是相对理想的创作工具,在更为理想的工具(如Dynamicland的realtalk)诞生之前,我应该切换到Smalltalk上,将其用作日常编程所用的语言。这是一门经过精心设计,方便探索和创造的语言。

和稀泥的人总喜欢说,“采用什么编程语言并不重要,它们都一样”,我对这话的理解是,就"图灵完备"这点来说,他们是等价的。但图灵还论证过你在一条无限长的纸带上,是可以做到你用今天的电脑做到的所有事情的,它们在逻辑上等价,难道这是你选择使用纸带编程的理由吗?

编程语言不可能恰好都一样,总有一些粗制滥造,而另一些精心设计。像我这样愿意不断尝试新语言的人,实在没有办法假装使用过的编程语言都一样。像我这么蠢的人如果去设计一个编程语言,它怎么会和艾伦·凯精心设计的Smalltalk一样。对这个话题感兴趣的小伙伴,可以看看Bret在LEARNABLE PROGRAMMING对Processing这门语言的攻击,招招致命。

热情

Bret让我相信Smalltalk对我很重要,但仅是知道一件事很重要,似乎无法支撑我持续投入时间。

我有个习惯,在找到做一件事的乐趣/热情之前,并不愿意投入到这件事的细节之中。

换一种说法,我是个没什么毅力的人,如果没有兴趣驱动,就没办法坚持去做一件事。这么多年来学会了破罐子破摔,不和自己闹别扭,如果没有找到热情所在,就宁可发发呆,看看小说,四处走走,也不愿开始干活。

但有些事情即便没有兴趣,你还是会知道它挺重要的,我的做法是花点时间去寻找这件事的乐趣和意义所在,一般情况下都能找到。一旦找到后,就乐在其中,不必外部监督,也能用心于此事。我不知道别人的意志力是不是都很多,但我的意志力很少,而且是消耗品,它原本就不多,一旦消耗完,就对自己没办法了,多坐一会儿都极难受,如果此时非强迫自己一定要做点什么事,这事儿是体力活还好,磨磨蹭蹭也总有做完的时候;若是脑力劳动,还需要创造性的话,结果准特别糟糕。所以我没办法使用意志力来推进工作。

于是在假期的头几天,我并没有投入到Smalltalk的语法细节(完全忘了以前所学)。我开始了解Smalltalk社区的人都在干嘛?他们聚集在哪儿?他们做了什么好玩的东西?

4P

很喜欢Mitchel Resnick终生幼儿园一书中提到的4P学习方法: Projects, Passion, Peers, Play

我开始浏览各类Smalltalk Projects(主要关注Smalltalk的现代方言:Pharo),看看它们中的哪些能激起我的热情, 在pharo stories里看到许多有意思的项目, 我对Phratch最感兴趣。如它的名字所暗示的: Phratch是使用Pharo重写的Scratch.

PhratchScat的改进版。Scat的项目声明写得有趣:

We believe there is a conspiracy going on all over the universe, evil forces are constantly fighting to take down great Smalltalk projects and port them to other languages.
In a quest against such demonic plots, a couple of us started a confidential mission to rescue the last of these endangered projects, namely Scratch.

Pharo

至此,我已经迫不及待想学习Pharo了,恨不得立刻就能读懂Phratch,想着学习完这个项目源码之后,立即使用Pharo7.0重写Scratch3.0。

确定了将要学习的方言(Pharo),开始搜索Pharo新手写的博文,看看从中能够找到他们发现的好的学习资源, 读到Exploring Pharo这篇文章,觉得十分出色。

在投入到Phratch源码之前,我准备简单过一下Pharo的语法,但有不愿只是看语法,希望有更周全的引导,包括调试工具的使用说明之类的。The Pharo MOOC是非常理想的选择,我选择在WebPortal里看课件学习,起初看了几个视频,后来觉得直接看PDF课件更快些,于是便直接看PDF。我今天已经看到了第五周的第一节,预计明天就看完了。Smalltalk的语法非常简单,连同它的编程风格,我想我已经基本掌握了。这个过程十分愉快,每学会一点知识,感觉离实现目标就更近了一步(读懂Phratch,重写Scratch3.0)。

结语

本文记录我的学习习惯 以及Pharo的一些学习资料。

参考