Software Construction

Beyond specific domain skills, building software is a craft that requires careful design. This course teaches key software design principles in a studio setting. Each week, students present their programs to the class for a design review. Together, the class evaluates the programs for their correctness and, more importantly, their clarity and design.

Expect to learn how to build reliable, maintainable, extensible software and how to evaluate other’s code for those same properties.


Code Walks

You must join the piazza group. Occasionally, important announcements are posted there between classes.

Sign Up
Course page
Reccommended texts
Gamma, Helm, Johnson, Vlissides Design Patterns: Elements of Reusable Object-Oriented Software. This text plays the role that a writing guide plays for an essayist, but for a programmer.

Felleisen, Findler, Flatt, Krishnamurthi How to Design Programs
Beck Extreme Programming Explained
Fowler, Scott UML Distilled
Pair Programming
All projects must be implemented via pair programming. Pair programming means that you do all programming together. Any time either you or your partner type a single keystroke towards what you hand in, you must be together. Thinking about the project separately is fine, but not working on it.

You must choose a partner with whom you wish to work on projects as soon as possible. You may switch partners after consulting with the course staff and discussing the work log together.
Journal & Estimates
Each person must keep a work journal (individually). Every time you work on something related to this course, enter the following information (one line each):
  • what (topic),
  • when (date, time),
  • where (location),
  • who (working partner),
  • and how long (duration).
Please estimate at the beginning of each project how much time you think it will take. Enter the estimate in your journal. As the course progresses, try to understand how much you over/underestimate and try to correct for it. We will review the notebooks in case of conflicts and in case of borderline grades.
Programming Language

For in-class demonstrations and discussions, I will use UML diagrams, Java and possibly some constructs from Racket.

For projects, you are free to choose whatever language you wish to use. You may also switch your language of choice over the course of the quarter.

Mostly, there will be one assignment per week. The assignments will include a short essay, modifications of a Java program, designing and implementing programs from scratch, and maintaining/modifying your own code.

Grades are assigned based on two factors: your class participation and your code presentations. Your weekly homework may have some influence in boundary cases.

Robby Findler Office hour: W 1-2pm, Ford 2.210
Dan Feltey Office hours: M 1-2pm and Th 5-6pm, Ford 2.210
Robby Findler