This course offers PhD students an in-depth study of applied computer systems research: identifying and exploring new ideas, reducing them to practice via research prototypes, and evaluating them with empirical/formal approaches using quantitative/qualitative analyses. The material we study illustrates how an effective match between the statement of a problem in computer systems and the selection of an appropriate technique or algorithm can lead to fundamental advances. Emphasis is placed on the principles underlying successful systems, including engineering as well as economic/deployment issues. Students can expect to acquire skills that are critical to pursuing their own research in the field.

In general, we operate at the intersection of operating systems, distributed systems, databases, programming languages and compilers, and computer architecture. Every year we select a theme for the course and pursue it in depth through readings of both classic and contemporary research papers. In-class activities are focused on discussion and research debate, leading to sharpening of students' research skills.

The theme for 2011 will be testing and verification of real-world systems – how to check and ultimately prove that a complex body of software does what it is supposed to do and does not do what it is not supposed to do. The subject has been approached over the past decades from different perspectives, generating many ideas that do not work in practice and a few that do. We will study these ideas and understand the pros and cons of each one.