This question has been on my mind a lot recently and after doing some research, I found a previous discussion on this topic [0]. However, I was wondering if it would be a good idea to ask it again (now that 6 years has passed) to gain some new insights from the community.
To be honest, I was expecting the rat of change to slow down or at least for the ecosystem to mature but this has not happened; in fact it seems like JS is moving in the _opposite_ direction with the sheer number of tools, frameworks, libraries and build packs that are being released daily at this point.
No other language has this problem to my knowledge, so I was wondering if you think this trend will ever stop? Will JavaSript ever evolve to a stable point like other languages (e.g Python, Ruby, Java,..) and if so, how do you envision this coming about?
This kind of reminds me of this tweet:
Backend devs: lol frontend devs love toolchain churn, how do you get anything done
Also Backend devs: Docker Vagrant Packer Kubernetes Linkerd Istio CloudFoundry gVisor kNative Firecracker Chaos Prometheus Ansible Juju Chef SaltStack Puppet CloudFormation Terraform Consul Vault
JS development is often tightly linked to graphic/UI/UX design and marketing in a way that's not so common in Python/Ruby/Go/Rust/Clojure/other language communities. JS developers tend to be quite good at building brands, making logos, and polishing marketing sites around their thing — because it's their job! They're usually also good at promoting things in their networks of sometimes high-profile designer/developer/DevRel types and the huge ecosystem of YouTube channels and podcasts linked to frontend.
This gives JS open source projects an elevated level of buzz relative to those from other programming language communities. Added to the sheer number of people working with JS, as a whole there are more loud things competing for attention in colourful ways, which gives the scene a feeling of constant newness and flux, for better and for worse.
Do what works, until it does not work. Then learn something new to make it work again, and work better.
If something is changing a lot, that's one sign of high capital investment. If you look at the greatest cities in the world, they're never "done". The ones that don't have high activity are usually dying or only serve one purpose ( tourism ). Likewise with languages.The Javascript ecosystem is the largest and most active in the world. If it were a city of developers it would probably be akin to Sao Paulo, NYC, or Shanghai.
> Will JavaSript ever evolve to a stable point like other languages (e.g Python)
The 1st post on the front page right now [1] is about a new "modern" scheduling library for Python. What's wrong with just using Celery, APScheduler, Huey or even cron? Why do we need a new scheduling library? Why are Python developers always reinventing the wheel? /s
A Senior frontend engineer at $FAANG I have been talking to recently is struggling with growing into a Staff engineer. They don't want to move away away from user-facing stuff. At the same time, the organization tends to recognize only broad, foundational, cross-team work as Staff-worthy. They are now at a junction: 1) Work on features and stay at current level and in a few years get the "you've been here long enough" promo 2) Build common set of libraries and tools that will be used across multiple teams and get the promo much sooner. Latter is much more aligned with organization's view of "Staff". Although many factors are at play, it's interesting to note that Platform/Infra teams in these companies often more top-heavy than say frontend teams, meaning they have more Staff+ people.
Combining this with what others have been mentioning (stack being approachable, and many people starting their careers in this space) and one can see how anyone with more than a few years of experience in the field is strongly incentivized to build guardrails, and libraries, and whatnot.
Being someone who started as a frontend dev 10 or so years ago and quickly transitioned to backend and finally infra, I will say that fundamental technical challenges on the frontend are little easier to comprehend than the ones in say backend / distributed systems / databases / infra. Combined with huge influx of people, it might just mean there's not enough true problems to solve, so we (re)invent some.
2/ Node.js has a barebone standard library for server purposes, in fact you can't parse a multi-part POST request without using a package or writing your own.
3/ while the browser has a big API surface, state management and working with the DOM is a big pain when writing UI, so some kind of helper is often needed.
It’s more helpful to compare JavaScript to other UI technologies, like Swift UI, Android, Java Swing (ew), and other lower level GUI frameworks. In this case, I think the Dev Ex/quality that JavaScript produces is quite high, and good the speed at which you can do cross platform and web development is immense. Hell, you can even share code between frontend and backend. Good luck doing that with another technology.
I will probably get flamed for saying this, but I also think backend is easy. Backends are typically not stateful, and therefore feel like functional programming. You send an input and get an output. Compare that to interactive UIs which need to act as a long lived lifecycle with various state, and it’s clear why frontends are more complex.
- React
- TypeScript
- GraphQL/State management
Nothing else was ever mentioned or investigated more closely.
I think most people would do well for themselves to dig deep on these. Get great at React, understand TypeScript deeply, understand data fetching and state management — you can very likely get great jobs just focused on these technologies.
You could chase every shiny new thing but you probably aren’t all that much more likely to get a job or get paid more at the moment.
JavaScript and the web is a massive, massive ecosystem with millions of developers. With an ecosystem that big, there's always going to be many opinionated ways to solve a given problem. It's easy and frictionless to release new tooling or frameworks for the web.
That being said, today's framework situation is relatively tame. In 2022, same as 2016, people by and large still use React, Vue, and Angular. There's a couple of upstarts with Svelte and whatnot, but the vast majority of tooling still pretty heavily weighted towards the big 3.
In JS, you basically have standard code that you can copy and paste in a Makefile to make things automatically.
Javascript and it's ecosystem is changing so rapidly for one simple reason: Javascript and it's ecosystem is easy.
You heard me correctly. Javascript despite it's eccentricities is a simple, easy to use language. HTML, CSS, JS is a simple (relatively) easy to get into stack.
This leaves an enormous pool of developers who are hungry to make their mark in the world, and with technical skills that frankly outpace the simple world of web development. So they start building abstractions. Abstractions are fun to build, prove the builders competency, and often do provide some benefit to their end user.
The story of Vue.js (and Vite) is more or less this (there's a documentary on YT, go watch it). They were working at Google on experimental web projects in vanilla JS. Decided they wanted to build things people actually use. Decided a view framework for JavaScript would leverage their skillset and be of use to the community. Had the technical ability to throw vanilla JS around with ease. From this, comes a framework.
Next, it works well on the serverside for how sloppy that language is and is the ONLY language that will work in the browser. Thats a huuuuge edge.
Futher, with npm and github, distributing js is free as in free beer. No one has a problem with free beer till it starts hurting.
Also, no one got famously sued or slapped with a huge bill for using javascript without someone's permission.
None of these is likely to change anytime soon. So my guess is it will keep evolving till it becomes boring and people move on, thats a decade or more away if I were to make a free, non-consequential, unsolicited speculation.
Now, js and its ecosystem are two different beasts.. The language itself is fairly hipster, but the frameworks and some of the people writing them are even more so, they like to move fast and break things, and to be honest, there should be corporal punishment for every dependency you pull via yarn or npm, and additional (if lesser punishments) for each dependency they pull.
Drop as much out of that ratrace you can and concentrate on writing your software.
There are a lot of new libraries, but almost nothing gets to the level of React / Redux / NextJS / Webpack. You only really have to respond to change when something big like that happens, which is like once per 10 years.
You can’t go wrong with Next.js, Vue is an equivalent alternative, and Angular sucks. Ignore the rest. It doesn’t matter and nobody outside of Twitter cares.
Same as 4y ago.
Compare that to other languages, where you need to open a terminal or install special software, figure out how to write commands, install these things called packages, get esoteric errors, etc.
That amount of work to write JS vs other languages is drastically different for new coders.
With this lower bar comes a larger user base. A larger user base leads to more innovation – for better or worse.
It's inevitable to see people reinventing the wheel as they learn, simplified tools targeted at niche users, different needs (high-scale engineers vs designers), etc.
I know engineering communities get exhausted by the library churn of the JS community, but I think it's a symptom of real success. A user base this large is going to create noise, but also produce real gems from time to time.
------
I write about engineering management at [Build the Stage](https://www.buildthestage.com).
* Real-time, graphics-intensive applications (d3, three.JS, etc.)
* Chrome extensions/PWAs
* Server-side code (NestJS, Express, etc.)
* Server-client-side-hybrid code (SSR)
* Single page apps (React, Svelte)
* Documentation or static site generation (Gatsby, etc.)
* Query language (Mongo)
Further you have a lot of personalities you're supporting: * Frontend devs
* Backend devs
* The complexity-embracing folks (React)
* The complexity-hiding folks (Svelte)
* Marketing teams who don't really want to be coding (Squarespace, jQuery, Alpine)
Even with all that, some tooling is going to be better at doing what it needs to than others. The tooling is all still very young, because we never settled on one right way to do it, probably because the package system in JS is so bananas. The bundlers/minifiers/packagers/transpilers all need to compete and come together still, it hasn't happened yet.
React for example, solved problems for folks at Facebook and is useful to the degree your problems are similar modulo the level of resources you have to learn, manage, and deploy it.
But the important thing to recognize is that JavaScript is two (or “JavaScript” means two) things.
It is a programming language and it is an API for XHTML documents — or rather a cloud of API’s that have grown beyond the DOM to servers, embedded devices, etc.
Though the programming language has changed it has only changed in the way programming languages change…actually better than most because it goes through a formal consensus based standards process.
The API side however, is in a constant ad hoc flux and generates a lot of noise around “the latest.”
Newness is not an important property of tools when it comes to problems solving.
It is important for making boring jobs more interesting…there’s much: a developer needs to build a website so they research the latest frameworks. Now they have two problems.
Good luck.
HN is a bit skewed towards new things because HN is full of startups, which are building products from scratch, so can relatively easily choose to use new tools and libraries to do it.
Much of the world still keeps rolling on with a few basic jQuery scripts or relatively mature stacks like Angular.
Yes there are lots of libraries and frameworks but as a language, everything feels quite steady. With each ES version, perhaps there are one or two new helpful methods but nothing massive.
New tools and frameworks are good, it pushes existing libraries and projects to stay current and shows continued innovation, but as lots of other people have said, you could be using the same stack from 5 years ago today and all the pieces to it would still be totally recognizable.
If you're doing web apps, I'd expect React, Redux, and React Router. Maybe you're still killing it with full on client side SPAs, or maybe there's some server side rendering and data fetching.
But the language is very stable and the main libraries and tools are as well. Just cause there's new stuff doesn't mean you have to use it.
So, consider Apple's development environment. It's changing all the time. For example, SwiftUI still isn't mature enough to replace UIKit, yet that isn't stopping Apple from focusing on it in all of its docs going forward. And when you're using Stack Overflow to answer questions like how to send a keyboard press programmatically, you will see anything from Objective-C code to older APIs in older Swift versions. And that's a constant source of confusion for beginners.
Client development just isn't that easy nor are we at a point where there is One True Solution that is settled. It's a domain of constant research and improvement.
So for casual onlooker, things are changing fast as “most popular” moves from one camp to another. While in reality, the camps themselves are quite stable, and progressing forward in a predictable fashion.
Sure there is a churn in bleeding edge camp(react), but that is because it is on bleeding edge, other camps do not have that churn, and real world does not have that level of churn
But this is an inevitable problem in the industry in general, you just have to keep up and learn when required.
New tools have to support old tooling. Want to build a new react competitor? Users should be able to use webpack, babel, esbuild, etc. Users should be able to use sass, less, etc. Each axis that has more options increases the effort to make something new.
I feel this is also the reason there is no rails-like JS framework today.
I mean between two very similar banks, the back office operation (SOP) must be very-very different, making it impossible for any toolings to emerge.
As opposed to frontend where it's clearly that there's button, label, text input, select, checkbox, list, etc.
Programmers love wheel reinventing and web has evolved to be forgiving enough that you can get away with it. If there's 10 ways that work really well, programmers will add 10 more.
Most other languages have some sort of steering committee that guides them in a certain direction, where decisions can be made through organized discussions and such. In the HTML/JS world, it's a free for all with each browser vendor unilaterally making lurches here and there, embracing/extending/extinguishing various parts of the DOM and CSS and JS for their own needs, competing with every other browser vendor all the time. In theory we have the W3C and WCAG, but in practice, Google just does what it wants, Apple tries to fight back, and everyone else just follows along.
Because of that, the DOM and CSS and JS etc. don't have a neat way to progress in an orderly fashion, and ECMAscript iteration is way too slow to keep up with the ever-changing needs of big companies with a ton of devs on hand.
These devs can't really just code in pure HTML and CSS for any remotely complex app, because the underlying system is so janky. So all these FE frameworks pop up to try to improve the developer experience, essentially "overloading" janky vanilla JS to a more featureful, easier to use language that includes typing, state management, routing, cache handling, etc. The JS built-ins (its "standard library", so to speak) are pretty weak and you need to fill it with a ton of third-party frameworks and modules to get that functionality if you don't want to keep reinventing the wheel yourself.
It'd be nice if React, etc. could backport their most useful features to vanilla JS/ECMAscript, but until and unless that happens, the frameworks are competing for developer mindshare the same way the browsers keep competing with user mindshare.
It's a free-for-all in the wild marketplace of software-that-ultimately-transpiles-to-HTML. It won't "mature" or "stabilize" until the needs themselves stabilize, and that's probably not going to happen for a while. The web and its needs are still constantly evolving, so the dev software keeps evolving alongside it.
FWIW, it's not so easy in other ecosystems either. Windows tried to shoehorn in WPF, UWP, Windows App SDK, etc... and how many apps end up just being a webpage wrapped in Electron instead? And Android has gone through how many breaking API changes in the last decade?
The last big thing happened to js was a typescript.
React from major version to version is less and less disruptive (in a good way) etc.
Yes there are still new fancy projects popping up like mushrooms. But only few survive in the long run (as in other languages).
In BE dev, unless you are working at scale, your primary business is to code business logic which also changes but doesnt require much tech churn.
Also, browsers usually tell you when stuff you use is deprecated.
I didn't do frontend development for years, then I got back to it with my old knowledge, ran it once through a browser and could simply modernize my browser API calls in one go.
This is the mindset of JavaScript community.
Unfortunately, this mindset is slowly infecting other communities.
find a good workflow[2], and build stuff. churn is fine, it’s either motivated by necessity or by fun. if it’s neither for you, avoid it. just build stuff.
people who work in JS grew up in the "move fast and break things" culture perpetuated by early FB and others.
a lot of these teams led by young people who don't have experience to make good long term judgement calls.
Every time I open Dev tools there is 20 new features, and look at the release notes for every minor FF and Chrome update....
And frankly because it’s still terrible so there is still so much room for improvement.
Release dates of the current frameworks:
- angular 2010
- react 2013
- vue 2014
- svelte 2016