Bill Griswold
NOTE: Those wishing to take the ubiquitous computing version of this class should contact me.
NOTE: This course is open to undergraduates who have completed CSE 131 or 110. CSE 218 can be repeated for credit, although it cannot be taken with me twice.
Programmers and software designers/architects are often concerned about the modularity of their systems, because effective modularity reaps a host of benefits for those working on the system, including ease of construction, ease of change, and ease of testing, to name just a few. Other possible benefits are reuse (e.g., in software product lines) and online adaptability.
This course will be an open exploration of modularity - methods, tools, and benefits. In the process we will confront many challenges, conundrums, and open questions regarding modularity.
In this class we will explore defensive design and the tools that can help a designer redesign a software system after it has already been implemented. Defensive design techniques that we will explore include information hiding, layering, and object-oriented design. In the area of tools, we will be looking at a variety of pattern matching, transformation, and visualization tools.
This course will be run largely as a readings seminar with in-class discussions, although I also plan some lab sessions. For each class, you must engage the ideas in the paper by doing a "micro-project": write a little code, sketch some diagrams or models, restructure some existing code or the like. You might want to base your micro-projects on code you are familiar with. You may also find it valuable (and faster) if you used the same one or two projects throughout the course.