In April of 2015, I came across the release announcement of Pharo 4.0 on Hacker
News. Pharo is an open-source implementation of Smalltalk, a programming
language and development environment.
I first heard about Smalltalk in the early 1990s. Back then, I studied Computer
Science and one professor mentioned how Smalltalk allowed him to model and
simulate systems with tremendous ease. By the way, he was a professor of
Mechanical Engineering :). Since then, I never worked with Smalltalk or even
met someone who did. My languages of choice became C, C++ and later Python.
Every once in a while I came across an article, or other online reference of
someone looking back on it favorably. Take for example this tweet from Kent
Beck from December 20, 2012:
great joy today coding in smalltalk with an old friend. the design space is
HUGE compared to Java, PHP, and C++.
and the reply from Ron Jeffries:
@KentBeck i miss smalltalk a lot. nothing like it
References such as those kept my interest in Smalltalk alive. It had become
clear to me that Smalltalk was, or had been, something special. This answer to
the question what is so special about Smalltalk says it all:
the highly interactive style of programming you experience in Smalltalk is
simpler, more powerful and direct than anything you can do with Java or C# or
Ruby... and you can't really understand how well agile methods can work until
you've tried to do extreme programming in Smalltalk.
Go and read the full answer: it gives an impressive list of innovations that
So when I was looking for a small project for the summer holidays of 2015, I
decided to spent some time with Pharo.
It quickly became clear that Pharo is a development and execution environment
in one. Compare this to Visual Studio (VS), which is an Integrated Development
Environment (IDE). It allows you to build software that runs under one or more
flavours of Microsoft Windows. VS is the development environment and Windows is
the execution environment. With Pharo, these environments are the same.
Another way of looking at it is that of Pharo being a Virtual Machine (VM) on
which the code runs. But in contrast to the Java Virtual Machine (JVM) which
remains more-or-less hidden from the user, the Pharo virtual machine is very
visible to the user. The following screenshot shows several applications running
inside the Pharo environment:
This has several consequences. Pharo applications will always run inside their
own top-level Pharo window. Furthermore, because the Pharo environment has its
own distinct look-and-feel, Pharo applications will not look native to the host
And what about command-line applications? Apparently it is possible to run
Pharo without a visible environment, called "headless". I have not spent the
time to find out how to do so and what it means for the development and
execution of command-line applications.
What also became clear is that all development had to be done inside the Pharo
environment. Everything that is done in the Pharo environment is stored in a
special files, the image files and a changes file. I realized I would not
be able to use the tooling I have grown accustomed to. This was not the most
pleasant realization for an ardent command-line user like me.
This meant no Emacs, grep, find, sed etc. What about git? Nope, Pharo uses its
own distributed Version Control System (VCS) . I did find that
suprising. To me open-source software development is very much a "standing on
the shoulders of others" kind of activity. And here I have something that
really wants to do it (everything?) its own way... But maybe "its own way" is
better than what I have been doing, so I plodded along.
Pharo 4.0 relies heavily on the mouse. But I am the kind of developer that
really likes to keep his hands on the keyboard, at all times. Of course there
are a keyboard shortcuts, but some of them are context dependent: whether they
work or not depends on the item that has focus.
Switching windows is possible using the keyboard shortcut ALT-TAB. This is
shortcut is often reserved by the host OS to switch applications. In Pharo, I
did not find an easy way to bind it to another shortcut. All in all, I have to
use the mouse a lot more than I would like.
There are more things I found cumbersome or "rough around the edges". For
example, tabbing to the next UI element is inconsistent, the text editor is
rather basic when you are used to Emacs. But enough about that.
Development in Pharo
To help me on my way with Pharo, I started out with two books, viz. Pharo by
Example and Dynamic Web Development using Seaside. I worked my way through
them, well mostly , but it did not became clear to me what Smalltalk
provides that makes it such a productive environment. That might be due to the
size of the examples used. For example, it is shown that you can interact with
live objects and modify them. That might be nice for small examples, but in my
experience, if an application throws an exception that is not handled, the
state is such that the best thing to do is to close the it. All in all, I am
not (yet?) sold on the feature of working with live objects.
This is also made worse by the fact that the Pharo environment keeps feeling
alien. The tools remain cumbersome to use, it is as if I am developing with one
hand tied behind my back.
Let's go back to 2002 when I was a C/C++ developer that started spending some
time with Python. Almost immediately the benefits of Python became clear: a
batteries-included language that did not require compilation and that allowed
me to develop small applications & scripts in no-time. Compare that to the time
I spent on Smalltalk and where I am still left wondering what benefits it
I have to acknowledge that my self-thought Python knowledge got a big boost
when I started to work for a company that used Python professionally. From that
moment on I had colleagues to consult and to learn from. However, a Smalltalk
contract will be much more more difficult to find.
Doubts started to creep in on whether I should keep investigating Pharo: the
environment that required one to leave behind familiar tools, that kept feeling
alien, the lack of learning progress, the lack of understanding why it can be
so productive etc..
Thanks to the internet, if you are looking for confirmation, you will find
it. Just as you can find articles that praise Smalltalk, you can also find ones
that criticize it, for example the C2 Wiki page Why is Smalltalk dead ,
the blog post What killed Smalltalk and the (in)famous 2009 Rails
Conference keynote by Robert M. Martin What Killed Smalltalk Could Kill
Ruby. To some of the objections I could already relate, viz. the lack of
integration with the OS and the outside world in general.
The Smalltalk community appears small. The volume on the Smalltalk reddit and the Pharo developers mailing list is low, but
to be honest, I might be looking at the wrong online channels. And also a small
community can still be very much alive. But the fact that several
Smalltalk-related websites were not up-to-date (or had nothing new to tell for
several years) did not instill much confidence. An example is the Seaside
website, whose homepage shows "latest news" from
2013 and whose Success Stories page has
a lot of dead links. Another example is the PharoCasts website, which contains screencasts of
Pharo. The last entry is from September 2012...
In the beginning of this post, I mentioned that I was looking for a small
project for the summer holidays of 2015. Well, after the summer holidays I
concluded that Smalltalk was not for me, but I did so reluctantly.
The following quote is from the website of Object Arts, which developed a
Smalltalk implementation specifically for Microsoft Windows:
Smalltalk is dangerous. It is a drug. My advice to you would be don't try it;
it could ruin your life. Once you take the time to learn it (to REALLY learn
it) you will see that there is still nothing out there that can quite touch
There must be something to Pharo and I feel that I just do not get it, yet.
A month ago I learned that a Massive Open Online Course (MOOC) on Pharo would
start at the beginning of May 2016, Live Object programming in Pharo. It is a
7-week course developed by and given by Smalltalk developers and Pharo
contributors. Among them is Stéphane Ducasse, one of the driving forces behind
Pharo. The course looked like the ideal way to be able to finally determine
whether Pharo can be productive for me, so I entered.
At the time of writing, I just finished the first week, which introduced Pharo,
the Smalltalk language and which ended with a screencast of a small programming
exercise. I especially liked how the screencast showed, almost casually, some
minor usage tips. Let's see how it goes in the following weeks!