diff --git a/www/content/essays/hypermedia-on-whatever-youd-like.md b/www/content/essays/hypermedia-on-whatever-youd-like.md new file mode 100644 index 00000000..26ab651e --- /dev/null +++ b/www/content/essays/hypermedia-on-whatever-youd-like.md @@ -0,0 +1,160 @@ ++++ +title = "Hypermedia On Whatever you'd Like" +date = 2023-05-11 +[taxonomies] +tag = ["posts"] ++++ + +> The one big remaining (advantage of MPAs) is (server side programming) language choice. If you're already part of the +> anti-JavaScript resistance, then nothing I say in the rest of this talk is going to matter that much. +> +> But, I'm going to get into this later: that ship might have sailed... +> +> Rich Harris - [Have SPA's Ruined The Web?](https://youtubetranscript.com/?v=860d8usGC0o&t=440) + +A concept we like to talk about is "The HOWL Stack". HOWL stands for _Hypermedia On Whatever you'd Like_. + +This is a joke-but-not-really [software stack](https://en.wikipedia.org/wiki/Solution_stack), and a reference to more +well known stacks like [The LAMP Stack](https://en.wikipedia.org/wiki/LAMP_%28software_bundle%29) +or [The MEAN Stack](https://en.wikipedia.org/wiki/MEAN_(solution_stack)). + +The TLDR of The HOWL Stack is this: when you use a [hypermedia-driven approach](/essays/hypermedia-driven-applications) +for your web application, you free yourself up to choose _whatever_ server-side technology best fits your problem and +your own technical tastes. + +## Feeling The JavaScript Pressure + +If you decide to use an SPA framework for your web application you will, naturally, have a large front-end codebase +that is written in JavaScript. + +Given that, the following question inevitably will come up: + +> "Well, why aren't we doing the back-end in JavaScript too?" + +This is a reasonable question to ask and there are a lot of advantages to adopting the same programming language on both +sides of the wire: + +* You can share application logic between the two code-bases. A good example here is validation logic. +* You can share data structures between the two code-bases. +* You can build up expertise in a single language, JavaScript, making it easier for developers to work in various parts + of your application. +* You can reuse the build system & dependency management knowledge you've acquired for the front end + +This _pressure_ to adopt JavaScript will only grow as your investment in the JavaScript front end ecosystem grows. + +Furthermore, JavaScript has improved dramatically in the last five years and there are now multiple excellent +server-side runtimes for executing it. Many of the older arguments about the messiness of the language can be +waved off as preventable via linting, developer discipline, and so forth. + +JavaScript is the dominant language among the web development thought leaders and there are massive numbers of tutorials, +code camps, etc. that strongly emphasize the language. Nothing succeeds like success, and JavaScript (as well as React) +have succeeded. + +Let's call the result of this _The JavaScript Pressure_ and acknowledge that nearly every developer working with the +web feels it at least to some extent. + +## Hypermedia: Our Only Hope + +What hope do non-JavaScript developers have in web development? + +Well, there is one older technology sitting there in the browser alongside JavaScript: _hypermedia_. + +Browsers offer excellent HTML support (and the related Document Object Model, or DOM). In fact, even if you are using an +SPA framework, you will be working with that hypermedia infrastructure in some form (via JSX templates, for example) if +only to create UIs that a browser can understand. + +So you are going to be using HTML or the related DOM APIs in some manner in your web application. + +Well, what if we made HTML a more powerful hypermedia? + +That's the idea of [htmx](/), which makes it possible to implement [common modern web application patterns](/examples) +using the hypermedia approach. This closes the UX gap between traditional MPAs and SPAs, making taking the hypermedia +route feasible for a much larger set of web applications. + +Once you adopt this hypermedia approach (and remember, you are going to be using hypermedia infrastructure _anyway_, +so why not leverage it as much as possible?) a surprising side effect occurs: + +Suddenly, the advantage of server-side language choice that Harris attributed to MPAs is _back on the table_. + +If your application's front end is mainly written in terms of HTML, maybe with a bit of client-side scripting, +and with no large JavaScript code-base, you've suddenly dramatically diminished (or entirely eliminated) The JavaScript +Pressure on the back end. + +You can now make your server-side language (and framework) choice based on other considerations: technical, aesthetic or +otherwise: + +* Perhaps you are working in AI and want to use a Lisp variant for your project +* Perhaps you are working in big data and want to use Python +* Perhaps you know Django really well and love the batteries-included approach it takes +* Perhaps you prefer Flask and the stripped-down approach it takes +* Perhaps you like the raw, close-to-the-HTML feel of PHP +* Perhaps you have an existing Java codebase that needs some sprucing up +* Perhaps you are learning Cobol, [and want to use htmx to make a nice front end for it](https://twitter.com/htmx_org/status/1656381761188954113). +* Perhaps you just really like Rust, Ocaml, Kotlin, Haskell, .NET, Clojure, Ada, ColdFusion, Ruby... whatever! + +These are all perfectly reasonable technical, philosophical and aesthetic perspectives. + +And, by adopting hypermedia as your primary front-end technology, you pursue any of these goals without a bicameral +code-base. Hypermedia doesn't care what you use to produce it: you can use hypermedia on whatever you'd like. + +## An Open Web for Everyone + +And when we say "whatever", we really mean it. + +Here is a screenshot of the [htmx discord](/discord)'s HOWL subsection recently: + +