JavaScript is notorious because it was written in ten days as a less-horrible alternative to a Microsoft future. Shipped well before it had a chance to mature, its runtime support is inconsistent and fragmented and its internal shortcomings are well documented.
But these issues have led to the emergence of something marvelous. The JavaScript of today has its problems, sure - but the obstacles it's had to overcome have each left their mark on the language's capabilities. Join me as we take a longer view of the language and tooling that defines what we do today on the front-end.
Things like AJAX, JQuery, Node/NPM and CoffeeScript all solved specific problems - but they also fundamentally changed the scope of what was possible. We reinvented the relationship between server and client, used abstraction to break external constraints, and learned to reach outside the browser and create our own tools. And once we started transpiling, everything changed forever!
We'll look at the way various trends have evolved to lead us to today's workflows:
- Working around browser shortcomings has given us a language decoupled from its runtime.
- Inverting control from HTML to JS has given us new application architectures.
- Treating the DOM as output turns web apps into pure functions.
From the simple clickhandlers of our ancestors to the bleeding edge stream processing of the next generation, this talk is an attempt to synthesize the history of JavaScript into a coherent narrative.
The biggest takeaway I hope to provide is context. The attendee to this talk will walk away with the sense that rendering interactive views to a browser is a hard problem that we've been incrementally solving for over twenty years. Using a build-step or installing tiny modules via NPM are not simply random abstractions that people started using for no reason, they're well-thought-out solutions to real challenges that are often unique to the front-end space.
Some of topics I will specifically touch on include (subject to change as I workshop the talk):
- AJAX, and how it changed the way we thought of front-end code.
- JQuery, and how we learned to abstract over browser fragmentation.
- Node/NPM, and how we broke out of the browser and wrote our own tools.
- Transpiled languages, including ES6, and how our language has been decoupled from our runtime.
- MVC frameworks and the inversion of control from HTML to JS.
- React and DOM as pure function of state. V matters, M&C are accidental complexity.
- Flux/Redux and the DOM as a sink in a dataflow architecture.
- RxJS/Cycle.js and the rise of the stream. DOM is a Strange Loop.
Most recently I've given versions of this talk to groups of folks at the Recurse Center who were learning modern front-end programming practices. "Here's some history that will make you appreciate React, Webpack and Babel" goes over way better than "Just make your config file look like mine and it'll work", and I got a lot of positive feedback around it. Humans love a narrative.
Though I've given variations of this talk to people I've worked with and mentored, I've never formally presented it at a conference and there are no videos available. However, if you want a sense of my personality and speaking capability, I'm an instructor at egghead.io and you can watch me present some stuff here: https://egghead.io/series/reduce-data-with-javascript