The programmer must understand enough of the first to have the computer animate the representational scheme – adequately to the needs of the domain expert. The domain expert can participate in this process most closely when able to follow the domain logic in the program.
This is possible when a sufficiently high proportion of the tokens (eg names of
variables or functions) are drawn from the vocabulary of the reader. (Writers of natural languages, under a general injunction to write with their readers in mind, will find nothing surprising in this.)
Leaving aside any familiarity with programming, the minimum threshold appears to vary little between readers, and is in all cases high. Even a low proportion of ‘foreign’ terms degrades readability.
* [[control structure]]s: up to two levels of nesting, readers follow them;
characters other than the Roman alphabet or Arabic numerals; the reader either parses them as punctuation or mathematics (eg 2÷3), or ignores them.
Two common features of programming languages obstruct this effect:
* assigning names only once; homonyms are confusing enough in natural languages;
* naming only objects that correspond to terms in the reader's vocabulary;
* using (in Dyalog, NARS2000, ngn/apl, dzaima/APL, GNU APL) anonymous [[dfn]]s (lambdas) to avoid assigning other names;
* using [[tacit programming]] (in Dyalog, NARS2000, ngn/apl, dzaima/APL) to avoid using argument names in expressions.