Another layer, yes, but NOT "in the same way." It is a new, different kind of layer. The other layers were deterministic, not probabilistic.
LLMs are quite interesting in that regard because you have a lot of levers to influence the shape of the distribution; the ways are different for each model, so it’s a very experimental science, but applying the scientific method is exactly how you get good results.
A compiler is semantically deterministic. It has a spec. Give it an input and you can know exactly what the output will do. And if there's edge cases where behaviour is undefined, thats also well known apriori.
(And yes, to get ahead of the nitpickers, I know the specific sequence of bytes the compiler will emit can vary (hence the difficulty of reproducible builds), hence why I said "semantically").
LLMs do not share this property. At all. I mean not even close
They are a completely new and different class of tool. They are not just a step up the abstraction layer. They're not compilers for English. To call them that is to fundamentally not grok what a compiler is or does.
That doesn't make them bad. It just makes that analogy, and any conclusions you might draw from it, bad.
I can see this struggle it in my organization as well, in the last year there was a big push to adopt AI everywhere and tons of initiatives to automate processes and produce code and text and other artefacts with LLMs. Now it seems the pendulum is swinging back a little as people see that all of the LLM generated stuff shows all of these subtle quality degradations, and people get tired of managing it as they are suddenly confronted with tons of additional information they need to manage.
Given that models are still evolving and becoming better at a rapid pace I think that we will solve most of these issues in the near future, but for now I don't think the age of hand crafted code is over yet.
I have been thinking about that machine code analogy before as well, I don't think it really holds. Machine code is written in an automated way but following mostly deterministic rules that have been crafted through decades of manual optimizations and testing. AI generated code has nowhere near this level of scrutiny, testing and optimization behind itself. The fault rate of compilers and optimizers is incredibly small (I can't find any numbers but it must be on the order of ppm or ppb), AI generated code has fault rates that are even in the best case on the order of 99-99.99 % maybe (i.e. between one error per hundred lines and one error per ten thousand lines in the best case), try building anything complex using such a fault rate without manual correction and review. It's impossible. I have done it, I dabbled with writing a compiler, a database and even a simple web framework from first principles. I didn't get far, even though I had good mental models of these things and I carefully wrote RFCs and documents for the LLM, specified test cases etc... If you're lucky it will regurgitate some existing code or follow documented guidelines, but when you're on new territory these models won't be able to produce anything good. I would really like to see a single example of someone vibe coding a high quality library or tool with LLMs, I haven't found anything and no one can point me to a complex codebase (say 10,000 lines or more) that was generated using high level prompts that looks decent and doesn't have multiple glaring issues that appear when looking at it in detail.
But the "letting go" point is I think about what people enjoy. Personally, I enjoy code. I've had jobs where I really enjoyed what I was doing because they gave me the opportunity to write interesting code. The end product wasn't interesting to me. I had a great job building tools for companies that build a very popular consumer product that I've never owned or been interested in. So the software we were building to assist in creating those products wasn't interesting to me in terms of what it is, but the job was motivating and interesting because of the technical problems I got to solve.
I think that's one of the big divides we're seeing in comments now. There are people who want to build things for the sake of the final product. They're happy because LLMs speed that up by a lot, at least initially. Then there are people who enjoy the process and craft of writing code. For them it's hard to let go of manual coding because that's the enjoyable part of the work.
> They're happy because LLMs speed that up by a lot, at least initially. Then there are people who enjoy the process and craft of writing code. For them it's hard to let go of manual coding because that's the enjoyable part of the work.
coding enjoyer here, but for me i want it to be an assistant to speed up what im doing (in the "bicycle for the mind" kind of way) or a problem solver for when i got really stuck; i feel like "agentic" workflows miss a lot of this cause its like talking to someone through slack... thats not enjoyable and also too far removed from the actual code/problem im working on; i think there is an opportunity for much better ux here...It is hard to me to fathom why anyone would find those limits acceptable, especially with years of experience writing code. It seems something like an experienced painter giving up on their art to doodle with crayons, and maybe that could be cathartic. Maybe you get experience with other aspects of your craft.
I work with a lot of AI code, and it’s not any worse than what big teams were already producing.
A small team of 2-3 really good humans is in a whole different league, but that has always been a very rare case.
I am saying this because I haven’t seen latest gen AI unable to implement something no matter how convoluted the code base. On the other hand, people easily get overwhelmed. These days I have more faith in Claude implementing something for me than for a person, including me , doing it thoroughly enough on unfamiliar code bases (and for any big enough code base, large swathes of it will be unfamiliar to any individual developer).
It's true that AI has an incredible ability to take in a massive amount of information and do useful work with it. But it has no direct ability to exercise judgment, and with each iteration of reasoning and applied changes, its ability to hold the original intent degrades very differently from a human intelligence.
I've been crafting beautiful code for almost 20 years - that itch is scratched. Now I just want to be productive and build cool stuff. AI is helping me make a better end-product in a fraction of the time. As long as codex understands what's going on in the ball of spaghetti, there's no problem. Sure - if I was working in enterprise then this is no good. But for personal projects and small indie shops, it's fine.
AI is just a new layer on top of the stack now. In the same way high-level languages are a layer on top of writing machine code manually. You just need to let go.