acefael

on Software

Javascript and the Lisp Curse

09 Jan 2020

I was building a website the other day. I want a leaflet map, some GeoJSON layers, just POIs really, nothing fancy, and a bootstrap layout so the website can be used from any size of screen.

Target audience is the internet, my immediate social neighbourhood and a few colleagues perhaps. Some of them use a phone from Apple, and the website must work on them too, because, considering the finesse of these phones, when a website does not work there it must be the website, right?

My attempts on going with plain Emacs and a single-line http server became unwieldy rather quickly. There simply is no way around npm these days, and once you have npm, you want a Javascript build tool as well. This is where this story became interesting to me. At work I use meteor, but I miss the source maps, so I did a quick survey of Javascript build tools and found webpack, browserify, grunt, gulp, broccoli, brunch and parcel. Now that variety piqued my interest, so scrolling down the search results a little further took me to this gist and that other blog. It seems in Javascript everybody can have their own build system.

Once upon a time I read an article about the Lisp Curse. The Lisp Curse basically means, that the language is so powerful, that a main stream will never be reached on anything, forestalling widespread adoption of the language. And thats a shame really, because I think more people should use Lisp.

Which in turn made me think about the other things my little website needed, namely what to do about styling (we got CSS, Less, Sass, Scss, Stylus), and what module system to use (of which there are CommonJS, AMD, ES6, and overlays like System.js and UMD).

Considering the history of Javascript, and wherefrom it was influenced, it does not seem too far a stretch to me, to assume that the emergence of so many competing tools in such a short time are a symptom of the lisp curse. Javascript still thrives, for a lack of an alternative programming language in the browser. The downsides of high complexity and wasted effort still apply though.