Software Engineering

Future students

Software engineering applies both computer science and engineering philosophy, principles, and practices to the design and development of software systems.

It is a disciplined approach to software development that includes negotiating and documenting the software's requirements, following fundamental design principles, analyzing design alternatives, and evaluating whether the final product meets its requirements. Such evaluation not only checks that a product functions correctly, but also determines that it is safe, reliable, maintainable, and economical to produce and to operate.

A software engineer's work is not entirely technical. Software engineering projects tend to involve large numbers of people. So software engineers must be able to work well in teams. They may also have to interact with specialists from other disciplines, who may have varied levels of software expertise. This work calls for strong communication, business, and reasoning skills.

Software Engineering at Waterloo

Waterloo's Software Engineering degree program builds on the Universities' strengths in Computer Science and Engineering. Your studies will not only include a solid foundation in mathematics, science, engineering, and computer science, but will also cover fundamental concepts of the software development process, project management, and proper technical documentation. You'll apply these techniques to create and maintain complex software systems, in areas such as telecommunications, computer graphics, scientific computing, and financial systems. Because software engineering projects tend to involve large numbers of people, much of your work will involve teamwork. This experience will help you to develop strong communication, interpersonal, and reasoning skills.

The program produces graduates who are capable of developing high-quality software systems. It emphasizes:

  • Early development activities, including requirements elicitation, analysis, and specification, which help to reveal errors early in the development process, when they are cheaper and easier to fix
  • Systematic, predictable processes that help to ensure that a software product satisfies its requirements
  • Consideration of non-functional properties—such as performance, maintainability, usability, economy and time-to-market—that often determine whether a software product is acceptable
  • Practices that help to coordinate the activities of large project groups

This is a project-intensive program in which students learn by example and by practice. Theory and practices are introduced by applying them to relevant software engineering problems; they are reinforced through case studies, exercises, and projects.

Demand for software engineers

Over the last few decades, information technology has grown dramatically, with significant impact to both the global economy and everyday life. Computing power has increased rapidly while the costs of hardware and communications have dropped, making it increasingly more economical to implement systems in software rather than hardware. Mechanical devices in automobiles, airplanes, and power plants are being replaced by software components because software is more adaptable, can provide more functionality, and can be upgraded more easily to accommodate future needs. Software is used in medical devices, transportation systems, and financial systems to automate repetitive but critical tasks. Scientists and business researchers use software to sift through data warehouses and to identify pertinent facts and trends. Banking, insurance, telecommunications, and other service industries use software to automate and personalize the services they offer to their customers. As software applications have grown more complex, there has been a surge in the demand for software engineers who have the knowledge and expertise to develop high-quality software systems.