Software engineering is not a discipline; it is an aspiration, as yet
unachieved. Many approaches have been proposed, including reusable com
ponents, formal methods, structured methods and architectural studies.
These approaches chiefly emphasise the engineering product; the solut
ion rather than the problem it solves. An approach to understanding an
d classifying software development problems in terms of problem frames
is suggested. In addition to such general approaches, specialisation
is essential; the established branches of engineering are all speciali
sations. Some specialisations have arisen in software development, not
ably in compiler construction and software for personal computers; mor
e are needed.