The first point that has to be made about software engineering has to do with its scope of activities. Software engineering is the management of the entire process of development of computer systems to solve problems.
As software systems have grown more sophisticated and complex, software developers have sought new methods for their development. Software engineering is a response to that need. Software engineering is still rapidly changing and maturing.
Typically, when someone is told to write a program, someone else has told him or her what the program is to do and why; the programmer is concerned only with how to write it. As software engineers, however, we will be the ones concerned with the what and why. Software engineering includes the whole range of activities having to do with problem solving – from helping the client define the problem or opportunity, to evaluating the client’s satisfaction with the solution.
Developing a software system may require writing a whole collection of programs to tell machines what to do, writing procedures to tell people what to do, and providing training so that people understand how to do it. We may need to convert data from an old system so it can be run by a new system, hire people and acquire machines to run the programs, and obtain space in which the machines and people can do their work. What we are building is a system of many parts working together. Such an endeavor requires patience and flexibility. We will have to fix the system when it does not do what we expected, or the client may ask us to change the system because he or she wants it do something else not previously intended.
Programming may be no more than 20 per cent of the total scope of software engineering, and the fraction of effort involved with programming can be expected to drop as improved methods are used for developing software systems. As time goes on, more of our effort will go into managing the overall process and less into programming.