> And I didn't even know about most of the ones in this post.
I think that's the answer to the question of "why do we have so many". It's a great thing you don't have to know about them. Go down a layer, and the people working there will think it's a great thing they don't have to worry about the abstraction below. Software development is, currently, a human task, so the human needs necessarily structure it.
Just because the number of abstraction layers can be reduced doesn't mean they need to be. You might gain back some CPU cycles, some milliseconds of execution time. But the tradeoffs of maintainability, legibility, and developer quality-of-life may, in the long run, reintroduce abstraction layers of some other type back into the overall SDLC.
The VIPER pattern is my biggest bug-bear (but older than I realised: I didn't see it until recently, and it still seems to only be described on the German Wikipedia and not the English one), which seems to come with more glue code than business logic.
I also get annoyed by HTTP 200 responses containing JSON which says "server error", and web pages which use Javascript to re-implement links, image loading, and scrolling — all of which are examples of a high-level abstraction reinventing (badly) something that was already present in a lower-level of abstraction.
Yep, it seems common for people who haven't actually experienced something from the past to wish it was still like then, not understanding why people decided the trade was worth it.
You might save some bytes but boy how annoying and complicated it can get.
I'm 40, and I've done things down to the level of wiring discrete transistors into logic gates, as well as C64 BASIC, C, […], ObjC, and Swift. Even did a module on OSes at university (20 years ago, so they were simpler).
I just… wrote my previous comment so badly everyone legitimately missed the point that was in my head.
Consider that part framing.
My problem with modern abstractions is the wheel keeps getting reinvented by people who don't know the lessons from the previous times it was invented, even when they're making their wheel out of other wheels — which is how I feel when I notice a website using javascript to implement <img> and <a href> tags or scroll regions whose contents can't be fully selected because it loads/unloads content dynamically 'for performance' because someone just assumed 10,000 lines of text in a browser would be slow without bothering to test it, or that I see HTTP servers returning status 200 while the body is JSON {"error": "server error"} or equivalent.
I could go on (also don't like VIPER) but this would turn a comment into a long blog post.
While I also don't like that web browsers are inner-OSes, can see how it happened from the second half of Zawinski's Law: Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can. - https://softwareengineering.stackexchange.com/questions/1502...
I think that's the answer to the question of "why do we have so many". It's a great thing you don't have to know about them. Go down a layer, and the people working there will think it's a great thing they don't have to worry about the abstraction below. Software development is, currently, a human task, so the human needs necessarily structure it.
I can't comment on web development...