CS 204: Software Design

Course Information

Readings

During the first half of the term, I will post a variety of readings on this course's Moodle site.

For the middle portion of 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.

For the last week or two of the term, we will study user interface design and interaction design, with help from Designing Interfaces, by Jenifer Tidwell.

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, which will focus on user interface design, you will be free to use either Java or Python.

Working together

This course focusses 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 some paper-and-pencil work, several programming assignments, and a revision of a programming assignment. There will be no exams in this class.

Rough schedule

Weeks 1-5: Code construction and introduction to Java. Readings from a variety of sources, available via Moodle.
Weeks 6-8: Object-oriented design. Readings from Head First Design Patterns.
Weeks 9-10: User interface design. Readings from Designing Interfaces.
Finals week: Final project.