Is Coding the Hard Part? Debating the Value of Programming in the AI Era

The software development industry is currently facing a fundamental identity crisis driven by the rise of Large Language Models (LLMs). A common narrative has emerged suggesting that "code was never the hard part"—implying that the true difficulty of software engineering lies in product discovery, requirements gathering, and stakeholder management, while the actual act of writing code is trivial.

This claim is highly contentious. For many, it is an insult to the craft of programming; for others, it is a necessary distinction between the act of typing syntax and the act of engineering a complex system.

The Argument for Coding as a Difficult Craft

Writing high-quality, reliable, and maintainable code is a skilled craft that requires deep expertise. The argument that coding is "easy" is contradicted by several industry realities:

  • Economic Value: The historical high demand and significant salaries for "10x developers" suggest that the ability to implement complex logic is a scarce and valuable skill.
  • Technical Depth: The existence of foundational texts like The Art of Computer Programming and Structure and Interpretation of Computer Programs (SICP) indicates a level of theoretical and practical complexity that far exceeds "trivial" work.
  • System Stability: The prevalence of bugs and the difficulty of maintaining legacy systems prove that implementation is rarely straightforward.
  • The "Genius" Factor: The industry continues to recognize individuals like John Carmack and Fabrice Bellard not for their ability to talk to stakeholders, but for their extraordinary technical implementation skills.

The Counter-Argument: Coding vs. Engineering

Many experienced developers argue that the phrase "code was never the hard part" is a matter of definition. They distinguish between "coding" (the act of translating a known solution into syntax) and "programming/engineering" (the act of solving the problem).

Coding as Translation

Some argue that once a problem is fully decomposed into a technical specification, the act of typing the code is the easiest part of the process. In this view, coding is akin to the final "cut" in a surgical procedure—the essential final step, but one that follows 99% of the critical decision-making.

The Complexity of the "Non-Code" Work

From an organizational perspective, the bottlenecks are rarely the lines of code themselves, but rather:

  • Requirement Ambiguity: Understanding what a customer actually needs versus what they say they want.
  • Architecture and Modeling: Designing systems that can evolve without collapsing under their own complexity.
  • Distributed Systems Challenges: Managing CAP theorem trade-offs, clock synchronization, and exactly-once delivery.
  • Organizational Alignment: Coordinating multiple teams and stakeholders to agree on a direction.

"Writing code is not hard. Writing correct code is. Knowing what is correct in a setting with paying customers generally involves interacting with those customers."

The Impact of AI on the Developer's Role

LLMs are accelerating the shift in how developers spend their time. While AI can churn out thousands of lines of code, it introduces new complexities that shift the "hard part" further up the stack.

From Writing to Verifying

Developers are increasingly moving from being authors of code to being editors and architects. The challenge is no longer writing the function, but engineering the harnesses, architecture specifications, and verification systems to ensure AI-generated code doesn't introduce security vulnerabilities or architectural drift.

The Risk of "Vibe Coding"

There is a growing concern regarding "vibe coding," where developers use AI to generate functioning-looking code without understanding the underlying mechanics. This leads to a fragile codebase where the developer cannot explain how data flows through the system or why a specific implementation was chosen.

How to Thrive in the Tectonic Shift

To remain relevant, developers must balance technical depth with a broader understanding of the business and user experience.

For Senior Developers

Deepening technical expertise is no longer sufficient. Seniors should invest in adjacent fields: user experience (UX), customer interview techniques, and business strategy. Understanding why a feature is being built is as critical as knowing how to build it.

For Junior Developers

Despite the automation of syntax, foundational knowledge remains critical. Understanding pointers, memory hierarchy, network protocols (HTTP), and data structures provides the mental model necessary to debug AI-generated hallucinations and design efficient systems.

The Constant Variables

Regardless of the toolset, certain truths about software remain unchanged:

  • Entropy: Bit-rot and software complexity will always increase.
  • User Ambiguity: Users will continue to struggle to articulate their needs.
  • Maintenance: Software will always require human judgment for long-term maintenance and evolution.

Ultimately, the goal is to avoid "outsourcing judgment, empathy, and taste to AI." The most successful developers will be those who can bridge the gap between a deep understanding of the system and a deep understanding of the user's problem.

Sources

Related