ELSEVIER Information and Software Technology 38 (1996) 37-46 A closer look at programming expertise: critical survey of some methodological issues Pavol Naivrat* zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONML Slovak Technical University, Bratislava, Slovakia Abstract We attempt to identify important methodological concepts within knowledge of programming. In one dimension, there are various levels of abstraction; in another, there are various levels of generality. Still another dimension marks different meta-levels. We relate these properties to typical concepts in programming and problem solving. A critical survey of some of the currently used interpretations and applications of these concepts is given. We discuss a formulation of a method of programming that would better reflect the fundamental relations. Keywords: Abstraction; Generalization; Meta-levels; Programming knowledge; Development method 1. Introduction There has heen an increasing research interest in the con- tents of programming expertise [ l-51 in the form of its representation [ 6,7] or in learning it [ g-101. Perhaps it has become worthwhile to reflect upon’ the state that has been achieved. Undeniable progress has been achieved in developing the theory of programming. Efforts are being made to develop suitable ways of describing the program formation and program transformation rules in a formal language, most notably in predicate logic [ 111. Others put stress on the notion of formal theory to express the problem specification, the program processing machine and other available knowl- edge, and view the programming process as a sequence of suitable operations on these theories [ 121. However, at the present state at least, there is still a long way from this to a practically useful methodology. It would cover not only the actual program construction process, but the whole software development process as well. This would be applic- able to complex and/or difficult tasks faced in practice. Besides that, it is not yet clear to which extent we can expect such approaches also to describe the necessary program design skills. It is possible that some do not even find it necessary. Let us take an analogy from mathematics where formulas (theorems) are studied in a similar fashion to formulas (programs) that are studied in the theory of programming. But in mathematics a special ‘theorem design methodology’ does not seem to enjoy as much attention as the program design methodology does. Others may draw a different analogy from physics which offers, e.g. theory of the electromagnetic field with its Maxwell equations. The *email:navratQelf.stuba.sk 0950-5849/96/$15.00 @ 1996 Elsevier Science B.V. All rights reserved SSDI 0950.5849(95)01043-2 equations describe, at least in principle, a solution to any related problem; but Kirchhoff’s, Faraday’s and Henry’s laws were derived from them to allow designers from the field of electrical engineering to solve the complex practical problems more effectively. By the same token, it is quite likely that besides the theoretical foundations of programming (which have not yet been laid to an extent comparable to other fields like those mentioned above), a body of knowl- edge about program design cannot be neglected and must be considered a standard part of programming expertise. It is this part of programming expertise that will be our main concern. We want to emphasize that it does not follow from the above that this kind of knowledge stands in opposition to the theory of programming, or that it could not or should not be described formally. It may require different formalisms to represent it, or different techniques to capture it. Here, methods of knowledge engineering as studied in artificial intelligence could prove useful, among others. On the other hand, bearing in mind that programming is a human problem-solving activity, it is entirely possible that some aspects of it cannot be formally described ai all. Programming is studied also by psychologists [ 131. Our aim is to investigate the methodological aspects of programming expertise [ 141. As an example of confusion frequently encountered in discussions about programming knowledge, abstraction and generalization are used almost interchangeably in describing certain properties of concepts in the programming domain. We attempt to add to the clarification of these relations. By means of example, we discuss the differences between a (partial) abstraction hier- archy of data concepts and a (partial) generalization hierarchy of data concepts. We provide further comparison of abstracting and generalizing. Then we devote our attention to analysing the nature of the basic activities within the