An Open Letter to ECMA

Richard Kenneth Eng
JavaScript Non Grata
4 min readFeb 9, 2016

Dear ECMA,

For years, you’ve been trying to improve the JavaScript language, but you’ve not had the cojones to make breaking changes to it. You keep adding new features, but you won’t remove any of the old ones, such as automatic semicolon insertion or loose typing and aggressive coercions, that make JavaScript one of the worst programming languages on the planet. You won’t fix the insane semantics (the WATs and the WTFs) that pervade the language. Your “improvements” have amounted to putting lipstick on a pig.

(Leaving problematic features in and asking people to use strict mode is a chicken shit move. Since strict mode is optional, these features will still be used in a variety of situations. I have programmed in many languages, but I have never — EVER! — had to specify anything like a strict mode. The languages are there in all their native glory, and there’s no need to exclude anything. Why is JavaScript different?)

I understand your reluctance to make breaking changes; they would break the Internet! They would cause countless thousands of websites to stop working. They would cost billions of dollars to repair those websites. But foisting JavaScript’s sick, twisted philosophy on the rest of us is inhumane.

For example, the philosophy behind JavaScript’s loose typing and freewheeling coercions is that the language obligingly tries to guess what your programming intentions are. What??? Are you kidding me? I don’t want a programming language guessing what I want and leaving me to clean up after it when it guesses wrong. This goes against every fibre of my programmer being over the past 30+ years.

Another example of the sick, twisted philosophy is this: Add stupid features to the language. Then create a tool like JSLint to help you avoid those stupid features. On top of all that, don’t bother to fix the awful, inconsistent semantics of the language; just leave the programmers dangling. Personally, I have never used another language that does this. Gosh, I wonder why.

Given that so much of the Internet relies on JavaScript, given that JavaScript is the “native” language in all web browsers, it is impossible to extricate ourselves from this abomination. We must learn to live with it. However, is it asking too much for ECMA to stop encouraging people to use this pathological language? Can you simply make JavaScript a better “assembly language” to which other better languages can transpile? Transpiling to JS is already a very common practice. ECMA’s role should be to help do this more efficiently, not spur people to directly program in it for both front-end and back-end (server) applications.

There’s really no practical rationale to use JavaScript directly. Having a common language for both the browser and server-side is hardly a benefit. Programmers generally learn and use multiple languages anyway; they use the best tool for the job. On the server, that best tool is certainly not JavaScript. I would recommend Go or Dart or Scala or many other alternatives.

On the front end, the only rationalization for using JavaScript is that it’s conveniently there in all web browsers. This is a good reason??? Are you serious?

The claim that JavaScript is easy to learn and easy to use for beginners is another stupid canard. It’s easy to use, except when it’s not. Not when you face crazy semantics. Not when the language frequently trips you up syntactically. Besides, JavaScript is not the only language that is easy to pick up. So is Python and Go and Smalltalk and Ruby and Lua. I use Amber Smalltalk for web development and it’s a joy.

So why do we want to use JavaScript again?

Please, ECMA, take a braver stance and do the right thing. Leave JavaScript where it belongs, as a transpiler target. Stop encouraging its direct use. For God’s sake, grow a pair.

P.S. — I just learned that the language spec for ECMAScript 2017 (aka ES8) is 885 pages long. By comparison, the language spec for ES6 was 545 pages, ES5.1 245 pages and ES3 180 pages. WTF.

What the hell are you doing??? You’ve turned what was originally a lean, mean scripting language for web browsers into a f*cking behemoth of complexity. Are you trying to rival C++ or D or Rust? I shudder to think how big ES9 and ES10 will be.

In the name of all that is Holy, please stop this nonsense!

--

--