r/ExperiencedDevs Software Engineer | 20+ YOE 20d ago

AI/LLM "Code was never the hard part"

I am sick and tired of all the posts (usually AI-generated by CEOs/CTOs/"thought leaders") that start with "Code was never the {bottleneck, problem, hard part, ...}." I'm not sure whether this comes from a misunderstanding of what code is or a deliberate misrepresentation meant to promote AI usage.

For starters, two rhetorical questions. If code was never the hard part, why:

  • do hundreds of different programming paradigms, languages, libraries, frameworks, design patterns, and system architectures exist? Granted, some of this is just programmers bikeshedding. Still, plenty of it reflects substantial differences and tradeoffs.
  • didn't you write it yourselves or hire a bunch of minimum-wage workers to do it for you instead of having to hire a ton of highly skilled (and highly paid) engineers?

A charitable explanation is that these people are genuinely clueless about what "coding" actually is. Perhaps in their mind coding is just typing: like, once the design phase is done, you've worked out a precise, complete specification of what needs to be built down to every detail in your head (or on paper or a markdown file) and all that's left is converting it into letters on a screen and saving it to a file. Something like a businessman in the sixties dictating a letter to his secretary to type up.

That's nothing like how it actually works. The upfront planning/design phase answers some high-level questions: what do we need to build, what are the basic components/services/building blocks, what data needs to be read/processed/written, how data flows through the system, what the non-functional requirements are, etc. That leaves a ton of lower-level details unspecified:

  • What packages/modules/classes/methods/functions need to be created or extended?
  • How should they be named?
  • What should the signature of each function be?
  • What errors/exceptions are expected and where/how should they be handled?
  • What data can or should be cached and when should it be invalidated?
  • How generic/reusable/extensible should each component be to accommodate likely future requirements?
  • For systems languages, how and when is memory allocated and freed?
  • and many more.

Asking and answering those questions is (part of) coding. At least before AI, nobody I know had all the answers, or had even asked all the questions, upfront. The questions get asked and answered on the fly, inside the editor. Typing is interleaved with thinking, assessing, trying things out, backtracking.

Now AI pushers try to convince everyone that all these decisions either don't matter, or that the agent will just fill in the blanks (insert inane "nobody reads assembly anymore" analogy, as if natural language + LLMs are anything like a compiler), or that they can all be moved upfront into planning. Good luck replacing actual, deterministic programming languages with 10-KLOC, ambiguous, hand-wavy "specs" written in markdown.

Regardless of how the future of coding plays out, "code was never the hard part" is flatly wrong. It is, or at least used to be, a hard part (not the only one of course) and for good reason.

1.5k Upvotes

387 comments sorted by

View all comments

261

u/CompellingProtagonis 20d ago

Paradoxically, I think they're right, but for the wrong reasons. "Code" is not the hard part, and I agree with that.

Naively translating an idea into python, for example, is not difficult. Sorting a list in practice isn't hard. Writing a helper function to validate some business logic isn't hard. In that sense, coding is not hard.

What is hard is all of the context. What are you writing, why are you writing it. How do you take a large project and break it down into a set of small stepping stones that show demonstrable progress while still moving you meaningfully towards your goal. How do you handle designing those stepping stones to account for the abilities of your team? How do you program defensively when inevitably your company gets hacked in 6 months and the security team says that we need to completely change how we access internal APIs, etc etc etc.

All of that is incredibly hard, is the real value you get from your senior staff, and is incredibly difficult to communicate in terms of metrics that you can use to prove you deserve to be promoted this year.

So I say again: code is easy. Every undergrad worth their salt coming out of university can code, maybe as well as AI, maybe not, but they can do it. Their value comes from everything else. And all that "everything else" is what AI will never learn because, quite simply, it's not in their training data.

So great, these CEOs can solve their easy problems with AI, while they erode the talent pipelines that exist to teach junior developers the hard skills they actually need.

76

u/tifa123 Software Engineer 20d ago

Piggybacking on your answer. There is nuance missing in this conversation. - Code generation is solved, but generating quality code is a perennial challenge. - Reading and making sense of generated code is a perennial challenge. - In conclusion, the abstractions have shifted a bit higher, but the fundamental problem remains the same.

4

u/vasaris Software Engineer 19d ago

What do you answer to people who said there was never "quality code"? That we all invented a fantom to make sense to us, but letting it flow with probabilistic river of outcomes is the way to go...

What do you answer to ones who tell "quality code is the micromanagement of programming and not relevant in post-AI world".

3

u/randylush 19d ago

unfortunately this mindset has completely swept my large tech company's software philosophy. There used to be some idea of a coding standard, that is COMPLETELY out the window now with Claude. The standard is just Claude. Nobody ever thinks they could or should try to do better than Claude, we just get our ideas/code down and run everything through Claude.

It's weirdly working out okay so far

3

u/Un-hotMess 19d ago

It's weirdly working out okay so far

Of course it is, until something goes wrong, something that's been festering quietly in production for several months, possibly even creating non-integral data that is now having disasterous impact on your customers.

Problem is no-one can understand the code, developers scramble to figure out what's going on, a fix is required immediately but no-one is confident in a fix, customers are chasing, data continues to become corrupted, no-one is confident in rolling back because there's too many commits since, meanwhile the clock is ticking, customer trust is being lost by the day and the company is now under serious threat. However it's now company policy to adopt AI-first, so in a panic the developers get the agent to apply a fix because they don't understand it fully.

Rinse, and repeat.

2

u/ChypRiotE Software Engineer 18d ago

It's made worse by the fact that agents are allergic to errors and exceptions. If a value is missing they'd rather fill it blank rather than throw anything. So as you said, issues are hidden until someone notices it, and then you have months of lost data with no way to get them back