We teach software engineering as a pair of two complementary courses, SwEng and SDP:
SwEng: Software Engineering (6 credits) provides the foundations of becoming a good software engineer: how to think about software, how to structure software, how to modify it, and how to evaluate it. This course provides the basic tools and concepts necessary in building software artifacts that are reliable, dependable, usable, safe, and secure. Students learn best practices for developing, organizing and managing software projects, along with responding in an agile manner to changes in requirements and conditions. Regular exercises serve to ground in practice the concepts learned in lecture.
SDP: Software Development Project (4 credits) provides a taste of developing software in the real world, working in large teams, developing based on code bases that cannot be comprehended in their entirety, and interacting with real customers. Planning a feature, estimating total cost, packaging it up for distribution and maintenance is something that inexperienced developers never get right, but is often vital for the success of a software project. Mediating between the needs of customers and the turn-coffee-into-code hacker attitude requires understanding both sides of the equation. We pretend we are a startup and develop from the ground up a real application that has the EPFL community as a customer. An example of what we developed in past iterations of SDP is PocketCampus.
It is generally accepted that there is an order of magnitude difference in the productivity and programming quality of a top-10% developer vs. an average developer. Our goal in SwEng and SDP is to help students evolve from mere programmers to top-10% software developers. SwEng and SDP are designed to be taken together, as one big 10-credit course; taking them together is easier and less time-consuming than taking two separate courses.