Since the last post I’ve done read more on language design and usage, mostly around the “worse is better” and the political dichotomy of language features. I’ve started reading things on D, Haskell, and Clojure, just to get some perspective on the discussion. As a primarily C++ programmer, I’m well aware of the tradeoffs in style/politics/features that make a language popular vs powerful or fun.
I’ve kept my experiences with Dart and Go in mind as I read these meta-language dissensions. I realized that while my ‘trending languages’ post wasn’t wrong, it focused on a less important factor.
The timing of Go was certainly fortuitous, it wouldn’t have got the adoption is has if people weren’t running into issues scaling after riding the interpreted language wave. But I’m beginning to see that time to learn and adapt to new paradigms might better explain that rapid expansion of a language with some very specific goals.
Go introduces very few ‘new’ things. Its syntax is familiar to C programmers, its libraries & functions & structure are similar to C. It focuses on a few new things and does those well, You can pick up those features and say “ah, I know what this can be used for!” It’s the time to that ahah moment that take programmers from experimenters to production users. Picking those features is still very much contextually dependent, programmers who don’t run into problems that Go attacks are likely to be unimpressed by the language. Simplicity, concurrency, speed are hot topics for the web world now, but not for every programmer.
As I’ve read more about Dart, D, Rust, and Haskell, I see the ‘right thing’ mentality. The languages are not focusing on particular problems, but more of the conservative approach to avoid rather than to encounter and attack problems.
I really want to see the other side of this argument, so I’m going to write something non-trivial in one of these languages before I cover it again.
ps: I still haven’t gone back to get Dart working on the server, I got distracted and added new features to BitPim instead (using Python). More on that later.