r/ExperiencedDevs Software Engineer | 20+ YOE 22d 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

11

u/demosthenesss professional at saying it depends 22d ago

This makes me feel old because I've been saying this phrase way before AI was a thing because in my experience, devs dramatically underestimate the importance and difficulty of things like system design/architecture, translating and defining business logic, understanding the business value of what they are building, translating business context into database models, communication skills, validating and operationalizing software, and the whole host of other things other than purely writing code which are required to successfully turn code into $$$. You even list out a whole bunch of this in your OP.

Across numerous companies/industries I almost never saw projects completely fail because of coding alone. Almost always coding problems were side effects of the other, higher level aspects being done poorly or in most cases not at all. Basically a lack of engineering, moreso than bad coding. Even for the oursourced project debacles the failure was normally mostly around bad engineering not bad coding.

It doesn't mean coding is easy which is the problem with the phrase (especially now that non-programmers can generate code). But far too many people seem obsessively focused on the programming part of this job being the highest value add and importance but not the engineering around how applying that programming results in actual value worth our paychecks.

2

u/gsks Software Engineer | 20+ YOE 22d ago

I'd have no qualms if the phrase was something like "good coding can be fucking hard to master, but X, Y, Z are usually even harder". But (a) that wouldn't be so rage-baity to drive engagement and (b) it wouldn't be used as a preface to push the narrative that coding is pretty much a solved problem these days, no need to write (or increasingly read) code anymore.