Infinitely Fallible

The Joy of Programming

I want to start by saying that no AI was involved in writing this post.

Programming has undergone a radical shift in the last few years. We now have tools capable of impressive coding tasks. These tools (LLMs) can generate code faster than any human and possess certain superhuman capabilities.

If the goal of a professional programmer is to deliver maximum business value through software, then consider this: if Programmer A doesn't use LLMs and Programmer B does (completing the work in half the time) shouldn't we all strive to be Programmer B?

Of course, it's not that simple. LLMs hallucinate and make mistakes. They lack the full business context a human programmer possesses. Therefore, their output must always be reviewed by a person. In practice, I've built fairly complex systems using LLMs to generate most of the code. This raises the questions for us as programmers: Where do we fit in now? What are the skills of the future?

A tension exists between the desire to maintain a deep, hands-on skillset and the pressure to quickly deliver working software. Where is the balance? Personally, I entered this field because I enjoy sitting down, thinking through, and sometimes struggling with complicated problems. Is that process now antiquated?

On the other hand, we still need deep knowledge to review LLM-generated code effectively. To be clear, LLMs perform poorly when given vague, broad tasks. We must know how to break down problems into precise components. I’ve always valued the journey of building skill as a programmer. But if an LLM can produce working code faster, where does that leave me?

In practice, a significant portion of software engineering is what I’d classify as "boring" work: boilerplate code, writing exhaustive test cases, etc. While this work has value, how much of it should a programmer do manually? This tension isn't going away.

We must be responsible users of LLMs. We cannot allow our codebases to be filled with AI-generated slop, and we need to write/generate code in a way that remains easy for humans to review. This is a challenge, as LLMs can produce so much code so quickly.

Anyway, I still deeply love programming. I often find great joy in working with a simple text editor, without any LLM autocomplete. But for professional work, where delivering valuable software quickly is the priority, using an LLM has become an essential part of my process.