Years ago, in college, as I was daydreaming in front of an actual 'terminal', one of my professors walked in and dropped a Digitalk Smalltalk book on my desk. He said, read this, it is very cool and it'll be big one day. He was right! I ripped through that book, eagerly learning all kinds of cool concepts, objects..message passing, hierarchies. Most of my college programming was carried out in Smalltalk, with some Lisp and Prolog for good measure. All this despite being a Mechanical Engineering major. Of course, sometimes I'd do the obligatory Fortran for some number crunching project.
When I went out into the wide world, I left Smalltalk behind and spent many years doing C/C++. The choice of languages for development were genertally not mine. For my own recreational programming and edification, I spent time exploring many languages ( never quite made it to Haskell though!). Some I merely dabbled in sufficiently to get a sense of the fundamental concepts. While for others, I dug in quite deeply and in some cases became quite proficient in their use. I very much subscribed to the principle of 'Learn a new programming language every year' as espoused in The Pragmatic Programmer. I still do.
Career moves led me eventually to various Java development gigs. The application area was typically the primary draw. Language choice was a somewhat secondary consideration. Java was in the ascendancy. Use of it was a given - a decision made 'above my paygrade'. To be honest, it always left me cold. Over time, I grew to actively hate it. Like so many others who had tasted the finer programming paradigms and empowering environments, I felt that Java was a step backwards. Also frustrating was the sense that many colleagues, steeped in Java and not much else, simply had no sense of what they were missing. Fortunately, I had other peers, who did actually get it and this comforted me and reminded me that I wasn't just imagining this wonderful non-Java world.
At one startup, we were working on a prototype of a highly scalable system for analysing network performance data. One of my more erudite colleagues showed me a prototype that he'd been working on for some key capabilities intended for the core of that system. I observed that it looked like Smalltalk of old, but the environment was a bit different. He told me it was Squeak Smalltalk. I hadn't heard of Squeak. Wow! Nor had I given Smalltalk a serious thought since those wild college days, and yet there it was, a recent incarnation (and if you know the technical history here, of images and their evolution, ancient artifacts still existing in the image!).
From there it was like re-engaging with an old friend and I jumped right on in. Over the next few years, we assembled a team of ace developers. Many fun and stimulating hours were spent transforming that prototype into a hugely scalable commercial product running on Cincom Smalltalk. After that company was acquired, I moved on to other challenges. Smalltalk remained my programming language of choice. It was super-nichey, but the community was peopled by many wonderfully bright and inspirational people, and the legacy was was incredible.
The day to day expectations of a traditional 'big' IT dev. organization, meant that for me, Java became the de-facto 'choice' of language for projects. Bringing other languages in required spending so much political capital, that often it just didn't seem worth it. Java was ugly, but, in all fairness, improving. However, I continued, at the very least for myself, to look for alternatives, trying many different current languages, delighting in the increasing popularity of dynamic languages. It was comforting to see a healthy chunk of the development world slowly coming over to a programming-world view that I had embraced decades ago. Still, despite trying many languages, I didn't find a language so compelling that it made me want to drop Smalltalk for my recreational programming, or where I otherwise had a choice.
I'm about two years into my Scala journey. It's not the perfect language. I'm not sure I'd even know the perfect language! However, for me, at this time, it is plenty good enough and a joy to work with. Of course, Javaisms bleed out here and there and I must hold my nose. It's definitely put the fun back into day-to-day coding for me, a fun that had been missing since I parted company with dear old Smalltalk. There is a vibrant and growing development community, and that itself is wonderfully motivating. It's great to participating on the uptake as opposed to the down. In my latter years of Smalltalk use, for all its intrinsic brilliance and coolness, it always felt like it was a losing battle. Robert Martin gives a brilliant talk here on What killed Smalltalk.. and why that was the reality. Maybe I've just grown tired and am 'settling' for Scala, settling for that comprimise. I don't know. I just know that at this point in my career it feels right enough, a happy compromise.
So, if you are an old Smalltalker, take a look at Scala. You might find the compromises are too much bear, or maybe you'll find a new home. For the Java folks out there, it really is time to move on to something better. I suggest that Scala is it!
Languages are such a touchy topic, but I'll risk it and say I particularly welcome your comments on this one.
(Aside: Scala is my primary general purpose dev language, but I use R for a lot of my datascience/analytics work)