preston.so

Decoupled Drupal in Practice: The comprehensive guide to decoupled Drupal across the stack.

JavaScript is now the de facto language of experiences beyond the web

April 22, 2020

These days, it seems like JavaScript is everywhere. From the static sites and applications that now characterize large swaths of the web to the compile-to-native frameworks now popular at enterprise organizations well beyond their original creators, JavaScript is increasingly responsible for a growing proportion of web and mobile experiences. It’s also the key entry point for accessing the advantages of the distributed CMS. But JavaScript is seeing unprecedented adoption in areas where its then-unwelcome presence would have been pooh-poohed a mere decade ago.

From virtual reality and augmented reality to digital signage and conversational interfaces, and channels further afield that we have not yet seen surface, JavaScript is gradually overtaking other programming languages to become the lexicon not just of the web but also of digital experiences in general, irrespective of whether they rely on web technologies or not. Whether we like working with it or not, in the coming decades, we will be writing JavaScript to build experiences beyond the web.

In this article, I inspect some of the ways in which JavaScript has already eaten the web and how it is inching into areas that were formerly the unassailable jurisdiction of lower-level languages and ecosystems. In doing so, I argue that JavaScript is not just already the de facto lingo of the web; it is quickly becoming the de facto language of developers of wildly diverse experiences that bear little resemblance to one another.

JavaScript has eaten the web

We cannot discuss how JavaScript is now the language of digital experiences at large without first outlining how JavaScript’s ubiquity across the web and particular developments affording it greater power has galvanized its dissemination into other settings beyond the humble website or web application. In recent years, especially in the last seven to eight years, the amount of innovation in JavaScript and front-end development practices in general has been nothing short of stunning.

Today, the primary method of leveraging JavaScript for websites and web applications is through universal JavaScript, in which code leveraging the same JavaScript framework can be shared across client and server. This is only possible thanks to the advent of server-side JavaScript in the form of Node.js, a JavaScript runtime that assured JavaScript’s place in the pantheon of programming languages that successfully leapt beyond their original environments.

For the first time, a developer could write logic once that could execute on the server or in the browser, an outcome that led to a variety of trends in web development, including the third wave of the content management system (CMS): headless and decoupled CMS (including decoupled Drupal). And JavaScript’s unique position as the only universal language—no other language is capable of operating in both the browser and on a server—ensures its hegemony over other programming languages when it comes to promise and adoption. In short, JavaScript has already reinvented how web applications are built, and no one else is close to catching up.

JavaScript is overtaking the native landscape

Perhaps more fascinating than the paradigm shifts we are witnessing in the web development community are the ways in which JavaScript is overtaking and reinventing the native application landscape as well. Whereas in previous years, mobile developers would have needed to write an Android application in Java separately from an iOS application in Swift or Objective-C, today, developers have access to a variety of technologies that pave unexpected paths to native desktop and mobile applications.

Take React Native, for instance. React Native recently generated substantial discussion on Twitter about whether it is truly seeing the levels of adoption that suggest its primacy over foregoing traditional approaches to native application development. Though it is impossible to ascertain React Native’s penetration without clear data, React Native is indisputably one of the most popular ways to build native mobile and desktop applications. Electron, too, has gained considerable clout due to its favorable developer experience for desktop applications.

Perhaps one of the most compelling central ideas of React Native, however, is the notion that its ecosystem offers tools to preview React Native applications in the browser or using frameworks like Expo. React Native Web allows for React Native code to render into a browser setting in native HTML, CSS, and JavaScript, thus allowing easy determination of whether applications destined for other channels are adhering to design styles and predefined user interface design approaches.

Consider that in the early days of native application development, the only way a CMS architect could preview unpublished content in such applications would be through a heavy-duty emulator or by downloading a compiled APK or IPA file to their cell phone.

I believe that for this and the other reasons I have enumerated above, React Native and other JavaScript-driven approaches for compile-to-native applications will continue to win proponents over foregoing approaches like Swift and Java. A significant portion of this impetus to adopt React Native originates from the fact that it has never been easier to context-switch between the worlds of React and React Native. I believe it is a foregone conclusion that in the future, all native applications will be implemented in JavaScript.

JavaScript is entering the worlds of augmented and virtual reality

Also striking is the extent to which JavaScript now drives augmented (AR) and virtual reality (VR) experiences. While in the past, low-level languages to control Internet of Things (IoT) hardware made augmented and virtual reality interfaces prohibitively complex for web developers to implement, the introduction of WebVR several years ago portended a substantial shift in how developers can leverage technologies more familiar to them to build heavy-duty immersive experiences in AR and VR.

WebVR employed exclusively JavaScript to drive its browser-based application programming interface (API), and the new WebXR standard promulgated by the World Wide Web Consortium (W3C) takes this a step further with augmented reality capabilities. Now that the emphasis has shifted away from IoT devices and low-level screen manipulation to augmented and virtual reality experiences built into the browser, JavaScript is certain to become the primary conduit by which developers can build such browser-based AR and VR interfaces.

JavaScript is expanding the digital signage world

In a fashion analogous to the evolution of JavaScript in the AR and VR worlds, JavaScript has similarly infiltrated the digital signage landscape. Generally speaking, two schools of thought have emerged when it comes to implementing digital signage. Some vendors for the enterprise provide digital signage hosting services and a low-code tool to add and manipulate signs and their designs. Nowadays, however, digital signs are increasingly seen simply as additional renderings of web applications built in JavaScript.

One of the most compelling examples of JavaScript enabling digital signage comes from my former employer Acquia, which architected and implemented countdown clocks for the Metropolitan Transportation Authority, the operator of the New York City subway system. In this case, Drupal handles content editing and individual screen administration needs by providing a dashboard for editing news content (displayed in a news ticker at the bottom of the countdown clock) on a clock-by-clock basis at every station.

The countdown clocks display a web application built as a React application interpolated into a Drupal site in an example of progressively decoupled Drupal. (As a side note, I cover how to build React applications supported by Drupal content in my 2018 book Decoupled Drupal in Practice). In short, JavaScript is responsible for what is displayed on countdown clock screens on hundreds of station platforms across the transit network. Rather than leveraging lower-level approaches with many more points of failure, digital signage implementations are increasingly driven by screens that simply display a JavaScript application and call it a day.

JavaScript is infiltrating conversational interfaces

JavaScript’s inexorable march into lands formerly occupied by antiquated proprietary fossils has also begun to touch worlds beyond digital signage, namely the landscape of conversational interfaces. Consider, for instance, the fact that many chatbots and conversational forms on the web, including any that leverage SPACE10’s open-source Conversational Form, are today governed by JavaScript.

Though I’ve written extensively about voice interfaces in terms of information architecture, design, content strategy, usability testing, my work on Ask GeorgiaGov, affordance and wayfinding, and voice interface writing, I have purposefully avoided much discussion of the technologies underpinning voice interface design today. This is because the range of ways in which we implement voice interfaces has seen a wholesale revolution in the years since the launch of wildly popular voice assistants like Amazon Alexa and Google Home.

In the not-too-distant past, voice interfaces leveraging speech recognition and speech synthesis were driven by proprietary technology, challenging hardware implementations, and automatic speech recognition (ASR) technologies that may or may not have been open-sourced. Compare this situation to today, where browsers now natively have speech recognition and speech synthesis APIs that have led to an explosion of voice-enabled web interfaces like the voice-enabled search interface I directed for Nestlé Purina.

And now, with the explosion of other APIs maintained by companies like Amazon and Google for their respective voice interfaces, JavaScript developers can more readily integrate with technologies like Dialogflow and the Alexa Skills Kit to build net-new or serve prefabricated voice interfaces that are not only interpolated into existing applications but also act as standalone experiences in their own right. This is a unique reversal from a mere decade ago, when most JavaScript developers had nowhere to begin when it came to implementing voice interfaces in any context. It seems almost surreal to see JavaScript responsible for handling user utterances and intents and arbiting responses from servers so they successfully become synthesized speech—but this reality is already upon us.

What JavaScript’s ubiquity means for developers

In my perspective, Matt Mullenweg’s now-infamous assignment of homework for the WordPress community to “learn JavaScript, deeply,” was far more prescient than addressing the ways in which WordPress implementations are falling behind in the grand scheme of web experiences and announcing WordPress Calypso. Mullenweg’s request to WordPress contributors also prepares their CMS ecosystem for the next approaching horizon: that of evolving development practices for digital experiences writ large.

In the coming decade, I contend that we will see significant innovation in the spaces that I have outlined above when it comes to the vast array of experiences we must now power. But I also believe that we will see coalescence of those developer experiences into more superpowered frameworks—think of them as omnichannel frameworks or channel-agnostic JavaScript frameworks—that begin to encompass the wide range of compilation targets and delivery destinations found in digital experiences today and in the coming years. In short, I believe that in the next ten years we will see fewer distinct JavaScript frameworks on a per-technology basis and more omnibus frameworks that aim to capture all digital experience needs, not just web experiences.

React Native and Electron are just the beginning of web development’s slow but steady infiltration into non-web experiences. But in reality, it is merely representative of the fact that many of these non-web experiences are tapping into the fact that the web remains the most robust way to build digital experiences. Why not extend what the web offers to new environments such as digital signage, even if they are merely web application-powered digital signs?

The model that React Native and other compile-to-native frameworks have established shows no signs of slowing down, and I believe this model will proliferate across JavaScript as more and more developers are tasked with building experiences outside the web wheelhouse. And this demonstrates why the future of JavaScript is bright. It is no longer the programming language of the web—it is the programming language of digital transformation and digital experiences in general. As a language that was once pilloried and maligned among “serious” programmers, the elevation of JavaScript to its current vaunted position has been nothing short of stunning.

Conclusion

With the vast changes impacting the front-end development industry in never-before-seen ways, JavaScript has upended the previous assumptions developers made about implementing digital experiences not just for the web but also beyond the confines of the traditional website or web application. Now, JavaScript is blossoming beyond the web application and surfacing in new environments where we would scarcely have expected it to appear a mere decade ago. It is truly the de facto language of digital experiences.

We as developers need to prepare for JavaScript’s future as the primary programming language driving the digital experiences of the future. We need to be prepared for JavaScript frameworks that stretch the meaning of what it means to build an application not solely for the web but rather true, bonafide omnichannel applications or channel-agnostic applications that adapt gracefully to digital channels without the need to toggle between technologies. We can take the same ideas that undergirded the successes of React Native and Electron to reinvent extant technologies to become compile-to-everything frameworks with unimaginable flexibility.

It may not yet be just around the corner, but a future in which we can build a JavaScript application one time and deploy it successfully all at once as a website, web application, native application, AR or VR interface, digital sign, and voice interface is an exciting and motivating vision indeed.

Before you go ...

Subscribe to my monthly newsletter. No spam. Just musings and exclusive subscriber-only content about headless CMS, voice design, digital experiences, the JAMstack, and more.