Software engineering is the discipline of developing and maintaining software systems that behave reliably and efficiently, are affordable to develop and maintain, and satisfy all the requirements that customers have defined for them.
More recently it has evolved in response to factors such as the growing impact of large and expensive software systems in a wide range of situations and the increased importance of software in safety-critical applications. Software engineering is different in character from other engineering disciplines, due to both the intangible nature of software and to the discontinuous nature of software operation.
It seeks to integrate the principles of mathematics and computer science with the engineering practices developed for tangible, physical artifacts. Prospective students can expect to see software engineering presented in two contexts:
- Degree programs in computer science offer one or more software engineering courses as elements of the CS curriculum. Some offer a multi-course concentration in software engineering within CS.
- A number of institutions offer a software engineering degree program.
Degree programs in computer science and in software engineering have many courses in common. Software engineering students learn more about software reliability and maintenance and focus more on techniques for developing and maintaining software that is correct from its inception.
While CS students are likely to have heard of the importance of such techniques, the engineering knowledge and experience provided in SWE programs goes beyond what CS programs can provide. Such is the importance of this that one of the recommendations of the SWE report is that during their program of study students of SWE should participate in the development of software to be used in earnest by others.
SWE students learn how to assess customer needs and develop usable software that meets those needs. Knowing how to provide genuinely useful and usable software is of paramount importance. In the workplace, the term “software engineer” is a job label. There is no standard definition for this term when used in a job description. Its meaning varies widely among employers. It can be a title equivalent to “computer programmer” or a title for someone who manages a large, complex, and/or safety-critical software project.
The public must be mindful not confuse the discipline of software engineering with the ambiguous use of the term ‘software engineer” as used in employment advertisements and job titles.