LLMs as Compilers

Today, LLMs are being marketed as something that will result in the end of coding. NVIDIA’s CEO, Jensen Huang, said, “It is our job to create computing technology such that nobody has to program.” He argued that AI could make human language the programming language. He suggested fields such as biology, education, manufacturing, etc., as alternatives, and told everyone to go do farming instead. Similar claims have come from other AI peddlers, looking at you Dario.

Anthropic CEO Dario Amodei went even further, predicting that AI could be writing “90% of the code” within roughly 3–6 months and “essentially all of the code” within about a year. Microsoft CTO Kevin Scott has similarly predicted that around 95% of code could be AI-generated by 2030. Microsoft CEO Satya Nadella has also claimed that somewhere around 20–30% of the code in some Microsoft repositories is already being generated by AI, and it shows. File explorer is slow, task manager takes a decade to load and notepad is full of bloat.

But the thing is, these are uncertain times. I remember when we had ChatGPT and you had to copy-paste the code back into your text editor. Now, you have agents that can write, edit, compile, and debug your code for you. Hell, they can even deploy it for you and make an alright attempt at distribution, if you really know what you’re doing.

A year ago, we had prompt engineers on YouTube and all over social media telling you that coding is dead, software engineering is dead, and prompt engineering is the new big thing. Everyone should become a prompt engineer because writing good prompts meant getting good code. Today, that has become kinda obsolete. Now, you can have a more intelligent LLM, like Claude Fable, write the prompt, i.e., a plan, for another less intelligent model to implement. The model prompts the model. Gone are the days of prompt engineering.

Anyways, prompt engineering kinda started declining when vibe coding came into the mainstream. I believe Andrej Karpathy was the one who coined the term and brought it into the mainstream. Since then, I have not seen prompt engineers, and it has been kinda funny to me. Now we have vibe coders instead, who are token maxxing.

But the prompt engineers were onto something. They had rediscovered the decades-old programming concept of garbage in, garbage out, or GIGO. There’s a book called The Programmer’s Mind, a good read about memory and all that, but it also outlines what programmers actually spend their time doing. Transcription: writing out code when you already know exactly what you’re doing. Reading: examining existing code, a skill that gets sharper with deliberate practice. Comprehending: understanding how the logic fits together. Searching: hunting for a specific part or piece of logic inside a codebase. Incrementing: adding to or modifying what’s already there.

LLMs are already excellent at searching. Point one at a codebase and ask where something lives, and it will find it faster than you will. But the point I’m trying to make is that the better you can transcribe code, the better you already know what good code is supposed to look like, and the better you can steer a model in the right direction.

This is the same idea as writing: LLMs are very good at writing, BUT we all think they’re trash at it. When LLMs like GPT-3 came out around 2020, I thought they were brilliant at writing. Perfectly structured paragraphs, no grammatical mistakes, a writer that chooses only the highest-probability words, the ones mankind has used the most. What could be better than this?? But, turns out that leads to a very big problem, one outlined well in this article, which I highly recommend you read. The sameness of the writing, the boring-ness of it, is too much for us; the em dashes start feeling less like punctuation and more like a giveaway.

Anyway, my point is that we can recognize bad writing because we have seen a lot of it, we have READ a lot of it. Whether consciously or subconsciously we have read a shit ton, and yes, even those of us who are not big readers. Even they can spot an LLM’s writing style and call it bad. But the thing is that most people have not read as much code as they have read English or their native language, so when the code is shitty it’s hard to call it out, especially when you don’t know what good code looks like. LLMs are just autocomplete tools that take an input and give you an output, but unless you know the right output, you cannot truly depend on them. You can think of LLMs as non-deterministic compilers that take natural language and turn it into code.

The problem they have is one that any non-deterministic compiler would have: they are unpredictable. The same prompt can result in two different outputs. This goes against the programming ethos. It is not predictable. It is not reliable. You cannot maintain something like that, and consequently, you cannot scale something like that reliably without strong controls, testing, and human oversight.

So, if most of your code is written by AI now, technically all of your code is written by compilers, but no one talks about that.

Anyways, in mathematics, early on, we used to use natural language to describe mathematical concepts. But that did not work very well, so we started using more formal mathematical notation. In programming, we started using formal languages, but now we are saying we will use natural language instead. Insert “we are evolving backwards” meme.

“It is our job to create computing technology such that nobody has to program.”

We are using a language that was not designed to be used for logic for an extremely logical task, i.e., programming. Anyway, this is a problem because if we treat LLMs as magic code generators, we end up with code, tests, and pipelines no one fully understands. So no, coding isn’t dying. What is actually dying is the part of us that could tell good code from bad in the first place. We didn’t develop bad taste in writing the day ChatGPT showed up; we already had it. We just never had a machine willing to churn out mediocre prose at scale on our behalf before. Code is the same story, except most of us never read enough of it to build the taste to begin with. Outsource the transcription, and the reading goes with it, and once the reading is gone, there’s nothing left. So, READ PEOPLE! READ CODE!!

p.s writing code was never the hard part, the hard part was reading code & LLMs sure as shit have not helped with that.

Now, I can neither read nor write code.