I like Smalltalk. I’ll never ship a product in it, but it’s a fun language to play with. You can do seriously nifty things in no time at all once you “get it.” The problem is, of course, that on Monday morning you have to come back to work and push semicolons and curly-braces around for a living again. Is the letdown worth it?
It’s a little like this: Remember the first time you wanted to “grep” a piece of paper or a book? The information was there in your hands, and you were inches away from an answer, but you couldn’t do a search. Dead paper sucks.
Dead-bits languages suck, too. “All I want to do is make a closure here.” “Man, if only I could change the way this method in the compiler works, then…” Once you get it, nothing else is quite the same.
Anyway, I have a cartoon on my door at work. It’s a simple black background, with a “talk” balloon and the words
“Oh no, I typed ‘Processor := nil’!”
You probably have to be a Smalltalk geek to appreciate this. The point is that there aren’t many other systems on the planet where you can delete the CPU object that powers your development environment. The result of this is, of course, utter catastrophe, and thus the point of the cartoon. It’s really beautiful; a system with near ultimate flexibility, and the God-given right to shoot yourself in the foot in very interesting ways. The real joke is on the rest of us, the schmucks who get to herd #define symbols all day long.
People stop by my office occasionally and comment on the Smalltalk cartoon. These people form a smallish clan, and a tragic one; I think we all know what we want, and it doesn’t include wrangling double-colons and -> symbols into loose formation. Doing memory management is better these days, and reflection is pretty decent to have, but near-unparseable, dead-when-compiled languages are still the mainstream.
* * *
One of my objections to the Smalltalk mode of development was that it is environment based. You get into a little shell and start interactively wiring stuff up; the concept “what is a program?” is fuzzy. Getting your stuff working in another Smalltalk environment is a process akin to infection; you file-in stuff to the other environment and get similar stuff wired up the way you did it originally. The potential non-repeatability of this process gives hard-core conservative engineers the heebie-jeebies. It’s a little too much like sharing dope.
But these days, the dividing line between environment and program is getting fuzzier even for “dead bits” languages. Want to program in Java or C#? You have to install a ton of other stuff, configure registry settings, get config files lined up, set up environment variables, install databases, tweak security settings and invoke the just-in-time debuggers when things choke and spray bits. It’s really the same thing as interactively hacking in Smalltalk, just less integrated, arguably more ad-hoc, and unarguably a lot less fun.
* * *
Anyway, visit smalltalk.org for a breath of fresh air. Read the papers, download Squeak and have fun for an hour. It’ll do you some good.