by Herbert J. Bernstein © Copyright Herbert J. Bernstein, 1999, 2002, 2005
Software Engineering is the subdiscipline of Computer Science that attempts to apply engineering principles to the creation, operation, modification and maintenance of the software components of various systems. As with much of Computer Science, the subject of Software Engineering is at an very early stage in its development. It is much more of an art than a science, and at present has little in common which classical engineering.
Engineering is the application of well-understood scientific methods to the construction, operation, modification and maintenance of useful devices and systems.
Software is comprises the aspects of a system not reduced to tangible devices, e.g. computer programs and documentation. It is distinguished from hardware, which consists of tangible devices, and often exists as collections of states of hardware devices. The boundary between hardware and software can be blurry, as with firmware and microcode.
Someday, Software Engneering may well be concerned with the application of well-understood scientific methods to the construction, operation, modification and maintenance of software. Today, however, Sofware Engineering is concerned with finding ways in which to produce working software for predictable costs in predictable time. When the problems involved are very simple or when only one person is involved, implementing software to meet their own needs, there isn't much to be said, and we are a long way from having any scientific principles for the production of software. Therefore, the major focus of software engineering today is on well-tested heuristics for the production of software to solve complex problems when many people are involved in the process, as users, as analysts, as programmers, as managers, etc. Therefore most of the issues in Software Engineering are concenred with interactions among people, rather than with the production of software.