Jul 6, 2015  

A lot of thinking about “what’s the best programming environment for beginners?” has led me to the one system I’ve never explored (and only read about): Smalltalk – Or more precisely, a particular open-source implementation of Smalltalk, Pharo.

(Clearly, I have very little credibility, since the pattern here is of me saying “I’m going to learn X”, and they getting sidetracked by some Y)

Like Common Lisp (and unlike Scheme or Haskell), Smalltalk is “image-based” rather than “source-file-based”, and again like Lisp the “ideal” it strives for is turtles all the way down, the turtles here being uniform objects instead of uniform s-expressions.

When you start up the Pharo image for the first time after downloading it, one of windows is a Workspace, with various comments and notes, among which is the following innocuous looking line:

PharoTutorial go.

Executing that line (selecting it and hitting Cmd-D, or right-clicking and selecting Do It) launches a engaging tutorial that … well .. you have to see it for yourself :) At the very end, you have the option of introspecting the tutorial itself, or creating your own. Here is a screenshot of that:

{% img %}

Download Pharo here, and enjoy!!

P.S. just for fun, some “Pharo Zen”:

Perfection can kill movement.
Simple processes to support progress.
Examples to learn from.
Tests are important but can be changed.
Classes structure our vocabulary.
Fully dynamic and malleable.
A system with robust abstractions that a single person can understand.
Explicit is better than implicit.
Simplicity is the ultimate elegance.
Quality is an emerging property.
Polymorphism is our esperanto.
Messages are our vocabulary.
Better a set of small polymorphic classes than a large ugly one.
Communication is key.
Learning from mistakes.
Magic only at the right place.
Objects all the way down.
Abstraction and composition are our friends.
One step at a time.
There is no unimportant fix.
Easy to understand, easy to learn from, easy to change.
Beauty in the code, beauty in the comments.