The Booming JavaScript Ecosystem

Of all modern languages, JavaScript has one of the most fascinating backstories.

During the early days of the web, Netscape hired Brendan Eich to create a prototype “glue language” that could be used in conjunction with HTML to increase the interactivity of webpages. The prototype was thrown together in just 10 days and named JavaScript. However, JavaScript owes very little to Java—it is often said that JavaScript is to Java as hamburger is to ham.

The initial version of JavaScript was significantly flawed, and multiple incompatible versions were implemented in the various web browsers of the late 1990s. Nevertheless, JavaScript, together with CSS and HTML, became the cornerstone of client-side web development.

During the 2000s, repeated attempts to standardize and evolve the language—now formally known as ECMAScript—largely succeeded, and discrepancies between various browser implementations diminished.

However, it wasn’t until the mid-2000s that JavaScript became pivotal to the modern web experience. The “AJAX” programming pattern—pioneered on web products such as Google Maps and Gmail—showed how a richer web experience could be obtained by using JavaScript to perform asynchronous communication with the back end and dynamically generate HTML in response.

Shortly after the AJAX revolution, JavaScript escaped from the browser in the form of an application server platform based on JavaScript—Node.js—and databases such as MongoDB and CouchDB, which used JavaScript as their native query language emerged. It became possible to write complete multi-tier applications in JavaScript alone.

However, JavaScript programming remained problematic—especially on the server side—for a variety of reasons.

Almost uniquely in modern programming languages, JavaScript has a non-blocking asynchronous event model. In other programming languages, if you perform an operation that blocks on a result—an IO for instance—your program will wait for the operation to complete. However, JavaScript will submit the IO and move onto the next line of code while the IO continues in the background. It’s up to the programmer to implement a callback mechanism to deal with the blocking condition when it resolves. Writing reliable code in such an asynchronous fashion has caused a lot of developers much heartache.

JavaScript is also criticized for its security, performance, and loose typing when compared with other languages such as Java and Go.

JavaScript development has been accelerated by the release of a number of powerful JavaScript development frameworks. AngularJS was developed in house within Google in 2009 for internal projects. It rapidly became the de-facto standard for JavaScript development within Google and within the broader JavaScript community.  AngularJS was completely rewritten and the subsequent version—named simply Angular or Angular 2.0—aims in particular to address performance issues encountered with Angular 1.0. React is a JavaScript framework developed at Facebook. It has some similarities to Angular, but is organized as a set of libraries rather than a controlling framework. It has been gaining in popularity over Angular in recent years.

Vue.JS is an attempt to take the best features from Angular and React in a lightweight framework. It’s highly regarded, though less mature, and lacks the heavy-duty sponsorship of a Facebook or Google.

The Electron packaging framework allows a JavaScript application to be distributed as a standalone desktop application. An electron app includes an embedded Chromium (open source Chrome) browser and Node.js server. The electron binary for each OS provides OS services such as file handling.

Using Electron, it’s possible for an application to have a desktop client written in JavaScript which provides identical functionality on all major operating systems and on the web. Electron is the basis for many popular applications, including Slack, Microsoft VSCode, and GitHub’s Atom editor.

The ecosystem supporting JavaScript development is now incredibly strong. JavaScript is the basis for virtually all rich web experience and it’s possible to build significant applications using nothing but the JavaScript language. Not a bad outcome for a prototype language originally developed in 10 days!