Excerpts from: Joint Task Force on Computing Curricula, IEEE Computer Society, Association for Computing Machinery, Software Engineering 2014 - Curriculum Guide for Undergraduate Degree Programs in Software Engineering, 23 February 2015. [https://www.acm.org/binaries/content/assets/education/se2014.pdf, accessed 23 December 2017]
Some critical characteristics common to every other engineering discipline are equally applicable to software engineering. Thus, they have influenced both the development of software engineering and the contents of this volume.
 Whereas scientists observe and study existing behaviors and then develop models to describe them, engineers use such models as a starting point for designing and developing technologies that enable new forms of behavior.
 Engineers proceed by making a series of decisions, carefully evaluating options, and choosing an approach at each decision point that is appropriate for the current task in the current context. Appropriateness can be judged by trade-off analysis, which balances costs against benefits.
 Engineers measure things, and when appropriate, work quantitatively. They calibrate and validate their measurements, and they use approximations based on experience and empirical data.
 Engineers emphasize the use of a disciplined process when creating and implementing designs and can operate effectively as part of a team in doing so.
 Engineers can have multiple roles: research, development, design, production, testing, construction, operations, and management in addition to others such as sales, consulting, and teaching.
 Engineers use tools to apply processes systematically. Therefore, the choice and use of appropriate tools is a key aspect of engineering.
 Engineers, via their professional societies, advance by the development and validation of principles, standards, and best practices.
 Engineers reuse designs and design artifacts.
Although strong similarities exist between software engineering and more traditional engineering, there are also some differences (not necessarily to the detriment of software engineering):
A key objective of any engineering program is to provide graduates with the tools necessary to begin professional engineering practice.
Software engineering education should include student experiences with the professional practice of software engineering.
Software engineering as a profession has obligations to society. The products produced by software engineers affect the lives and livelihoods of their clients and the product users. Hence, software engineers need to act ethically and professionally. The preamble to the joint ACM/IEEE Software Engineering Code of Ethics and Professional Practice [ACM 1998] states,
Because of their roles in developing software systems, software engineers have significant opportunities to do good or cause harm, to enable others to do good or cause harm, or to influence others to do good or cause harm. To ensure, as much as possible, that their efforts will be used for good, software engineers must commit themselves to making software engineering a beneficial and respected profession. In accordance with that commitment, software engineers shall adhere to the following Code of Ethics and Professional Practice.
To help ensure ethical and professional behavior, software engineering educators have an obligation not only to make their students familiar with this code, but also to find ways for students to engage in discussion and activities that illustrate and illuminate the code’s eight principles, including common dilemmas facing professional engineers in typical employment situations.
Graduates of an undergraduate SE program should be able to demonstrate the following qualities.
The following list of principles embraces both general computing principles as well as those that reflect the special nature of software engineering and that differentiate it from other computing disciplines.