An excellent book on end-user programming. A strong counter-argument to the widespread assumption that all we need to do is turn existing language models into pretty point-and-click diagrams.
End-user programming is needed because it's impossible to predict in advance what the user will need, and expensive to cover all the options
Natural language is poorly suited to user interfaces, because natural language is disambiguated by context and common knowledge, which computers so far lack
In natural language interfaces, users have to learn the undocumented subset of their natural language that the machine understands correctly
We don't drive a car by talking to it, but by providing an interface which tightly couples the users body to the problem domain
Rather than a uniform natural language, many professions have their own specialized dialects (ie we have specialized interfaces even in natural language)
Many successful notations are not even speakable - eg math proofs, circuit diagrams
Examples of 'regular' people using formal languages with complex syntax: musical notation, crochet/knitting patterns, baseball scoring
Crochet and knitting patterns sometimes contain modular functions
The rise of digital tools means that experts are no longer able to design/modify their own interfaces/notations like they did when using paper
Critical property of end-user languages - allow users to focus on the task instead of the tool
Accountants, biologists, musicians may all be using different high-level libraries, but today all of them are forced to also be conversant in the language of arrays and instruction pointers
[In programming languages] it is hard to see what combination of low-level primitives will produce the correct task-related behavior.
A mathematician, in a broad sense, already knows Mathematica.
The goal of a tool is not to be 'natural', but to be quickly learnable and efficiently usable
Rather than thinking of a non-programmer who needs to be coddled, think of a domain expert whose strengths can be augmented