Engineering in software

Software development is similar to building bridges. Technical expertise is applied to build something that may be confidently used where expertise is lacking. A person crosses a bridge without measuring the beams and repeating the stress analysis arithmetic. A person uses a compiler without verifying the symbol table algorithm. It is this application of expertise that causes the fields of both bridge building and software development to be areas where engineering principles are applicable. It is the cost of failure that makes these principles required. However, software is different from concrete and steel. The obvious differences are shape and strength. Concerning shape, software is like a cartoon. As an animated drawing can assume unrealistic shapes, software supporting animation can produce these shapes. Concerning strength, software does not suffer from fatigue or vibration. If there is sufficient time and memory, an algorithm in software can function correctly far beyond where it can function well. For example, imagine the bridge-loading analogue of a linear search through the O.E.D. with a Turing machine. Therefore, producing software is an engineering endeavor at the level of responsibility and ethics. But it is not an endeavor that can make use of the traditional engineering tools—slide rules and tables of yield strength.