CS51: Abstraction and Design in Computer Programming

CS51 Course Description

Professors
Radhika Nagpal
Maxwell-Dworkin 235
rad@eecs
http://www.eecs.harvard.edu/~rad/

Teaching Fellows
Thomas Carriero, carriero@fas
Anjuli Kannan, akannan@fas
Avi Shinnar, shinnar@eecs
Gideon Wald, gwald@fas
Greg Poulos, gpoulos@fas
Julius Degesys, degesys@fas
Mike Tucker, mtucker@eecs
Prabhas Pokharel, pokharel@fas
Roy Shi, rshi@fas
Ryan Wisnesky, ryan@eecs
Stephen Chang, stchang@fas
Tova Wiener, twiener@fas
Will Phan, phan2@fas

Course Description:

This course is about abstraction and design: understanding how to design large programs to make them clear, readable, maintainable, efficient and elegant. We will explore how different types of abstractions and programming models give us the power to systematically tackle complex problems; ultimately, a programming language is itself an abstraction that you can design and implement.

Course Information:

Course Website: http://www.fas.harvard.edu/lib51
See course website for section times and office hours

Course Prerequisites:

Computer Science 50 or equivalent programming experience

Course Requirements:

20% Midterm (inclass, closed book)
20% Final (inclass, closed book)
60% Homework Assigments

Course Policies:

5 total late days for the semester
Assignments 2, 3, 7, 8 and 9 will involve working in pairs
For more details see course policy link on the website

Textbooks

All of the textbooks below are required. SICP is available online however we will be assigning significant reading from it.
  • Abelson and Sussman, Structure and Interpretation of Computer Programs (online at http://www.mitpress.mit.edu/sicp/full-text/book/book.html)
  • Lippman, Essential C++