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, submit nine problem sets, and implement a final project.


Students who earn a satisfactory grade (60% or higher) on every one of nine problem sets and on a final project will receive an honor code certificate from HarvardX as a downloadable, printable PDF.


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.


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 review the course’s material.

Problem Sets

Nine problem sets are assigned during the year. Each is due via electronic submission anytime before 31 December 2014. 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).**


Unlike CS50 itself, CS50x (the edX version of CS50) does not have any quizzes.

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 Fair

Toward the course’s end will be the CS50 Fair, an epic display of final projects online. 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

This course’s philosophy on academic honesty is best stated as “be reasonable.” The course recognizes that interactions with classmates and others can facilitate mastery of the course’s material. However, there remains a line between enlisting the help of another and submitting the work of another. This policy characterizes both sides of that line.

The essence of all work that you submit to this course must be your own. Collaboration on problem sets is not permitted except to the extent that you may ask classmates and others for help so long as that help does not reduce to another doing your work for you. Generally speaking, when asking for help, you may show your code to others, but you may not view theirs, so long as you and they respect this policy’s other constraints. Collaboration on the course’s final project is permitted to the extent prescribed by its specification.

Below are rules of thumb that (inexhaustively) characterize acts that the course considers reasonable and not reasonable. If in doubt as to whether some act is reasonable, do not commit it.


Not Reasonable