I started working as a professional programmer in the mid-90s when three-tiered design was all the rage: a data access layer, a business logic layer, and a presentation layer. It seems that nobody actually knew what “business logic” was even supposed to be, because I kept inheriting projects where all the middle tier did was hand data objects from the data layer to the UI. In theory this prevented the UI from being fundamentally bound to the data access, but all three layers were always written in Visual Basic which got kicked to the curb in a few years anyway.
Abstraction is not very compatible with concurrency, so as well as your your beautiful abstract API, you also need some ‘cut through the layers’ functions to return the underlying classes you need to synchronise on. Now you have a right mess that’s incredibly hard to understand, infuriating to debug, and impossible to refactor. Best you can do is put another layer of abstraction on top. Repeat every six months.
That’s just bad interface… When you design an API as if operations were independent, but they aren’t, you run into these issues.
Don’t add “cut through the lawyers” functions, fix your interface.
Yeah, well-designed abstraction can help enable more concurrency. That said, concurrency isn’t easy at any point once there’s shared data that needs to be written to during the process. Maybe it’s not so bad if your language has good concurrency support (like monitor classes and such that handle most of the locking behind the scenes), but even then, there’s subtle pitfalls that can add rare bugs or crashes to your program.

They look so painfully awkward, like a parent should be telling them to knock it off or something.
If you haven’t seen the vid it’s 500 levels of awkward cringe that’s hard to watch. Had to do with one of the MS version releases. They’re acting so awkward you can’t tell if they’re yakked out in coke or just that socially awkward. Full disclosure I’d be worse than them in that situation, just calling it like it is.
100% Ballmer is yakked out on coke.
At least one of them is a pedophile, so you’re probably not wrong
I recently started a new job. We use Java. There’s a class that does a few things based on explicit arguments only to decide whether to use an FTP or file output, and you supply all parameters yourself. A whole ass Rube Goldberg machine that could be replaced by a single line of Files.writeString.
Also, there’s a great video on YT “Stop writing classes” that is incredibly relevant.
This hits.
I stepped into a similar implementation. Took like 6 months and 10 people to support…
… changing the URL of the sftp server we connected to.
Junior devs not abstracting anything and now the app is unmaintainable
Exactly, have fun trying to get test coverage without dependency injection
with patch("some_file.requests.get", side_effect=SomeException("oh no")): result = func_using_requests()Though not every language makes mocking as easy, and multiple responsibilities in a single function can quickly get messy.
Oh I’m fully aware that python lets you cheat dependency injection with patch, its one of the many things python teaches developers to do wrong, which leads them to be unable to use any other language.
Is it any more maintainable with four levels of abstraction?
There’s a middle ground
2 layers of abstraction is the gold standard
Depends on the abstractions
Just got out of a discussion with a supplier. We can do what we needed by connecting to the database. Instead we have to go through four layers of different tech to arrive at the same point in the database otherwise it’s not compliant. That the supplier needs to sell a license for those layers is purely coincidental.
Obviously don’t have the full context, but rarely is it ever advisable to give third parties direct access to a database. There are many reasons for this, like, for example, the fact that doing so makes schema migrations practically impossible.
Always favor composition over inheritance if you can.
All absolute statements are false.
all of them?
Hell yeah, peertube has the video: https://peerate.fr/w/2ktPxQgBvDHdHWzogVTRvH
they really made their domain pee rate dot france huh
Lol that’s a nice catch
Edit: maybe “peer at eFrance” or something that makes more sense in french.
I don’t get it.
Does it have something to do with a certain place in France smelling of piss?
It’s… glorious.
Can confirm.
DEVELOPERS, DEVELOPERS, DEVELOPERS, DEVELOPERS!!!
COPILOTS, COPILOTS, COPILOTS, COPILOTS!!!
There, I updated it for you and I hate it.
you missed the best part
AAAAHHHHRRRRGGGHHHHHHHAAAAAAAA! sweat pouring off balmer as his body goes into shock from the pain
His mutant power is absorbing all of the cocaine in a 20 mi radius.
Why should I want simplicity? I want to make unnecessarily complex programs to gatekeep those pesky junior programmers.

That’s how you get that job security…
That’sthejoke.jpg
I think what they meant is that making it complex gets you job security
Abstraction layers is simplicity given a complex enough bottom.
I’ve been around long enough to question this kind of advice. It depends, in so many ways, on the goals, strategies, and platforms.
A complex bottom may have difficulty mating with a simple top
UwU
Me making my devs create a base exception for handling all exceptions that contain messages for display in the UI. Which has a parent base exception we use for all our exceptions which of course has Exception for it’s parent.
I hate our codebase but I’m so close to killing off 15 year old vb.net code. If the left me alone and I had the time I spent in meetings or 20 mins between meetings everything on our roadmap for the next year would have been done 2 years ago.
that image is from the whitest gif of all time
Americans love to make everything about skin color…
We tried to get a black dev onboard, but she refused adding 4 layers of abstraction.
Where did the gif come from
Microsoft conference back in (from memory) nineties with Steve Ballmer (sp?) dancing around stage screaming developers! Developers! Developers! since that’s what market domination is all a outif your are making an operating system.
Don’t link to or participate on Lemmy.ml, join the boycott today!
Cross-posted as part of ongoing boycotting/protest efforts to reduce the influence of .ml comms and indirectly, the instance as a whole, to help vitilize and drive non-.ml comms and make it an easier decision for other instance admins to defederate because of the behavior and attitudes of the .ml instance admins (see megathread link above)
Some highlights from the link:
“If you don’t support Russia then you just don’t understand geopolitics” ~dessalines, main .ml admin, head dev https://lemmy.world/post/27352415
“See! nobody died IN Tiananmen Square, just AROUND it, so it doesn’t count!!” ~ Davel, .ml admin https://lemmy.world/post/30673342
“NK is actually good and anything counter to that is Western propaganda!” ~dessalines, main .ml admin, head dev https://lemmy.world/post/31595035
Showing support for Ukraine on .ml is worthy of a site ban - dessalines, main .ml admin, head dev https://lemmy.world/post/32775563
Nutomics continued transphobia https://lemmy.world/post/29222558







