Compilers have always translated human intent into machine execution. You write something vaguely resembling logic, the compiler figures out what you actually meant, and the machine runs it. Sometimes the translation is faithful. Sometimes the compiler optimizes it into something you didn't write and probably couldn't have. Either way: you're the author. The compiler is a tool.
LLMs do the same thing at a higher level of abstraction. You write something vaguely resembling a specification, the LLM figures out what you actually meant, and it produces code, prose, or analysis. Sometimes the translation is faithful. Sometimes it hallucinates the function signature. Either way: you're the author.
The deity framing is the problem. When we treat LLMs as oracles instead of tools, we stop checking the output. We stop maintaining the domain expertise to catch the errors. We become the compiler's stenographer rather than its operator.
We've been here before — every time a new abstraction layer appeared, people said software engineering was over. It wasn't. It changed. This time is the same.
Read the full piece on Medium →