There's been a fair buzz in the Smalltalk blogs (
here and
here) about generally positive Smalltalk-applicability
comments made on StackOverflow.
Now, I like to think of myself as a generalist, and a bit of a language geek. In my various jobs I've written a great deal of Smalltalk (VisualWorks), Java, C++, C and Perl, but have also spent a fair amount of fun time working with Squeak, SBCL Common Lisp, Clojure and Erlang. I'm a huge fan of Linux and Unix, and believe that the shell is a vastly under-used resource.
This is where I personally find Smalltalk to be annoying.
Don't get me wrong: it's an amazing language and development environment. With something like Eclipse, you write some arcane text files and--after running them through a compiler that you didn't really need the IDE for anyway--you have your application. With Smalltalk, the IDE
is the application: you just iteratively refine it until it becomes what you want to ship. Awesome stuff.
But that same self-contained structure is what hurts it. When I write C, I tend to use
Emacs, enhanced with a
bunch of add-ons. I use the
git source control system. I use
diff
and
patch
to throw experimental code snippets at colleagues, and they do the same with me.
However, my choices don't stop them from using Eclipse, and the master source repository being
Subversion. Furthermore, when I need to write Java or Perl, I can use the vast majority of the tool stack that I've accumulated just by switching buffers in Emacs. Simply put, I get to transfer most of my skills between tools.
In Smalltalk, it's all-or-nothing. Shell tools are useless on the image. You can't edit code in your favourite editor (well, you can, but unless you're using
GNU Smalltalk, it's inconvenient to the point of being unusable). On top of that, you need a special, integrated source control system that's most likely dictated by your vendor, with migration being difficult-to-impossible.
For me, this single-mindedness it what stops Smalltalk being my favourite language (well, that and a single-threaded virtual machine and non-native GUI widgets). For now,
Perl retains that crown (despite it being fashionable to bash it these days), with
Clojure looking very, very interesting as a possible successor...