links to this page:    
View this PageEdit this PageUploads to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide
Learning Squeak in 2020
Last updated at 6:42 am UTC on 6 December 2019

Hi there,

My name is Nicola and I am typing this on Sept. 2019.

And after seeing this video of a Ruby conference I decided I wanted to learn Smalltalk.

I learn Squeak as a grown man, I know how to program in several languages for desktop, servers, phones and various headless boxes. I like to program. Still I miss that feeling of deep control of the machine there was in the computer of my childhood, when they arrived with a manual saying: "to turn on that pixel write this", "to play C,D,E do this" etc. My dream was a Lisp Machine, I never saw one running, but I red you could control everything from the REPL, just in Lisp. I saw an Alto at the Computer History Museum recently and I learnt the idea is kind of similar. Squeak is probably the closest we have to those dreams.

At the beginning I started with Pharo, the prevoius video suggests it, and I learnt the fundamentals of Smalltalk language with ProfStef course which you can complete in a few hours. It is a nice crash course and what you learn will be valid also for Squeak.

When I started I downloaded 3 versions of Smalltalk: Pharo, Squeak and the personal release of Cincom VisualWorks. Of the three, the version which ran best out of the box was Squeak. So, after the first week, I decided my learning journey into Smalltalk would have been through Squeak.

The first days I run Squeak and Pharo in macOS (called OSX till recently). I saw potential and I decided to invest some work into it.My favourite desktop OS is FreeBSD. Why? Because it is kind of Squeak, it is still almost understandable by a single individual and it has a decent documentation . At the moment the FreeBSD package for Squeak is 4.X, don't use it, it is old. The current stable Squeak is 5.2. So, If you are like me and you want to use FreeBSD at all costs I reccomend you run Squeak using the Linux Compatibility Layer .

Learning Squeak alone it is not easy, because Smalltalk was not conceived to be a humble programming language, but a whole operating system with a graphical user interface.

The graphical user interface will create most of the troubles. The only way to explain well how to use a GUI is to show a direct interaction. But, exept for the few videos in YouTube by Lawson English, you will not see any interactions, you have books and internet posts.

If you arrived here you saw there is this Swiki. This is very cool but, at year 2020 it has also severe shortcomings:

Beside the Swiki, there are a few other learning sources I reccomend:

Another difficuty you will need to overcome is that Smalltalk has many dialects. If you go on with Squeak you can safely study the BlueBook, and the old books. But there are other options:

As said, different Smalltalk dialects have different spirit. If you know Ruby and JRuby, or the many Common Lisp impmementations as CMUCL, clisp, gnu etc. Well, in Smalltalk dialects are more divergent than that. So, it may be that depending on the application you want to write it will be smarter to choose e.g. Cuis respect to Pharo. But, for the time being, if you are just a beginner, I guess Squeak is a good choice. It does not aim to be an industrial implementation, but more a tool for explorations.

The part that I found to be the most divergent between implementations is the GUI, the default in Squeak is Morphic. Don't expect to move pieces of code from an implementation to another, it is just not true. When you ask questions on the web don't write just Smalltalk, specify the impelemtation you are using: Squeak, Pharo, Cuis etc.

Squeak the OS. Keep in mind one thing. Squeak belives it is alone on the machine. It uses only one process. It acts as a scheduler but it is only using one hardware CPU. The threads are the so called green thread, they are not OS threads. So, they are not good for parallel intensive calculations. But hey, don't make it to dramatic for Ruby and Python is the same story AFAIK.

Dr. Nicola Mingotti — [NMI]

(latest revision for typos and links on 5-dic-2019, original content not modified)