This is an HTML rendering of a working paper draft that led to a publication. The publication should always be cited in preference to this draft using the following reference:
© ACM, 2006. This is the author's version of the work. It is posted here by permission of ACM for your personal use. Not for redistribution. The definitive version was published in Communications of the ACM, 49(8):13, 2006. http://doi.acm.org/10.1145/1145287.1145299.
In his "President's Letter" ("Computer Science Education in the 21st Century," Mar. 2006) David A. Patterson suggested creating a course that would leverage high-quality examples from open source software. I've been teaching just such a course for the past three years at the Athens University of Economics and Business. The lectures (see www.dmst.aueb.gr/dds/ismr/) focus on how students comprehend, evaluate, maintain, and enhance large software systems. Students' grades are derived by assessing their contribution to an open source project they select based on their own interests. The course's theoretical background is covered in my books Code Reading and Code Quality: The Open Source Perspective (Addison-Wesley, 2003 and 2006, respectively); all the examples I use come exclusively from large existing open source projects. Two of the software systems I use for drawing examples are the very ones Patterson mentioned in his column: BSD Unix and PostgreSQL. I also use the source code of other systems (such as the Java HSQLDB database engine, the Apache Tomcat application server, the ACE networking framework, the X Window System, ArgoUML, and Perl) to cover subjects like object-oriented programming in Java and C++, networking, language processors, and graphics.Diomidis Spinellis