The technical goal of the course is to expose students to the practice of programming at a reasonably large scale. This version of the course teaches how the program design principles of the three major prerequisite courses scale to a large code base. Indeed, without relying on such fundamental design principles, a large code base may quickly become prohibitively complex and incomprehensible.

The social goal of the courses is to continue the development of collaboration and communication skills from the prerequisite programming courses. Going beyond pair programming, the course introduces panel-based code reviews. Students present their solutions to their peers on a panel (and the class). Both presenting code and understanding such presentations are critical skills for the modern software developer.


This course is the end of the programming sequence Fundamentals I, Fundamentals II, Object-Oriented Design. In addition, it assumes you have been out to one co-op co-op. Knowledge of Logic in Computer Science will be helpful to any discerning software engineer.

Design Rationale of the Undergraduate Curriculum

For a detailed discussion of the role of Software Development in the undergraduate programming curriculum, you may wish to read Developing Developers.

What this course isn’t

Our goal is not to teach you a programming language (there are other classes for that), popular libraries (they never stay popular for long), or low-level programming (there are other courses that focus on it), or ...