A Lisper asks, "Am I supposed to like Smalltalk?"

Ralph Johnson johnson at cs.uiuc.edu
Wed May 17 11:16:28 UTC 2006

The Smalltalk environment is optimized for browsing and reading, not
for writing.  It assumes that the author of the code didn't know how
you are going to reuse the code, so it provides ways of searching and
analyzing rather than ways of organizing.

As an author, sometimes I wish that I could organize my code into a
linear structure that forced the reader to follow along in a certain
order.  But when I am reusing someone else's framework, I often know
that I am going slightly against the authors plans.  If we provide a
way to give a more linear narrative, we need to avoid losing the
ability to browse and analyze.  There have been several Smalltalk
"literate programming" tools in the past that let people create a
narrative that was a layer above the browser.  A "literate program"
was a sequence of method definitions, class defitions and English
documentation.  Readers could either follow the narrative or could
access the classes directly though the browser.  These tools never
took off, but I thought that the general idea was good.

In one of the early days of OOPSLA, someone on a panel said that
Smalltalk programmers should spend four or five times as much time
reading code as writing code.  Someone in the audience stood and cried
out "Now you tell me!  I thought I was feeble-minded because I spent
so much time reading and so little time writing!"  Smalltalk is
different.  It is different on many levels.  When we teach people
Smalltalk, we have to prepare them for this difference.

For example, one of the people who responded to the blog message said
"A program is text".  But in Smalltalk, a program is not text, it is
objects.  A program is a set of classes.  The classes and methods are
not just represented by objects in Smalltalk, they *are* objects in
Smalltalk.  The browser is an editor of classes and methods.  Yes, we
can export classes and methods to text files, but the text files are
not the way Smalltalk programmers think about programs.  The browser
is how we think about programs, and the browser is an editor of
objects that happen to be classes and methods.  In Smalltalk, a
program is not text.

But that is just one of many differences.  Smalltalk is objects all
the way down.  We spend more time reading than writing.  We live in an
"image", which is an executing program.  We modify our applications in
the middle of their execution.  There is no "main".  When we write a
program, we are not just reusing some code that is thirty years old,
we are making it by modifying a program that started executing thrity
years ago and that has been changed by thousands of people ever since.

When we teach Smalltalk, we have a tendency to try to relate it to the
students by explaining it in their terms.  We tend to downplay the
differences.  But one of the big values of Smalltalk as an educational
tool is the fact that it is so different.  These differences have
disadvantages as well as advantages when it comes to building systems.
 But learning new things expands your mind, so from an educational
point of view, the differences are one of the chief advantages of

-Ralph Johnson

More information about the Squeak-dev mailing list