I have so many interests that I find myself rotating between them in order to give each some small share of my attention. I sometimes go for extended periods of time without spending any time at an activity. Then I rediscover it and am intensely engaged by it for a while. Then, as abruptly as I renewed my interest I am on to the next one.
This weekend I rediscovered my fascination for the Smalltalk language. There are a couple of popular free implementations of Smalltalk, Squeak and Pharo. Pharo announced a beta release of their new 64 bit implementation for Linux and MacOS. I downloaded it and had a look. I was impressed with the advances that have been made in the system utilities.
I am drawn to a language that uses a single paradigm throughout. In the case of small talk that paradigm is object orientation. The language is written in itself and although some of its primitives are often optimized to native implementations there are reference implementations in Smalltalk available for browsing.
Another attractive aspect of Smalltalk is the fact that the source code for the entire system is available for perusal in the built in code browser. This inspires developers to use existing implementations of features instead of reimplementing them. If there is a need to modify or extend their functionality it can easily be accomplished by subclassing the original implementation.
Smalltalk was the inspiration for the promise of code reusability that was associated with object orientation when it first became a popular programming paradigm. Other object oriented languages have fallen somewhat short of that promise. It is primarily because few other languages come with the source code for the entire system as an integral part of the delivery. Or if they do, the language is implemented in a different language other than itself. This places the burden of being conversant with two different languages to take understand the fundamental features of the language. Often the built in classes are closed so that if you want to modify or extend them you have to reimplement them yourself.
Often the benefits of a language go beyond just its syntactic structure. Fundamental issues of philosophy, community, central repository for libraries, and availability of free implementations with good documentation and lots of example code are often as important as the basic structure of the language.
Java, Perl, Python, Ruby, and PHP serve as examples of what I am talking about. Each have their strong points and weaknesses but all have received the widespread use that they have for reasons beyond any merits they might have as programming languages.
It is also true that the best of languages are often passed over if they are the proprietary vehicles of large corporations. Such languages are subject to the whim of their owners who have been known to change a language in a new release only to break existing code written by their customers. It doesn’t take more than once to learn that you are better off using an open source implementation of an industry standard language.
Sweet dreams, don’t forget to tell the ones you love that you love them, and most important of all, be kind.