Ask HN: Riding the Roller Coaster of Development Tooling
There are so much happening these days that I feel I have to make an effort in order to not fall behind. And when I stumble upon a new tool, framework or platform or whatever which seems to make a difference, I think; this sounds real neat, let's check it out.
Then, when I try to figure out how, there it comes: "npm blah blah blah", and my heart just sinks. And I regret not being more vocal about how stupid this whole node thing was when it startet. And I wonder how many years we are going to have to deal with this stuff.
My question is this: Is it just me? Am I just being an old fart? Or do the HN community feel the same way?
27 comments
[ 9.6 ms ] story [ 80.4 ms ] threadI was contributing to node.js and v8's JIT back in 2010-2012 and I loved the NPM ecosystem at that time. To me, node.js was at its peak when express.js and koa.js were the fast way to write a backend. It took minutes to do the things that took hours or days in other programming languages.
But eversince the babel transpilation epidemic infected pretty much every package and bundler that doesn't want to deprecate legacy node.js versions, I kind of switched ecosystems.
I still think that typescript was a mistake, as it embraces language paradigms that come from C# and aren't fitting the ES language as well as e.g. the AS3/AS4 approaches back then. From a compiler perspective, it doesn't generate code that validates types, so it's useless for providing a typesafe API/SDK to third parties without the type definitions (in typescript).
I then kinda switched to Rust, as I liked the neon-bindings a lot for building better integrations with node.js at the time. But during the last years I feel that Rust gradually falls for the same feature fatigue, and I think that the upstream language maintainers should be more stubborn and take more time to think more thoroughly about feature/syntax implementations. A huge part of the Rust community is just for the sake of hype, though - and a lot of packages and bindings are just incomplete weekend-hacks.
And in some ways, I do have the same perspective. I also wish for more long term thinking, and it's not really the FOMO that bothers me, but more the, as you so eloquently put it, the "incomplete weekend-hacks" :)
There was a time when Hacker News linked to blog posts where people bragged about being first to solve just these sorts of problems. "Get Lucky" by Daft Punk on headphones, and hitting refresh a lot, and watching the new guy slowly figure out why ActiveRecord was hitting the backend 1,285 times to generate a ten item to-do list.
My suggestion is to just build what you want to build. If the thing you build is slow refactor it to be faster. If that thing misses some new cool kid feature then write the new feature. Never does tool fashion come up.
If you need to do large recursive operations Node will likely fail. If you need memory conservation for device specific operations Node is not the tool. If you want to go faster than a garbage collected language allows Node is not the tool.
I think the bigger problem with Node id that most people writing JavaScript struggle to write JavaScript.
I kind of figured that some people have to love it for it to be so popular, but that makes me curious about what other languages you have used and how you think they compare?
A lot of what gets announced and contributes to the illusion of constant change and "so much happening these days" amounts to fad and fashion, mostly short-lived and niche. You don't have to jump on every new shiny thing. Ask yourself, would you want to work for a company or client who constantly chased fads?
If some new thing gets traction, last for a few years, grows a developer base, and has successful products that use it, take a look and see if it fits your work. If it just "sounds real neat" maybe play with it but don't change course or waste a lot of time -- wait to see if it goes anywhere.
No one can learn all of the actually useful tools, languages, frameworks, much less the niche and ephemeral, so don't stress over it. Truly useful and innovative things prove themselves over time.
I focus my time and attention on tools that seem to have staying power, make me more effective delivering value, and that I can get paid for.
Specially with all this new AI stuff. I do want to try out things, but as soon as I see that npm command, it's kind of a dealbreaker for me. I just don't want to be bothered with that :)
I know it's kind of biased, I don't really have this issue with other stacks. I have preferences of course, but not the kind of dislike I have for JavaScript on the server-side.
Maybe I will miss out, who can tell. I have survived and stayed employable for over four decades. I get the most work from Unix/Linux and SQL expertise.
These days I find it very easy to recommend Astro for instance. It is batteries included enough you really don't need anything else.
Bun, deno and Hono are other projects that simplify a lot of the tooling by including most of what you need out of the box.
I'd argue that if you choose any of the options above web dev is easier than ever.
The socket implementation is broken too https://github.com/oven-sh/bun/issues/5627
During my first internship, we never changed the stack. When I ran in a problem, it was because either - we needed to bump major vers - it's too new of a feature and the library isn't actively maintained
In my current job, worst case it's just not a stable feature yet and we need to wait. Both situations need a workaround, but I get a lot more motivated if I get the feeling we're "on-edge" of a tool.
We know we have to start from scratch at some time, but we want to make it as future proof as possible - seeing what a huge codebase looks like after a decade of fixes :)
We now live in a world where complex sociological patterns dictate which tools get the most traction. It is easier for a tool to gain more popularity if it has company backing, if you are good at presenting, or if you make only small incremental changes. Technical merit is often less relevant. There is also "first-mover advantage" and countless other processes at play.
All this to say that, indeed, from a technological perspective, the world is totally crazy. But from a sociological perspective it is fascinating, and it is a great time to be alive.
If you don't like the Node ecosystem, then perhaps you may consider doing Java back-end development, as many people in that space adhere to the Lindy effect [1].
[1] https://en.wikipedia.org/wiki/Lindy_effect
Remember, there are frameworks/languages/... that everyone complains about; and frameworks/languages/... that nobody uses.
When the opportunity arises to sway your team towards new tooling, demo your choices.
There are new tools all the time, and it's worth it to not get too attached to any one stack. Letting yourself get too attached to one tool is a surefire way to box yourself in. Most of them do similar things, but in different ways. My thoughts on this are that the code is what matters, not the tooling.
Then there is Go + SQLite + HTMX + AlpineJS + <enter your current flavor of CSS library> and you are done. No complex build / transpile / whatever steps, just go build and done. Deploying consists of copying one binary and one database file to your server and you're done. Building and running stuff is easy and fun again. The JS community can go kick rocks...