What is software engineering?
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.
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.
Software Engineering at Waterloo
Waterloo's Software Engineering degree program builds on the University's 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.
- 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.
The curriculum is designed to prepare students for entry into the software engineering profession. Math and science courses give students the background they need to understand computing fundamentals and to model and reason about software behaviour. Computer science and computer engineering courses show students how to design and how to solve problems in digital hardware and software. Core software engineering courses cover best software-development practices, including development processes, design criteria and analysis, technical documentation, testing and verification, and project management. Technical electives cover advanced and specialized design techniques, and they give students the opportunity to apply their knowledge in developing large complex software systems.
Graduates of the program will be able to:
Negotiate the requirements for a new feature or product
Specify and implement a software solution to meet those requirements
Analyze alternative software architectures and design trade-offs
Identify and adapt design patterns
Evaluate whether the final software product meets its requirements
Understand and extend existing software systems
Software Engineering Class Profile
The Software Engineering Class Profile is a student-initiative focused on showcasing what the program was like for students. It covers content covering co-op, background, academics, lifestyle, future plans, and answers questions such as “Does it matter if I started coding later than everyone else?” or “How much debt do students graduate with?”
You can view the class profile at https://classprofile.andyzhang.net.