https://tratt.net/laurie/blog/2022/how_might_generative_ai_change_programming.html
Is programming the best mechanism of turning specifications into software? There are certainly cases when the answer is “no”, whether that’s due to the use of domain specific languages, or glueing existing systems together in some way. That said, the history of software so far suggests that, to misquote Churchill, programming is the worst mechanism for turning specifications into software except for all those other forms that have been tried from time to time.
…
I find it easier to understand this by considering the problem in reverse. For example, imagine if you converted all the hashmaps in your favourite bit of software into arrays: you’d have exactly the same “functionality” but your software would probably become unpleasantly slow. In other words, the (correct) use of hashmaps is part of the specification — however, very few non-programmers would have thought to specify their use. As this suggests, user-level specifications are almost never complete — they leave out things that a good piece of software must address. Programming is the means by which we both understand what’s been left out and fill in the resulting blanks.
@alpha plowing through and this quote stood out to me as feeling very true:
"... personally I think it's mostly because creating a complete formal specification is at least as hard as the equivalent programming. This is because such a specification needs to have all of the information we create when programming, plus, in general, extra information that makes proving properties useful."
@alpha Generally speaking if I see a specification that is detailed enough to "just implement" it's probably some variation of pseudo code that really does just need to be translated into some language specific implementation. Pseudo code is just another kind of code... it's still programming, just working at a different level of abstraction.
@alpha So I guess my question is at what point does this kind of generative AI enable us to "program" at a significantly higher level of abstraction that doesn't introduce so much inefficiency in the final implementation that it's worth the trade off (language or framework managed memory is an example of a trade off we've made sacrificing performance for reduced mental load during programming).
@alpha realizing that most of this generative AI is all about quickly generating probabilistically correct results, really the question would be, is an interpreter/compiler implementation that is non-deterministic good enough to solve certain classes of problems?