Software Engineering

This program of study is designed for associate-degree students intending to transfer into baccalaureate programs awarding software engineering degrees. This software engineering curriculum is closely aligned with the computer science transfer degree program and shares a significant amount of coursework.

Given that software engineering is built upon the foundations of both computer science and engineering, a software engineering curriculum can be approached from either a computer science-first or software engineering-first perspective; there clearly is merit in both approaches. While some suggest that the engineering-first approach better ensures that students develop a proper sense of the field in the context of engineering, the computer science-first approach is much more pragmatic at two-year colleges.

Software engineering spans the entire software lifecycle - it involves creating high-quality, reliable programs in a systematic, controlled, and efficient manner using formal methods for specification, evaluation, analysis and design, implementation, testing and maintenance. Many software products are among the most complex of man-made systems, requiring software development techniques and processes that successfully scale to large applications which satisfy timing, size, and security requirements all within acceptable timeframes and budgets. For these reasons, software engineering requires both the analytical and descriptive tools developed in computer science and the rigor that the engineering disciplines bring to the reliability and trustworthiness of the systems that software developers design and implement while working cohesively in a team environment.

In particular, the field of software engineering:
- Must be viewed as a discipline with stronger ties to computer science than it has to other engineering fields.
- Must share common characteristics with other engineering disciplines, including quantitative measurement, structured decision making, effective use of tools, and reusable software components.
- Must apply engineering methods and practices to the development of software, with special emphasis on the development of large software systems.
- Must integrate the principles of mathematics and computer science with engineering methodologies to create extensible software.
- Must include secure code standards and quality control concepts of manufacturing process design.
- Must emphasize communication skills, teamwork skills, and professional principles and best practices.

The mathematics of discrete structures underlies all computing fields, including software engineering, and is core to the software engineering curriculum. This course can be meaningfully supplemented by an additional course devoted to statistics and empirical methods; not dissimilar from a statistics course offered frequently in the two-year college setting, such a course may be necessary for the upper division software engineering curriculum at some transfer institutions. It should also be noted that in order to fulfill articulation agreements with some transfer institutions students may also need to complete a more complete calculus sequence (or additionally, linear algebra and/or differential equations).

Some two-year colleges offer introductory engineering courses, providing an overview of the many individual disciplines constituting the world of engineering. These courses often engage students in stimulating activities that peak their interests and set the stage for career choices in such fields. Students pursuing software engineering degree programs would strengthen their insights into engineering by completing such coursework.

In their upper division work, students will focus their emerging software engineering skills in a particular application area of interest to them. The foundation for that selection may be laid in various elective courses that students pursue in the lower division. These could include courses in business and finance; biology and health sciences; mathematics and statistics; and information technology.

Effective oral and written communications abilities are of critical importance to software engineering professionals; therefore, students should be required to complete communications courses as part of this degree program. These skills must be identified, developed, nurtured and incorporated throughout a software engineering curriculum. Students must master effective writing, speaking, and listening abilities, and then consistently demonstrate those talents in a variety of settings, including formal and informal, large group and one-on-one, technical and non-technical, point and counter-point.

Professional software engineers have a responsibility to society and their work carries significant liabilities. Consequently, software engineers must conduct themselves in an ethical and professional manner. The preamble to the Software Engineering Code of Ethics and Professional Practice [ACM 1999] 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." Hence, instructors must ensure that the software engineering curriculum forces students to become familiar with the Code, and engages them in discussions and activities that emphasize the eight principles of the Code.