Efficiency issues often can be quantified in terms of computer memory or time, but we must be careful that we are not comparing apples and oranges. Compile time is not interchangeable run time, and neither one is the same as programmer time. Similarly, computer memory cannot be traded off against computer time unless both are reduced to a common denominator, such as money, but this brings in economic considerations, to which we now turn. Whereas efficiency is a scientific issue, economy is a social issue. In structural engineering, economy seeks to maximize social benefit compared to its cost.
Economic tradeoffs are hard to make because economic values change and are difficult to predict.
For example, the shift from first to second generation programming languages was largely a result of a decrease in the cost of computer time compared to programmer time, the shift from the second to the third generation involved the increasing cost of residual bugs in programs, and the fourth generation reflected the increasing cost of program maintenance compared to program development. As can be seen from the historical remarks in my Principles , social factors are frequently more important than scientific factors in determining the success or failure of a programming language. Often economic issues can be quantified in terms of money, but the monetary values of costs and benefits are often unstable and unpredictable because they depend on changing market forces. Also, many social issues, from dissatisfaction with poorly designed software to human misery resulting from system failures, are inaccurately represented by the single dimension of monetary cost. Structural engineers face similar problems of analytic complexity, but Billington observes that the best designers don't make extensive use of computer models and calculation.