CS 204: Software Design

Course Information

Readings

A few times, I'll ask you to do readings from various sources not including your textbooks. In those cases, the readings will be posted on the course's Moodle site since it's not legal to post them on the public Internet.

A few weeks into the course, we'll start talking about user interface design, with help from About Face 3, by Alan Cooper, Robert Reimann, and David Cronin.

Starting about halfway through the course, we will focus on object-oriented design, with readings from Head First Design Patterns, by Elisabeth Freeman, Eric Freeman, Bert Bates, and Kathy Sierra.

Languages

During the first portion of the course, we will be using Python. At about week 3 or 4, we will start using Java, for which I will provide some introductory lectures, tutorials, and exercises. For the final project, you will be free to use either Java or Python.

Working together

This course focuses on ways to make each of you a better software designer and developer. If you learn most effectively by tackling a problem on your own, then you should work alone. If you gain more by bouncing ideas off another person, you may work with a partner on any assignment (but no groups of three or larger).

Code reviews

For two programming assignments during this term, we will have code reviews. For our purposes, a code review will be a meeting of 4-6 students plus me, during which we will discuss the strengths and weaknesses of each student's solution of a particular programming problem. Code reviews are one of the most efficient and powerful tools I know of for improving your software, but of course most people feel a fair amount of apprehension at the idea of discussing their code in detail in front of other people. Thus, it's essential that each participant in a code review prepare thoroughly by studying everybody else's code, and by preparing both positive comments and constructive criticism. We'll discuss this in some detail a few days before the first code review.

Grading

Your grade will be based on your performance on a variety of assignments, and and on your participation in the two code reviews we will hold during the term. The assignments will include a little bit of writing, several programming assignments, and a revision of a programming assignment. There will be no exams in this class.