Resources All Students Should Visit

Margo’s 101 Pet Peeves on Writing

Margo’s Tips on Writing a Thesis

Engineering Maxims


Current Courses

Winter 1 2022: CPSC 508: Graduate Operating Systems

This course is an introduction to operating systems research. By reading a collection of papers spanning the history of operating systems, we will gain the requisite context to undertake a research project in the broad area of Computer Systems. Class meetings will be highly interactive and will focus as much (or even more) on research approach and methodology as on the specific content of the papers. After completing this course, students should be able to:

  • Read systems papers critically.
  • Expain how modern systems research fits into the historical context.
  • Identify open research problems in systems.
  • Write constructive paper reviews.
  • Design a research project to address an open research problem.
  • Carry out a research project and present results both orally and in writing.

Past Courses

Winter 2 2020: CPSC 508: Graduate Operating Systems

Winter 1 2019: CPSC 508: Graduate Operating Systems

Courses I have taught in the past at Harvard

FALL 2016: CS261 — Graduate Operating Systems

This course offers a quantitative approach to operating system design and evaluation. We discuss historic and current research including extensible operating system architectures, distributed systems, and performance analysis. The goal of the course is to provide students both a firm background in operating systems research as well as an introduction ot the techniques and methodology required to conduct systems’ research.

FALL 2016: CS61 – Systems Programming and Machine Organization

CS 61 is an introduction to the fundamentals of computer systems programming. Topics include C and assembly language programming, performance analysis and improvement strategies, memory management, caching, concurrency, threads, and synchronization. CS 61 will help you develop the skills to write programs for the real world, where performance and robustness really matter. It will also prepare you for more advanced CS courses, including operating systems, compilers and programming languages, architecture, and graphics. CS 61 is suitable for both computer science concentrators and non-concentrators. We want CS 61 to be fun and challenging, but not necessarily to require tons of work. Computer systems rock!

Spring 2016: CS161 : Operating Systems

This course covers the fundamental concepts of operating system design and implementation. Lectures present the central ideas and concepts and explain how they are manifested in real operating systems. The programming assignments provide an opportunity for students to gain experience designing and implementing parts of an actual operating system, called OS/161. This year we will assume that students have already taken CS61. This means that the workload should be somewhat lighter and more focused on core operating systems issues, because we believe students understand aspects of concurrency, synchronization, and systems programming. That said, operating systems are complex, asynchronous systems and, as such, introduce a class of bugs that most students will never have encountered before. Implementing an operating system is challenging and time-consuming, but it is also immensely rewarding, fun, and useful. If you have not taken CS61 but are interested in CS161, please come see me!

CS50 Introduction to Computer Science I

Introduction to the intellectual enterprises of computer science. Algorithms: their design, specification, and analysis. Software development: problem decomposition, abstraction, data structures, implementation, debugging, testing. Architecture of computers: low-level data representation and instruction processing. Computer systems: programming languages, compilers, operating systems. Computers in the real world: networks, security and cryptography, artifical intelligence, social issues. Laboratory exercises include extensive programming in the C language.

CS51 Introduction to Computer Science II

This course introduces students to functional and object-oriented programming. We present abstract models for computational processes and their concrete realizations. The course uses the Scheme and C++ languages.