Charles Rich and Richard C. Waters,
"Automatic Programming: Myths and Prospects",
IEEE Computer, vol. 21, no. 8 (Aug. 1988), pp. 40-51.
They emphasize the importance of knowledge, including domain knowledge
(necessary just to understand the specification of what is wanted).
Current approaches:
- Bottom-up: increase the automation of languages to produce
very-high-level languages.
- Narrow domain: automate programming only within a narrow domain.
- Assistant: provide tools to assist a human programmer.
The nature of Requirements:
- It is impossible for real requirements to be complete (at first).
The customer cannot specify what is really wanted ab initio.
The focus will be on changing requirements as much as implementing them.
- Error handling must be included. [most of some programs]
- Requirements are not defenses against adversaries, but tools for
communication among colleagues.
Myth: there will be no more programming. Instead:
- End users will be programmers, for simple problems.
- Programmers will work on harder problems than they do now.
Input languages:
- Natural language
- Advantages: familiar vocabulary, syntax; informality
- Disadvantages: informality, ambiguity
- Special-purpose languages: e.g. math, GUI generators, spreadsheets.
Limited in applicability and composability.
- Examples of program behavior: sounds nice, but doesn't work.
- Predicate calculus: intractable, hard for people to write.
- Very-high-level languages: sets, mappings, constraints,
nondeterminism, history.
A language should:
- Be wide spectrum: from detailed to abstract
- Be interactive
- Come with a vocabulary of predefined terms
How the system works:
- Procedural (e.g. advanced compiler): works, but hard to extend.
- Deductive: combinatoric explosion limits this method to small problems.
- Transformational methods: pattern-condition-action. These dominate
research in automatic programming. Often, transformations are correctness
preserving. Transformations are used for:
- Implementation: translating what to do into how to do it.
- Rearrangement and optimization
Problem: which transformations to make, and when.
- Inspection: reuse a cliche, inspect and fix it.
What does the system know?
``[T]he benefits of automatic programming can be traced almost exclusively to
the productivity and reliability benefits of reusing this knowledge.''
Goals for knowledge representation:
- Expressiveness
- Convenient combination
- Semantic soundness
- Machine manipulability
- Programming language independence