The reasoning behind that claim is highly relevant to the distinction between technology knowledge and software engineering principles. These are essential properties. A car might or might not have a V8 or a V6, studded snow tires or racing slicks, an automatic or a manual transmission. Brooks argued that the essence of software engineering consists of working out the specification, design, and verification of a highly precise and richly detailed set of interlocking concepts. What makes software development difficult is its essential complexity, conformity, changeability, and invisibility.
Computer programs are complex by their nature.
Even if you could invent a programming language that operated at the level of the problem domain, programming would still be a complicated activity because you would still need to define relationships between real-world entities precisely, identify exception cases, anticipate all possible state transitions, and so on. Strip away the accidental work involved in representing these factors in some specific programming language within some specific operating system, and you still have the essential difficulty of developing and debugging the underlying real-world concepts. The software designer often faces inflexible, external factors that limit the extent to which complexity can be reduced. Another source of complexity is software's changeability . The more successful a program is, the more uses people will find for it, and the more it will be adapted beyond the domain for which it was originally intended.