Future students
Software engineering combines computer science expertise with engineering processes, practices, and design patterns that aim to improve both the productivity of software developers and the quality of the software product.
The program covers the development of software products from start to finish, including determining and articulating what software should be built, architecting the system, considering design trade-offs, and assessing the quality of the developed product. Quality assurance not only checks that the 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 be large, 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 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 be large, 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
- Design patterns and design trade-offs, which speed up the tasks of making and justifying critical design decisions
- Consideration of non-functional properties—such as performance, maintainability, usability, economy and time-to-market—that often determine whether a software product is acceptable
- Strategies for reducing the cost and effort to assess the quality of developed code.
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.
Artificial Intelligence is revolutionizing technology, and software engineering is at the heart of this transformation. Far from being replaced, software engineers are essential for specifying, designing, evaluating, and maintaining the systems that employ and power AI. These advancements open new opportunities for innovation, requiring expertise in specification, software architecture, scalability, security, and ethical design.
AI tools enhance productivity by automating routine tasks, allowing engineers to focus on creative problem-solving, system optimization, and developing intelligent applications. The integration of AI into software systems is creating exciting new career paths, making software engineering one of the most dynamic and future-ready fields.