CS 204: Software Design

Course Information

Books

Code Complete, 2nd ed, by Steve McConnell.
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 4, we will start using Java. For the final project, which will focus on user interface design, you will be free to use either Java or Python. Because we are in the midst of a transition from Java to Python in Intro to CS and Data Structures, some of you will know only Python and some only Java coming into this class. I will provide some in-class introduction to each language, and pointers to on-line tutorials and resources you can use to learn whichever language is new to you.

Working together

In this course, you may work with classmates on paper-and-pencil assignments. For programming assignments, you may consult with each other on ideas, but I want you each to write your own code. This course focusses on ways to make each of you a stronger software designer and developer, so individual practice is essential.

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 five or six 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 (e.g. an assignment on some of the finer points of Unix), 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. Readings from Code Complete.
Weeks 6-8: Object-oriented design. Readings from Head First Design Patterns.
Weeks 9-10: User interface design. Readings from a variety of on-line sources.
Finals week: Final project.