TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Tell HN: Modern software engineering is ridiculous

47 pointsby grumblingdev8 months ago
My job would be so easy as long as I can debug and trace things.<p>But modern software engineering doesn&#x27;t give a shit about debugging.<p>There are just endless layers of abstraction, and glueing together 100s of packages of compiled or transpiled code. To debug anything properly I have compile all the intermediary packages and setup the full toolchains they need.<p>I&#x27;m just watching it for 20 years and its getting worse and worse.<p>New programming languages every few years and the debugging experience starts from scratch.<p>I just want to be able to easily trace code in a debugger with minimal abstraction.<p>Everything is so cobbled together and no one seems to get it.z<p>This obsession with the &quot;stack&quot; of things named like: bloop, blip, blaz...oh we&#x27;re moving to blap now its really great, I have to rewrite everything in it and now they have an annual conference and I found a job that let&#x27;s me write blap, and its venture funded.<p>The problem is no one has the right principles. It&#x27;s a fashion show and there is just so much money to cover all the inefficiencies of developers fetishizing over the latest crap.<p>Just let me debug things anywhere in the stack with ease!

13 comments

gregjor8 months ago
Yep. Ongoing problem for decades. And now with “AI” to make it more ridiculous. I look forward to retiring soon and never looking at code again.
评论 #41456122 未加载
评论 #41461583 未加载
DougN78 months ago
Amen! The funny thing is this sounds like a “get off my lawn!” rant, and yet it’s so true if you’ve been around long enough to have seen a few tech cycles. But this also only seems to matter if you are NOT in a “move fast and break stuff” environment.
评论 #41457069 未加载
scrapheap8 months ago
Ironically the more you strip out the unnecessary layers of abstractions and frameworks the less likely you are to need to use a debugger to trace code as once you know the bug exists you can just see the cause in the source code - bugs you haven&#x27;t encountered yet are still completely hidden though :D
AnimalMuppet8 months ago
Abstractions would be fine, if they were solid code. Code that I don&#x27;t have to write, that I don&#x27;t have to debug, that I don&#x27;t have to maintain, is <i>wonderful</i> - if it works.<p>The problem isn&#x27;t abstractions. The problem is that too many of the abstractions <i>don&#x27;t work</i> - they have bugs. (Yes, I know, all code has bugs. I even found a bug in the STL once. Still, that&#x27;s one bug I have seen in it in 30 years. There are other abstractions that are... less solid.)
评论 #41457092 未加载
M95D8 months ago
Everyone knows it, yet nobody would waste 5 min of their time writing a new function if he&#x2F;she can import it instead, along with another 50 dependencies.
bubblesnort8 months ago
On a personal anecdote, the spaghetti code problem has been thorougly fixed. It&#x27;s been replaced with much worse spaghetti microservices.
chrsw8 months ago
The market figured out it&#x27;s cheaper to hire more developers and pile on more crap than to make existing systems more observable.
评论 #41455862 未加载
theshrike798 months ago
I still yearn for the days where I could run the whole application in my IDE and step through it with a debugger line by line.<p>Or even just insert print(&quot;foo&quot;) like the barbarian I am.<p>Now I can&#x27;t attache the IDE because everything is 50 microservices. I can&#x27;t print-debug because the logging system requires fully formed JSON output and it&#x27;s clustered and distributed and billed by line and I need to use a Web UI to see my own application&#x27;s logs ffs.<p>Get off my lawn.
ryandvm8 months ago
Couldn&#x27;t agree more. And you didn&#x27;t even touch on the pain and misery caused when an amateur hour shop decides to do micro services like big tech.
drewcoo8 months ago
This screed reads like someone who doesn&#x27;t do testing. Or who only does end-to-end tests.<p>With both decent testing and decent monitoring&#x2F;logging&#x2F;o11y at each layer, no one should ever have to debug the whole stack at once and can instead focus on the layer with the problem.<p>I wish we could put the old days of having a tightly-coupled stack of untested cruft behind us.
评论 #41459417 未加载
tacostakohashi8 months ago
I find it a bit amusing to think of the evolution of things, in basic terms... within a program, we have these things called &quot;functions&quot;, which have &quot;prototypes&quot; &#x2F; definitions that define the number and types of arguments (using the C terminology).<p>We didn&#x27;t always have those things... in the bad old days, there were just &quot;subroutines&quot; and gotos (without a call stack), and functions in C (pre-C89) with no prototype that you could just call with whatever arguments you felt like... and if the caller and callee agreed on the types, great, if not... maybe it worked, or maybe some crash, who knows, depending on the nature of the argument mismatch (too many vs too few, the types involved, etc).<p>So, prototypes and functions with a stack were invented to solve a problem, and meant that if the program compiled and linked, then at least all the callers and callees agreed on the prototypes and argument types, and things might work, and if not, then there would be a core dump or a stack trace where we could look at the stack and that would tell us quite a lot about the system&#x2F;program execution state.<p>Fast forward to today... and now we throw a lot of those inventions out the window and use &quot;microservices&quot; or &quot;REST&quot; or JSON etc, where there is no prototype that the caller and callee agree on, it&#x27;s all just unstructured or semi-structured (like the bad old, pre-prototype days in C...), and if the caller and callee don&#x27;t agree on some vague notion of what the parameters are then chaos ensues, and there is no one place to look at to debug (like a core or stack) because the system state is now spread across many machines and so there are lots of logs to correlate (at best).<p>A lot of people even describe this as a selling point... &quot;yeah, it&#x27;s great that we have microservices and loose coupling so we can upgrade the different parts separately!&quot;. If a strict schema is in use, like (like xsd, wsdl, protobufs, etc), then it can almost work, because so long as everybody agrees on the schema then sure, the individual parts can be upgraded separately. Oh, but... then how to we change the schema? Oops, now everything needs to be re-released all at once and we&#x27;re back to where we started.<p>If the schema&#x2F;protocol never changes, then it can work... and indeed that&#x27;s what IP, HTTP, etc., are, they are set in stone for decades and then the clients&#x2F;servers can change and that&#x27;s fine, but if you have an elaborate distributed system with either a loose schema, or a strict (and therefore necessarily changing often) schema, which are the popular choices, then you&#x27;re screwed.<p>At least in the classical analogy with C&#x2F;C++&#x2F;Java whatever, we admit to ourselves that if the function prototypes, arguments, etc. need to change, then that&#x27;s a recompile, relink, and restart the whole system, not just some parts of it.
评论 #41455728 未加载
nathanaldensr8 months ago
Stop noticing things!
Brian_K_White8 months ago
Fact brother.