Software engineering is taught at EPFL by Prof. George Candea through a tandem of courses that cover the basics of modern software development. We focus on techniques and practices used to build computer software that meets high standards of quality, reliability, security, and maintainability. Real-world software differs from programs written in typical university courses: it is large and complex, it is developed by a team, it lives long and evolves and needs to be maintained, and it can cause serious harm if it fails.
Software engineering is a long-established field of computer science, with a wide range of techniques that have been proposed, a subset of which are actually in use, and of those a subset are of demonstrated value. In teaching software engineering we focus on three aspects: Which are the tools and practices of modern software? How do we produce high-quality software? How do we develop software in a team? The tools include version control systems, automated testing, and continuous integration. The practices include design patterns, defensive programming, modularity, abstraction, and agile development. Learning to work collaboratively with a team of people to write, test, and debug a single piece of software can be at times challenging and frustrating, but it is impossible for one person to produce software of the scale required by modern applications and systems. For this reason, we also hone the skills needed to develop software together with other people.
Being a good software engineer entails a continuous learning process. Unlike mathematics or physics, this field changes fast, thus making continuous and independent learning essential. This course prepares students to become lifelong auto-didacts who build upon the foundation of imutable principles that govern good software engineering.
Our course tandem consists of one part that teaches the principles and concepts of successful software engineering through lectures and exercises, while the other part applies the concepts to an extensive project whose outcome is a substantial Android app. The project requires a large amount of programming and project management, and is done in teams of students.
This repo contains related materials that we make available to the public. For EPFL-specific information, please see the course webpage.
- Exercises
- Bootcamp
- Lectures
- Midterm exam along with solutions
- Final exams along with solutions