Natural language is not entirely defined/determined; whereas software is well-defined by its ingredients. You know the meaning of software – what it will do – because you know the elements and you just put them together according to their rules and the whole meaning/action follows.
Software is a machine. But natural language is like a whole piece of the machine is missing. You cannot really, completely, exactly know what any statement means because so much is left to interpretation by the reader/hearer. There are some rules, some well-defined elements, yet there is also so much looseness in them too.
———
But, looking closer, software and language are related in this way. They can be seen as not different in kind, but at different ends of a spectrum (or places in a continuum). Software has a high degree of ‘certainty’, and language much lower. It is like software is made out of rigid parts: struts, hinges, etc. (software is not soft!). The ‘certainty’ it has is like the properties of a particular kind of material and its assembly. That means you can do particular kinds of things with it. Language, by comparison, is mushy: programming with natural language would be like building with noodles.
And software must be in the same continuum as language. It cannot be entirely rigid, entirely defined. Looseness is flexibility. If there were no looseness at all, there would be no way to have reusable parts. If something were entirely defined, it could only be used for precisely that purpose. Part of what we want from software is reusability, not just certainty.
———
So a question might be, do we have or can we have software in other more relaxed places in the spectrum? and what usefulness would that have? But normal natural language already contains such sub-languages. Consider a command. It has vagueness, but it has enough definition to work for a particular kind of use.
So what is the problem? Is it only that these semi-formal sub-languages are not clearly labelled?
———
Related: