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:
The search function works poorly, it is difficult to find what you want. I mostly arrived at Swiki articles via Google
The pages are not formatted how we are used to see them today. They are from the pre-CSS era. So, reading here is not comfortable. This page is an exception, I am testing how easy would be to inject CSS.
Often it crashes, you load a page and it just crashes. This happens also when you edit stuff.
Beside the Swiki, there are a few other learning sources I reccomend:
If you find a local group of Smalltalk people, go!
There is the beginner mailing list, use it!
Use StackOverflow, I did. There are a few nice guys that will help you. BUT, be prepapred to do your homework! In Squeak, as you will see, you can actually discover alone almost everything. This is not a copy and pasta language.
There are a lot of books you can read for free, see here . Of all these the ones I am using are
Guzdial - "Squeak Object oriented design with multimedia applications".
Guzdial, Rose - "Squeak Open personal computing and Multimedia".
Black, at all "Squeak by Example".
Goldeberg, Robson "Smalltalk-80 The language and its implementation". (called the BlueBook)
Alec Sharp, "Smalltalk by Example".
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:
Pharo. Stephane Duchasse, on old time Squeaker has branched out his own Smalltalk: Pharo. Pharo diverges significantly from the classics and moves fast. AFAIUnderstand Pharo approach is too integrate C code whenever possible so, you will most probably find a lot of feature in Pharo that there aren't in Squeak.
Cuis. It is similar in spirit to Squeak but tries to live with as few classes as possible. If there are few classes the system is easier to understand.
SqueakJS. this is a Squeak but run in your Web browser! Wow, one day I want to write someting with it!
JSqueak. It is an implementation of Squeak in Java. I never tried it. I guess it may have all the advantages of Java: [1] huge library ecosystem, [2] OS threading [3] Java portability.
Croquet. Smalltalk in a 3D world. I saw just a few videos.
Commercial. There are various options but I did not explore them well so I will not talk about it.
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.