This is CS50x.



David J. Malan ‘99


Introduction to the intellectual enterprises of computer science and the art of programming. This course teaches students how to think algorithmically and solve problems efficiently. Topics include abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web development. Languages include C, PHP, and JavaScript plus SQL, CSS, and HTML. Problem sets inspired by real-world domains of biology, cryptography, finance, forensics, and gaming. Designed for concentrators and non-concentrators alike, with or without prior programming experience.


You are expected to watch all lectures and sections, submit eight problem sets, take two quizzes, and implement a final project.


Students who earn a passing grade (60% or higher) on 8 problem sets, 2 quizzes, and a final project will receive an honor code certificate from HarvardX that can be downloaded as a PDF from edX’s website after 15 April 2013.


No books are required for this course. However, you may want to supplement your preparation for or review of some lectures with self-assigned readings relevant to those lectures’ content from either of the books below. The first is intended for those inexperienced in (or less comfortable with the idea of) programming. The second is intended for those experienced in (or more comfortable with the idea of) programming. Realize that free, if not superior, resources can be found on the course’s website.

For Those Less Comfortable

Absolute Beginner’s Guide to C, Second Edition Greg Perry Sams Publishing, 1994 ISBN 0-672-30510-0

For Those More Comfortable

Programming in C, Third Edition Stephen Kochan Sams Publishing, 2004 ISBN 0-672-32666-3

The book below is recommended for those interested in understanding how their own computers work for personal edification.

How Computers Work, Ninth Edition Ron White Que Publishing, 2007 ISBN 0-7897-3613-6

This last book below is recommended for aspiring hackers, those interested in programming tricks and low-level optimization of code for applications beyond the scope of this course.

Hacker’s Delight Henry S. Warren Jr. Addison-Wesley, 2003 ISBN 0-201-91465-4


The address of this course’s website is:

Visit the course’s website to watch videos, to get help, to download handouts and software, and to follow links to other resources.


A schedule of lectures, subject to change, appears below.


Lectures are supplemented by weekly, 90-minute sections led by the teaching fellows. Sections provide you with opportunities to explore the course’s material in a more intimate environment as well as to dive into hands-on activities.

Different sections are offered for those less comfortable and those more comfortable.


For each problem set, the teaching fellows hold a “walkthrough” for the upcoming week’s problem set during which you receive direction on where to begin and how to approach the week’s challenges.

Problem Sets

Eight problem sets are assigned during the semester. Each is due via electronic submission anytime before 15 April 2013.

In order to accommodate students with different backgrounds, some problem sets are released in two editions: a standard edition intended for most students and a “Hacker Edition” intended for some students. Both editions essentially cover the same material. But the Hacker Edition typically presents that material from a more technical angle and poses more sophisticated questions. To receive an honor code certificate from HarvardX, you must submit the standard editions of problem sets. But you are welcome to do the Hacker Editions for your own edification; it just won’t be possible to submit Hacker Editions for credit (or extra credit).**


The course has two quizzes, each of which you must take via edX’s website anytime after 19 December 2012 and before 15 April 2013.

Final Project

The climax of this course is its final project. The final project is your opportunity to take your newfound savvy with programming out for a spin and develop your very own piece of software. So long as your project draws upon this course’s lessons, the nature of your project is entirely up to you. You may implement your project in any language(s). You are welcome to utilize infrastructure other than the CS50 Appliance. All that we ask is that you build something of interest to you, that you solve an actual problem, or that you change the world. Strive to create something that outlives this course.

Inasmuch as software development is rarely a one-person effort, you are allowed an opportunity to collaborate with one or two classmates for this final project. Needless to say, it is expected that every student in any such group contribute equally to the design and implementation of that group’s project. Moreover, it is expected that the scope of a two- or three-person group’s project be, respectively, twice or thrice that of a typical one-person project. A one-person project, mind you, should entail more time and effort than is required by each of the course’s problem sets.

See for details.

CS50 Expo

Toward the course’s end will be the CS50 Expo, an epic display of final projects. As part of your final project’s submission, you will be asked to create a 1- to 2-minute video in which you demo your project for the world to see.

See for details.

Academic Honesty

All work that you do toward fulfillment of this course’s expectations must be your own unless collaboration is explicitly allowed in writing by the course’s instructor. Collaboration in the completion of problem sets is not permitted unless otherwise stated by some problem set’s specification.

Viewing or copying another individual’s work (even if left by a printer, stored in an executable directory, or posted online) or lifting material from a book, website, or other source—even in part—and presenting it as your own constitutes academic dishonesty, as does showing or giving your work, even in part, to another student or soliciting the work of another individual. Similarly is dual submission academic dishonesty: you may not submit the same or similar work to this course that you have submitted or will submit to another. Nor may you provide or make available solutions to problem sets to individuals who take or may take this course in the future.

You are welcome to discuss the course’s material with others in order to better understand it. You may even discuss problem sets with classmates, but you may not share code. In other words, you may communicate with classmates in English, but you may not communicate in, say, C.

You may turn to the Web for instruction beyond the course’s lectures and sections, for references, and for solutions to technical difficulties, but not for outright solutions to problems on problem sets or your own final project. However, failure to cite (as with comments) the origin of any code or technique that you do discover outside of the course’s lectures and sections (even while respecting these constraints) and then integrate into your own work may be considered academic dishonesty.