I don’t think we need to think the code as something “discardable”. If you do that, how are you going to diff the changes? How do you audit the changes? What if the LLM introduced bugs/regressions? You still need to check the code, even modify it. You don’t do it with compilers because compilers are determinists: if the compiler makes a mistake you fix the compiler. If you “fix” or improve the AI there’s no guarantee it will not make the same mistake again in the future (non-determinism).
Historically in the Software Industry we’ve been creating higher abstraction levels, and IMO that’s what we should be doing: building deterministic tools.
I’m arguing that we’ll have tools that guarantee to implement specifications correctly, so, in fact, we won’t need to look at what’s generated, not even to compare it to a prior version. There’s a lot of technical work to do to pin down the tooling details, but I think we’re up to it.
I don’t think we need to think the code as something “discardable”. If you do that, how are you going to diff the changes? How do you audit the changes? What if the LLM introduced bugs/regressions? You still need to check the code, even modify it. You don’t do it with compilers because compilers are determinists: if the compiler makes a mistake you fix the compiler. If you “fix” or improve the AI there’s no guarantee it will not make the same mistake again in the future (non-determinism).
Historically in the Software Industry we’ve been creating higher abstraction levels, and IMO that’s what we should be doing: building deterministic tools.
I’m arguing that we’ll have tools that guarantee to implement specifications correctly, so, in fact, we won’t need to look at what’s generated, not even to compare it to a prior version. There’s a lot of technical work to do to pin down the tooling details, but I think we’re up to it.