5 min read

This blog is not about programming languages as much as it’s about products and what makes good products (or more specifically, why good products sometimes don’t get used). I won’t talk about the advantages or disadvantages about the syntax or how they work as programming languages, but I will talk about the product side. We can all have an opinion on that, right?

Real people use Dart. Really.

I think we’ve all seen recently a growth in the number of adopters for ‘compile to JavaScript’ languages – TypeScript and Dart being the primary ones, and an honourable mention to CoffeeScript for trying before most others. Asana just switched out their hundreds of thousands of lines of JS code to TypeScript. I know that apps like Blosom are swapping out the JS-y bits of their code piece by piece.

The axiom of my blog is that these things offer real developers (which I’m not) real advantages, right now.  They’re used because they are good products. They add productivity to a user-base that is famously short on time and always working to tight-deadlines. They take away no functionality (or very little, for the pedants out there) of JavaScript, but you get all the added benefits that the creators deigned to add. And for the select few, they can be a good choice. For online applications where a product lifespan may be 5 years, or less, worries about code support for the next 20 years (anyone who uses Perl still) melt away. They aren’t doing this because it’s hipster, they’re doing it because it works for them and that’s cool. I dig that.

They will never, however, “ultimately… replace JavaScript as the lingua franca of web development”.

Just missed the bull’s eye

The main issue from a product perspective is that they are, by design, a direct response to the perceived shortcomings of JavaScript. Their value, and destiny as a product, is to be used by people who have struggled with JavaScript – is there anyone in the world who learned Dart before they learned JavaScript? They are linked to JavaScript in a way that limits their potential to that of JavaScript. If Dart is the Mercedes-Benz of the web languages (bear with me), then JavaScript is just “the car” (that is, all cars). If you want to drive over the alps, you can choose the comfort of a Merc if you can afford it, but it’s always going to ultimately be a car – four wheels that takes you from point-to-point. You don’t solve the problems of ‘the car’ by inventing a better car. You replace it by creating something completely different.

This is why, perhaps, they struggle to see any kind of adoption over the long term. Google Trends can be a great proxy for market size and adoption, and as you can see “compile-to” languages just don’t seem to be able to hold ground over a long period of time

Dart, Typescript and CoffeeScript

After an initial peak of interest, the products tend to plateau or grow at a very slow rate. People aren’t searching for information on these products because in their limited capacity as ‘alternatives to JavaScript’ they offer no long term benefit to the majority of developers who write JavaScript. They have dedicated fans, and loyal users, but that base is limited to a small number of people.

They are a ‘want’ product. No one needs them. People want the luxury of static typing, but you don’t need it. People want cleaner syntax, but don’t need it. But people need JavaScript. For “compile-to” languages to ever be more than a niche player, they need to transition from a ‘want’ product to a ‘need’ product. It’s difficult to do that when your product also ‘needs’ the thing that you’re trying to outdo.

Going all out

In fact, all the ‘compile to’ tools, languages and libraries have a glass ceiling that becomes pretty visible from their Google trends. Compared this to a Google language that IS its own product, Google Go, we can see stark differences

Coffeescript, GoLand, Typescript, Google Dart

Google Go is a language that offers an alternative to Python (and more, it’s a fully featured programming language), but it’s not even close to being Python. It can be used independently of Python – could you imagine if Google Go said, “We have this great product, but you can only use it in environments that already use Python. In fact, it compiles to Python. Yay.”. This could work initially, but it would stink for the long-term viability of Go as a product that’s able to grow organically and create its own ecosystem of tools, dedicated users, and carve out its own niche and area in which it thrives. Being decoupled from another product allows it to grow.

A summary of sorts

That’s not to say that JavaScript is perfect. It itself actually started as a language designed to coat-tail the fame of Java (albeit a very different language). And when there are so many voices trying to compete with it, it becomes apparent that not all is well with the venerable king of the web. ECMAScript 6 (and 7, 8, 9 ad infinitum) will improve on it, and make it more accessible – eventually incorporating in to it the ‘differences’ that set things like Dart and TypeScript apart, and taking the carpet from under their feet. It will remain the lingua france of the web until someone creates a product that is not beholden to JavaScript and not limited to what JavaScript can, or cannot, do. Dart will never win the battle for the browser. It is a product that many people want, but few actually need.

1 COMMENT

  1. I beg to differ. Have you used Typescript using a popular IDE like VSCode? It is slow hair tearing build especially with reload server memory hogging in the background. In the real world most of us dont have fast machines, laptops being the norm.

    I have worked on enterprise class mobile applications with Angular and its typescript implementation. Too much boilerplate and really unwieldy. Would prefer React + JS6(babel) any day. Typescript is the ugly baby born out of programming obesity not finesse. And it is not Javascript and me being a Java developer for long years would say is the unwanted child of both.

    And Dart is not just compiling to Javascript. It is running native nowadays. I think Javascript is a messy environment today. Too many choices and libraries to patch with. Choice in my opinion sometimes make the learning curve steeper for the average developer. The heavy dependency on tooling to bring out its typescript features is a typical reason of bloat.

    Like GO, dart is well thought out and compiles a lot faster with good essential tools. The Flutter API is brilliant. It is just a matter of time.
    In my long IT career of over 18 years, I have worked with Java, Javascript, Coffeescript, C#, C, GO, Python etc.. and I agree that languages designed with a focus and purpose would outlast many. Java had a clear focus and purpose at the time it came into being. C# to an extend had it. C/C++ will never die.

LEAVE A REPLY

Please enter your comment!
Please enter your name here