Skip to main content

Every attempt at programming-for-non-programmers seems to miss this fundamental distinction: programming isn’t about writing code, it’s about understanding problems and their solutions. The speed of your keyboard has never been the constraint, and the syntax of the language is only a constraint when using an unfamiliar language; as in natural language, you stop paying attention to it after a while and just focus on the semantic meaning. From NoCode and LowCode to LLMs, the thinking has been the same: programmers don’t really do anything but write code, and with the right tools anyone can do that. Only that’s wrong. Incorrect. False.

The LLMephant in the room

A lot of people are now producing code with LLMs. Usually people don’t read the code and no human ever reviews it. Sometimes it’s created by people who don’t even know how to read or review it. Even when people are careful to review every line, they’re still left with slop all over their codebase.

Like every programmer, I’ve interacted with my fair share of bad code (written by humans or otherwise) and I can spot a code smell from quite a distance. Recently I looked into a repository for a tool that I thought might be useful. The author had a good reputation. I knew it was partially LLM-generated but it solved a problem that I had, so I read some of the code. The first file I opened had at least 4 repeated checks for the same min/max parameters, in 4 different functions, each subtly different enough in order and convention that they can’t just be copy-pasted. It also contained a lot of magic constants. To a non-programmer this might seem trivial, but this is the difference between code that’s riddled with bugs and code with only a few (no one knows how to write completely bug-free code). I think anyone can appreciate that when software has a bug you want someone to know how to fix it. And to do that they need to understand it, and to do that someone needs to actually read the code.

So are LLMs bad? Not necessarily, although I have to question your security practices if you’re giving a company like OpenAI or Anthropic the ability to run commands on your computer. But say you have a high-end GPU and a good local model, where you’re not sending any of your prompts or code over the network and you have it locked down so it can’t edit any files outside of your code repo and can’t make network requests. In that case, should you use an LLM?

Users don’t care, just make it work

We have programs because they solve problems; no one actually cares what language your website is written in. They care about how fast it loads, how good it looks, and how intuitive it is to use. So can you make something better with LLMs than without? Sometimes; it depends; it’s complicated.

As a starting point or a survey group it can be a great tool; Generative AIs are trained on user posts, images, and tags and they know what users think looks cool. For now at least, an LLM isn’t great at writing nontrivial code, but what about reviewing code? It’s not fun to investigate a hallucinated bug, but catching a real bug has quantifiable value. That’s the case with most tasks: there’s some threshold where GenAI becomes a useful tool, but its output can never be relied upon in isolation.

At the end of the day, if your software works well and looks good, users will come to love it. If it crashes and glitches, users will stop using it, or if you have a monopoly, users will start to hate it.

But what about the time you invest? LLMs save a lot of time on projects, right? Well users don’t care about that either, actually; whether your service took 1 day to build or 1 month or 6 months doesn’t matter to anyone using it. They need it for something, it does that thing, that’s as much as they intend to think about it. But they DO care that it’s good and reliable. If there’s a bug, can you fix it? Did you stress-test it? Did you secure it?

On constraints, and 90% of everything being garbage

When you have only finite time and money, you have to choose where to spend your limited resources. That means that to work on something, you have to believe there will be a long-term payoff for your hard work. It also means that it’s better to work smarter, not harder. If you can pay an upfront cost that saves you in the long term, then you should do that. Sisyphus would have been better off if he stopped rolling the boulder for a day and chiseled some wedges to stop it from falling.

Most of what’s created isn’t very good. By definition only a small amount of things can be “very good”, and thus everything else must not be. If very good translates to the top 10%, then 90% of everything doesn’t make the cut.

When a tool like Generative AI comes out, it increases the amount of things we can make, if we choose to. But remember, 90% of that isn’t worth making, and no amount of Generative AI will fix that. The humans asking for things to be generated are mostly asking for junk, and they’re getting it.

Should you be using Generative AI such as LLMs?

Who cares? Honestly, it doesn’t matter; just be the one making that top 10% of things. Make something that’s worth using and isn’t brittle. Provide something that solves a real problem that your users have.

You may ask if I’m using LLMs myself. Let’s consider it. I want my projects to be reliable, efficient, fast, and responsive. I believe quality is better than quantity, and we should aim to do everything we attempt to the best of our ability. I don’t need more code written; I aim to get rid of as much code as possible, not add more. I believe that perfection isn’t achieved when nothing is left to add, but when nothing is left that can be removed. Can you guess whether or not I’m using LLMs? If not, do you care?

Leave a Reply

Your email address will not be published. Required fields are marked *