No, the source is enough, because the low-level assembly is translated from the high-level source descriptions (a sound programming language with a complete and consistent specification) via a deterministic algorithmic translation process (a compiler) to a low-level executable that can run on a machine. Today, compilers are complex, but still human understandable. The programs are equivalent, and we're getting better able to actually prove this.
This is why I bristle when people say "post your prompts". Your prompts are not a program and the magic box is not a compiler.
Too many people abandoning everything, either due to laziness, mental overload, or..."skill issues".
I still want to see code. I want write code, check code, optimize and refactor code. I don't want to spend a lot of time debugging, but maybe a little.
The clankers should be accelerating the parts of the process we are bad at, and that takes time we won't spend: long, time-consuming refactors, debugging deep issues, writing crap tons of tests, investigating performance issues, digesting other people's code.
AI should be more like a bicycle than a cruise ship. And I mean the "bicycle for the mind" that Jobs wanted.
i use a compiler and not an LLM because the compiler is deterministic. i can trust that the same code input will always (for the same version of the compiler) produce the same machine code as output. the LLM will not.
To find the right position in this spectrum, I think we need to find a level of specification that we care about.
In computing, though, the halting problem hoses us every time we have to hit ctrl-c to break an accidental infinite loop. Our tools can't always flag those situations ahead of time, so we often have to find them the hard way.
It seems clear that in software development, the specification is the program. To the extent there's something that the spec doesn't cover, that's a bug in the spec, not in the AI that turns the spec into code. Just as you wouldn't blame a compiler for your infinite loop, we will eventually reach the point where blaming a clanker for generating imperfect high-level code sounds just as bogus.
"Build me a Super Mario Bros. clone, make no mistakes" is the new hello_world.c. For anything innovative -- anything with commercial value -- the spec will have to be a lot more elaborate. There are plenty of specs that are already too complex for any one person to hold in their head, except perhaps for a few godlike prodigies. Look at the MPEG-4 document collection, or for that matter our tax and legal systems. I think the lesson is that language alone can't save us from complexity, any more than a better set of axioms can save us from incompleteness.
Instead of writing in computer languages, we describe things in our native language. The prompt is the code.
So therefore we don’t find the abstraction. We describe it.
Think of it like, we can just have a pretty nice text file full of thoughts, and the computer - if those thoughts are coherent - will write the code.
I definitely still read AI code. It’s the only true handle we have on AI.
Because as humans, its our language, actually.
Except AI is exceptionally good at using it.
So, define the next abstraction.
>low-level
What I mean by exposed wide open is, literally, word for word. Every single word we ever find useful, given to us from AI, needs a human to understand the value. Or indeed, give it a value.
We can turn AI off, just like we turned off asbestos and lead.
But of course - there are immensely useful applications of those substances.
As decided by humans. Still, only humans. Word for word.
I want to believe this is true. But as an counterexample, do we need to hold machine code or assembly, generated from our C or Golang programs, in our heads? Or rather the Golang code is a high-level abstraction which is good enough?
If that's the case, does it mean we should go even further and treat design docs as the code suitable to hold in head and treat Golang program as a derivative? Or maybe design docs are also too low-level and the general vibe "create me an app, make no mistakes" is actually enough?
What's the right abstraction level? How to find it?