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.

[1]  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.

[2]  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.

[3]  Engineers measure things, and when appropriate, work quantitatively. They calibrate and validate their measurements, and they use approximations based on experience and empirical data.

[4]  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.

[5]  Engineers can have multiple roles: research, development, design, production, testing, construction, operations, and management in addition to others such as sales, consulting, and teaching.

[6]  Engineers use tools to apply processes systematically. Therefore, the choice and use of appropriate tools is a key aspect of engineering.

[7]  Engineers, via their professional societies, advance by the development and validation of principles, standards, and best practices.

[8]  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):

  • Software engineering’s foundations are primarily in computer science, not natural sciences.
  • Software engineering models make more use of discrete than continuous mathematics.
  • The concentration is on abstract/logical entities instead of concrete/physical artifacts.
  • There is no manufacturing phase in the traditional sense.
  • Software maintenance primarily refers to continued development, or evolution, and not to conventional wear and tear.
  • Software engineering is not always viewed as a “professional” activity. One concern for these curriculum guidelines is to help with the evolution of software engineering toward a more “professional” status.

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.

[Professional Knowledge]
Show mastery of software engineering knowledge and skills and of the professional standards necessary to begin practice as a software engineer.
[Technical Knowledge]
Demonstrate an understanding of and apply appropriate theories, models, and techniques that provide a basis for problem identification and analysis, software design, development, implementation, verification, and documentation.
[Teamwork]
Work both individually and as part of a team to develop and deliver quality software artifacts.
[End-User Awareness]
Demonstrate an understanding and appreciation of the importance of negotiation, effective work habits, leadership, and good communication with stakeholders in a typical software development environment.
[Design Solutions in Context]
Design appropriate solutions in one or more application domains using software engineering approaches that integrate ethical, social, legal, and economic concerns.
[Perform Trade-Offs]
Reconcile conflicting project objectives, finding acceptable compromises within the limitations of cost, time, knowledge, existing systems, and organizations.
[Continuing Professional Development]
Learn new models, techniques, and technologies as they emerge and appreciate the necessity of such continuing professional development.

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.

[Software Engineering in the Computing Spectrum]
Computing is a broad field that extends well beyond the boundaries of any one computing discipline.
[Reference Disciplines]
Software Engineering draws its foundations from a variety of disciplines.
[Curriculum Evolution]
The continuing evolution of software engineering knowledge, technology, applications, pedagogy, and practices together with the professional nature of software engineering require an ongoing review of the corresponding curriculum and an emphasis upon the importance of lifelong learning for graduates.