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,