TA Office Hours: TBD
NOTE: This course is open to undergraduates who have completed CSE 110 and 131. CSE 218 can be repeated for credit, although it cannot be taken with the same instructor 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.
Each week there will be assigned readings for in-class discussion, followed by a lab session. Each week, you must engage the ideas in the Thursday discussion by doing a "micro-project" on a common code base used by the whole class: write a little code, sketch some diagrams or models, restructure some existing code or the like.