Smalltalk was one of the first languages I encountered after BASIC and Pascal (yes, I encountered Smalltalk BEFORE I encountered C.) But I was a young programmer, and I let all the old C programmers talk me into accepting C for application development; after all, you really wanted a program that would run FAST!
What I like about Smalltalk is:
* relatively easy implementation. Like FORTH, you can create a core smalltalk VM and image in remarkably little code. Squeak (a free Smalltalk) was originally implemented in Smalltalk, automatically converted to C using Smalltalk code that converted Smalltalk to C, and then compiled for different platforms.
* integrated development environment. Yeah, I know, a lot of young punks will tell me I'm insane for liking Smalltalk's now antiquated looking IDE, but I really like the fact that I can modify the definition of a class while an application is running. I can debug it too!
* weak dynamic typing. Yes, some will say that this is evil. I think it is good. When programming in Smalltalk, I think about families of methods / messages, not types.
* complete source available. The development environment is integrated into the running image, so... you tend get the source for the complete environment (minus the C or assembly code for the primitives.) Some might say that this is bad as it allows "bad guys" to see your source code. Well.. you can actually ship an application without the source, but like Java, it will be difficult to hide your intent from a dedicated attacker.
What's not bad about Smalltalk
* speed. It's actually not that slow. Some tasks under Squeak are faster than Java. Java is faster for others. CinCom's commercial Smalltalk is faster than Java on just about everything.
* multi-person development in an IMAGE based environment. FORTH programmers will known what I'm talking about. Classic Smalltalk stores the complete state of all objects in object memory in an IMAGE. This is basically one big database of objects. For a long time, the big deal with IMAGE based systems was that it was difficult to separate the development environment from the running application. Proper use of changesets and Projects seem to have done a great deal towards fixing this.
* documentation. Depending on what you want to do, there may be enough documentation to get you started.
* online community. There's a Squeak Yahoo! Group that is quite active. Unlike Slashdot, most of the postings are not inane drivel.
What's bad about Smalltalk:
* Need delegation ala Objective-C. Smalltalk would be a lot cooler if if had delegation.
* need namespaces. There's primitive namespace support in some Smalltalks, but it should probably be a little bit better.
* polled I/O. The virtual machine running the Smalltalk image does polled I/O in classic Smalltalk (and in Squeak.) This is a bit of a disappointment, especially for embedded platforms.
* documentation. Sadly, there are some aspects to Smalltalk development that are less documented than they should be.
* mod_smalltalk is not ready for prime time. Yes, I should probably stop bitching and start helping, but I guess I'm currently content to watch from the sidelines. In the meantime, you can run Commanche in Squeak.
I'm not the only one to recommend fixing the top three problem areas with Smalltalk, but people in the community have pointed out that "it wouldn't be smalltalk" if we did this.
Still... Smalltalk is really, really cool. There are Smalltalk development environments available for multiple platforms ranging from Palms to Convexes, and everything in the middle.
If you're even the slightest bit interested, consider visiting the Squeak site at http://www.squeak.org/ or the Squeak SWIKI at http://minnow.cc.gatech.edu/squeak .