Software Design (CS223 2004F)

Front Door

Welcome to the Fall 2004 session of Grinnell College's CSC 223, Software Design. This course serves many purposes: It helps you develop your group work skills, it makes you a better programmer, it exposes you to a variety of perspectives on the construction of software, and it gives you a particularly hands-on perspective on computer science.

In an attempt to provide up-to-date information, and to spare a few trees, I am making this as much of a paperless course as I can. Hence, materials will be in a course web.

Warning! Computers are sentient, stupid, and malicious. When things go wrong, don't blame yourself. Ask me for help.


Meets: MWF 9:00-9:50, Science 2417 (The MathLAN)

Instructor: Samuel A. Rebelsky (, Science 2427. Office hours: To be determined. I also tend to follow an open door policy: Feel free to stop by when my door is open or to make an appointment for another time. Check my schedule for more details.

Teaching Assistant: Daren Brantley. Daren will set up office hours to consult on homework assignments and other questions you have on the course.

Grading (subject to change):

Late Assignments: My experience shows that students who turn in work late learn significantly less than students who turn material in on time. (I'm not sure about cause and effect.) Hence, I strongly discourage late assignments. Unless prior arrangements have been made, assignments are due within five minutes of the start of class. After that they are considered late. Late assignments are penalized one letter grade per day late (or fraction thereof).

Because I am concerned about your health and well being, I will waive the late penalty if (1) you start the assignment at least three days in advance of the due date; (2) you get to sleep by midnight the night before the assignment is due; (3) you expend a reasonable amount of effort to complete the assignment by midnight; (4) you turn in a form attesting to facts (1), (2), and (3) when the assignment is due; and (5) you talk to me ASAP about any problems you've had on the assignment.

Extra Credit: Throughout the term, I may suggest forms of extra credit.

Required Books

Rather than relying on traditional textbooks, I've chosen a few classics (or near-classics) that practicing programmers often keep at hand. We will also refer to a number of Web resources, which will be announced as the semester progresses.

Martin Fowler; UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition; Addison-Wesley; ISBN 0321193687. Also available from

UML is a visual language used to describe the design of object-oriented systems. To converse well about OOP, you need to read and write UML well. This short book provides a nice introduction.

Kent Beck; Extreme Programming Explained: Embrace Change; Addison-Wesley; ISBN 0201616416. Also available from

There are many software design strategies. XP is one of the agile programming strategies which acknowledge that software design involves much more of a moving target than does traditional engineering. This book serves as a basic manifesto for XP.

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides; Design Patterns; Addison-Wesley; ISBN 0201633612. Available cheaper on CD-ROM (ISBN 0201634988).

The classic book on design patterns: Common design strategies for common categories of problems. Dense, but useful.

Arthur Riel; Object-Oriented Design Heuristics; Addison-Wesley; ISBN 020163385X. Also available from

Rather than focusing on patterns, Riel focuses on general strategies for approach the design of programs, classes, and objects. The most textbook-like of the books for this course.

Disclaimer: I usually create these pages on the fly, which means that I rarely proofread them and they may contain bad grammar and incorrect details. It also means that I tend to update them regularly (see the history for more details). Feel free to contact me with any suggestions for changes.

This document was generated by Siteweaver on Wed Dec 8 09:09:55 2004.
The source to the document was last modified on Wed Dec 8 09:09:52 2004.
This document may be found at

You may wish to validate this document's HTML ; Valid CSS! ; Check with Bobby

Samuel A. Rebelsky,