RIT's primary mission is career education in a variety of professional disciplines. Within engineering and computing this is interpreted to mean that graduates will have the knowledge and skills that:
- Help them obtain initial positions in their chosen fields.
- Support continued education at the graduate level.
- Provide a solid foundation for life-long professional growth.
In a field changing as rapidly as software engineering, reaching these goals is a daunting challenge. Still, it is our belief that the field has matured to the point where fundamental principles have been established, and these principles provide the background for specific program objectives. The current educational objectives for the program are that graduates:
- Have sufficient knowledge of programming, algorithms, and data structures to develop complex software systems.
- Have sufficient background in continuous mathematics and natural science to work effectively in teams with other engineering professionals.
- Have broad exposure to computing languages, environments, and concepts so that they can rapidly adapt to changes in the technology and tools they use.
- Can communicate technical concepts completely, concisely, and correctly, in both written documents and oral presentations.
- Can design and analyze software at the component, subsystem, and software architecture levels.
- Have a broad perspective on computing and software engineering, allowing them to make informed, sound software design tradeoffs.
- Understand and can contribute to improvements in an organization's software processes.
- Understand the importance of all phases of the software lifecycle, with special emphasis on the need to plan for evolution and change.
- Can participate as an effective member of a software development team.
While we believe these objectives are appropriate, we realize that they must be continuously reevaluated in terms of feedback from our primary constituencies: students and employers. In the case of students, cooperative education reports provide immediate but short-term evaluation of the curriculum. The program's Industrial Advisory Board (IAB) supplies a more strategic perspective - the IAB meets once a year to review the current status and to both initiate and evaluate changes to the curriculum.
Software Engineering Program Outcomes
The program's educational objectives above are longer range goals that graduates of the program may not completely achieve until several years after graduation. These program outcomes, on the other hand, are nearer term goals. By the time of their graduation, students in the software engineering program will have demonstrated the ability to:
- Model and analyze proposed and existing software systems, especially through the use of discrete mathematics and statistics.
- Apply quality principles to the definition and evaluation of software systems and processes.
- Analyze and design complex software systems using contemporary analysis and design principles such as cohesion and coupling, abstraction and encapsulation, design patterns, frameworks and architectural styles.
- Work in small teams to develop a software system. This includes the ability to assume distinct operational roles (e.g., configuration management, quality assurance) in addition to design and implementation.
- Assess the social, environmental, and cultural factors arising from existing software systems, as well as potential consequences of proposed systems with a clear understanding the ethical and professional responsibility incumbent upon them in different software development organizations (e.g., commercial off-the-shelf vs. safety-critical systems).
- Write concise and correct documents relating to all phases of the software development cycle and make oral presentations of technical material.
- Explore new topics in software engineering or related application domains with limited oversight and input from faculty or mentors.
- Rapidly learn, assess, and adapt to new languages, environments, and paradigms for software development.
- Relate principles of software engineering to at least one domain where those principles are or can be applied.
- Apply contemporary software engineering methods to planning, management and development of software projects.