It does! I wish you could specify only the 5% of the code that describes the behavior you desire. It’s not even just that the description of a behavior is verbose. It’s that many of the behaviors you have to describe could have been assumed based on common sense (programmer/system-builder common sense, not necessarily common common sense).
I have a recurring thought experiment. It’s a dialog with a computer. You say to it, “I want a chat program.” You get a chat program. You examine it, and say, “No, actually, I want 1-to-1 chat, not group chat.” You get a new chat program. You examine it and say, “No, actually, it should be peer-to-peer, not centralized.” Et cetera.
The important bit isn’t that it’s happening in natural language, because it doesn’t have to. It’s that the user is refining a system rather than constructing it. It’s a constraint satisfaction problem. The constraints are informed by human experience creating systems. 1-to-1 chat, group chat, peer-to-peer, and centralized communication are extremely common concepts, so it would be convenient to be able to use them in the specification of software.
(It’s really neat how far we’ve come. Meteor tutorials say, “Look, if you bind this table to this collection, and you bind this text box to an action that adds to the collection, you have chat!” But my question is always, “Well how am I supposed to find out about tables and collections and binding and text boxes when all I know about is chat?”)
The other important bit is that the user isn’t painstakingly repeating the same coding process as countless programmers before them. Why I ever have to write anything that’s been written thousands of times before is my eternal frustration.
I’ve gone off the deep end. Apologies. This thread started off so practical and here I’ve come and ruined it.