Likewise, many folks feel that Smalltalk is either irrelevant or don't even understand its value proposition. It would be wonderful for James Robertson to share his thinking towards why folks should still care about the language.
I've made that post more than once :) The bottom line seems to be this: most people simply don't believe the productivity claims. Here's an example that shows what you can do when the library designers don't have asinine ideas like "final" declarations. Here's a walk through of how you can debug a Smalltalk web app - somewhat simpler than the asp/jsp model, I think.
The main thing is this: In Smalltalk, the runtime is never closed off - you can keep your application open for ongoing development. I did this with BottomFeeder; I can open a workspace and a browser right in the runtime. I can write scripts against the application easily that way. What if I want information for which there's no easy to access GUI interface? Simple: I just open the workspace and script something, as I demonstrated here.
In more "normal" situations, Smalltalk just makes your life simpler. Have a look at Cees' post: Java (and similarly, the MS languages) just get in your way. You're coding to make the compiler happy rather than to solve an actual problem. Remember what you job is: it's to solve actual problems. Why should you invest the extra hours required to make some compiler developer in California (or Washington) happy?
Now, as I said last night, a lot of people will scoff at Cees' example, saying that he was trying to code in Smalltalk while using Java. To wit:
I am the kind of programmer that thinks that “if” statements should be avoided, and if I repeat an “if” in every method in a class, my refactoring alarm starts to go off. Now, in Smalltalk, this would have a simple solution:
doSomething: key with: ...
^self withAuthentication: key do: [...].
withAuthentication: key do: aBlock
^(self authenticate: key)
ifFalse: [Result newWithMessage: 'authentication failed']
A complete no-brainer with mostly similar solutions in Python, Perl and Ruby (to name some other dynamic languages).
I will spare you the code, but my first attempt was to use an anonymous inner class as a work-around for Java’s lack of closures. The result was much worse than the original code, enough to dub Java “LISB” (Lots of Irritating Stupid Braces). I got rid of the “if” statement, but at a price I was not willing to pay.
Note that he mentions that this is a no brainer using other dynamic languages (meaning: the power here is not limited to Smalltalk). It's only in the handcuff languages that you end up doing the extra code dance.
Ruby is gaining adherents because of this - and we are seeing a small, but measurable, increase in the interest in Smalltalk. People looking at Ruby are naturally inclined to have a look at Smalltalk as well. You could give it a whirl yourself - and feel free to send comments my way, either here or by email.
I'll add a small note about comments - part of my spam blocking efforts involve automatically turning comments off after a post leaves the front page. So if you see this post after that happens, you won't be able to add a comment.