Programming Concepts. To build a knowledge base that captures the programmer's expertise, we first of all have to investigate the concepts and relations in the programming domain. The standard literature on programming presents concrete programming constructs and explains how these are used in solving concrete problems. But just like playing a good game of chess requires much more than knowing the rules of the game, writing a good program requires much more than knowing the syntax and semantics of the basic building blocks in a particular programming language. The novice programmer views a program as constructed out of the standard data types, primitive operations, and basic control structures available in a specific programming language such as number, list, sum, append, and the if-then-else construct. The expert programmer reasons with larger and less language-specific abstract programming concepts. He views a program as a configuration of larger units of data and computation. Typical examples of such units are abstract data types like sets, sequences and graphs, abstract operators like filter and select, and control abstractions like dolorall . Cognitive studies (De Groot 1965; Larkin 1980) confronting experts and novices in various technical domains indicate the existence and importance of abstraction level(s). They show that experts develop and use 'chunks' that correspond to functional units in their domain while non experts do not. The experts perform better in their domain because of these abstractions. The same results have been obtained in the programming domain (Eisenstadt 1985; Soloway 1984; Adelson 1981). Chunks or functional units of composed data and/or computation are from this point on referred to as abstract programming concepts. Abstract programming concepts help the programmer to deal with complexity. They summarise a stereotypical combination of more primitive programming concepts which is instantiated to solve a particular problem. On the one hand, the large expert vocabulary reflects the programmer's knowledge about the abstract concepts used in programming. On the other hand, the existence of this vocabulary indicates the importance of such abstractions in communicating and organising programming knowledge. Abstract programming concepts act as loci of programming knowledge and the relations between them introduce structure into the large body of programming knowledge.programming concepts help the programmer to deal with complexity. They summarise a stereotypical combination of more primitive programming concepts which is instantiated to solve a particular problem. On the one hand, the large expert vocabulary reflects the programmer's knowledge about the abstract concepts used in programming. On the other hand, the existence of this vocabulary indicates the importance of such abstractions in communicating and organising programming knowledge. Abstract programming concepts act as loci of programming knowledge and the relations between them introduce structure into the large body of programming knowledge. SEQUENCE is a structured collective data structure can be typed can be ordered if the element type has an order relation defined on it can be implemented as a linear-list, a vector, ... has element selectors defined on it such as first, last, nth, ." has selectors defined on it such as filter, butfirst,
[1]
Robert Balzer,et al.
A 15 Year Perspective on Automatic Programming
,
1985,
IEEE Transactions on Software Engineering.
[2]
B. Adelson.
Problem solving and the development of abstract categories in programming languages
,
1981,
Memory & cognition.
[3]
Charles Rich.
A Formal Representation For Plans In The Programmer's Apprentice
,
1982,
On Conceptual Modelling.
[4]
Dorothea P. Simon,et al.
Expert and Novice Performance in Solving Physics Problems
,
1980,
Science.
[5]
H. Simon,et al.
Rediscovering Chemistry with the Bacon System
,
1983
.
[6]
Terry Winograd,et al.
Breaking the complexity barrier again
,
1973,
SIGPLAN '73.
[7]
David R. Barstow,et al.
The Refinement Paradigm: The Interaction of Coding and Efficiency Knowledge in Program Synthesis
,
1981,
IEEE Transactions on Software Engineering.
[8]
John Darlington,et al.
A system which automatically improves programs
,
1973,
Acta Informatica.
[9]
Richard C. Wafers.
A knowledge based program editor
,
1981,
IJCAI 1981.
[10]
Richard C. Waters.
The Programmer's Apprentice: A Session with KBEmacs
,
1985,
IEEE Transactions on Software Engineering.
[11]
Elaine Kant,et al.
Understanding and Automating Algorithm Design
,
1985,
IEEE Transactions on Software Engineering.
[12]
Elaine Kant,et al.
The Roles of Execution and Analysis in Algorthm Design
,
1985,
IEEE Transactions on Software Engineering.
[13]
Howard E. Shrobe,et al.
Initial Report on a Lisp Programmer's Apprentice
,
1978,
IEEE Transactions on Software Engineering.
[14]
K. Van Marcke.
KRS: an object oriented representation language
,
1987
.
[15]
Wolfgang Bibel,et al.
Syntax-Directed, Semantics-Supported Program Synthesis
,
1979,
Artif. Intell..
[16]
Ann Nowé,et al.
An environment for knowledge based transformational implementation
,
1989,
IEA/AIE '89.
[17]
Douglas R. Smith,et al.
Research on Knowledge-Based Software Environments at Kestrel Institute
,
1985,
IEEE Transactions on Software Engineering.
[18]
Viviane Jonckers.
Exploring Algorithms through Mutations
,
1986,
ECAI.
[19]
Robert Balzer,et al.
On the Transformational Implementation approach to programming
,
1976,
ICSE '76.
[20]
Douglas B. Lenat,et al.
Why AM and EURISKO Appear to Work
,
1984,
Artif. Intell..
[21]
A. D. D. Groot.
Thought and Choice in Chess
,
1978
.
[22]
Elaine Kant,et al.
Efficiency in program synthesis
,
1981
.
[23]
Martin S. Feather,et al.
A survey and classification of some program transformation approaches and techniques
,
1987
.
[24]
Kenneth W. Haase.
Discovery Systems
,
1986,
ECAI.
[25]
Johanna D. Moore,et al.
Enhanced Maintenance and Explanation of Expert Systems Through Explicit Models of Their Development
,
1984,
IEEE Transactions on Software Engineering.
[26]
D. Barstow.
An Experiment in Knowledge-Based Automatic Programming
,
1986,
Artif. Intell..
[27]
Douglas R. Smith,et al.
Top-Down Synthesis of Divide-and-Conquer Algorithms
,
1985,
Artif. Intell..
[28]
David R. Barstow,et al.
Knowledge-based program construction
,
1979
.