Smalltalk Express

Smalltalk-80 was the first object oriented programming language with graphical user interface (GUI), but it was no big success. In the 1980s personal computers did not have enough memory or processing power for Smalltalk. The first computer to run Smalltalk-80 was the Xerox Alto workstation, a modified Data General Nova minicomputer.
Companies like Apple (MacIntosh), Digital Research (Atari ST) and Microsoft (MS-Windows) re-implemented the GUI with traditional programming languages. Today languages like Java (Sun) and C# (Microsoft) become more and more like Smalltalk, for example in using garbage collection.

Smalltalk is a pure OO language, C++, Java and C# are hybrids. In Smalltalk you have one big object tree, in the hybrids you grow some small object bushes in your application. In Smalltalk you can browse the source-code of the GUI implementation exactly like you browse your own source-code. In hybrid languages you can hardly look behind the GUI API interface where the callbacks come from.
Some Smalltalk history and introduction is given here.

You can download the free Smalltalk Express from this web page in version 2.04 as a ZIP file. After un-zipping you can run the VW.EXE program in directory STEXPRES under MS-Windows and under Linux with help of the windows emulator wine. After un-zipping the tutorial you can read it with a web-browser. Just open the file index.htm in directory tutorial.
Download Smalltalk Express 2.04 (ZIP)
Download Tutorial (ZIP)

The "Tutorial and Programming Handbook" for Smalltalk Express can be found on some university servers.
On the university for applied science in munich, germany. To Smalltalk Express Tutorial
On the university hannover, germany. To Smalltalk Express Tutorial

Strange Smalltalk

The numerical expression  1 + 2 * 3  evaluates to 9 in Smalltalk. The hybrid languages give you 7 as solution.
A function max with two arguments a, b is written a max: b in Smalltalk, but max(a, b)  in C++.
For if-then-else you write in Smalltalk:
a >= 0
    ifTrue: [Transcript nextPutAll: 'positive']
    ifFalse: [Transcript nextPutAll: 'negative']

In C++ you would write:
if (a >= 0) {
    fprintf(stdout, "positive");
} else {
    fprintf(stdout, "negative");

Strangeness is relative: if you had a real bad pocket calculator as a child and if Smalltalk was your first programming language, then hybrid languages would be the strange ones.

More Smalltalk implementations

Squeak, Smalltalk/X and VisualWorks are Smalltalk implementations you can find for example on VisualWorks is free only for non-commercial use.