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 code for those
You must subscribe to the mailing list. Occasionally, important
announcements are posted there between classes.
Subscribe / Info
Gamma, Helm, Johnson, Vlissides
Design Patterns: Elements of Reusable Object-Oriented Software.
Addison-Wesley, Reading MA 1995.
The text is as necessary for a software developer as a dictionary for an English writer.
Felleisen, Findler, Flatt, Krishnamurthi
How to Design Programs
MIT Press, Cambridge MA 2001
Extreme Programming Explained
Addison-Wesley, Reading MA 1999
Addison-Wesley, Reading MA 1997
All projects must be implemented via pair programming.
Pair programming means that you do all things together.
That is, 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.
For in-class demonstrations and discussions,
I will use UML diagrams, Java and possibly some
OO concepts from research languages such as
Scheme or scripting languages such as Python.
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 semester.
On average there will be one assignment per week. The assignments
will include writing short essays, modifications of Java programs,
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.