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, encapsulation, data structures, databases, memory management, software development, virtualization, and websites. Languages include C, PHP, and JavaScript plus SQL, CSS, and XHTML. 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.
These lectures were filmed in Sanders Theatre in Memorial Hall. (Week 2 onward were filmed in HDV by Chris Thayer.) Notes were taken by Andrew Sellergren '08.
If you have questions or would like to discuss the material with others, you may want to join the Google Group at right.
Sections (otherwise known as "recitations" or "precepts" at other universities) supplement lectures. Led by Matthew Chartier '12, these sections were filmed in Harvard Hall.
Because Computer Science 50 is offered through Harvard Extension School as "Computer Science E-52", you may sometimes hear Matt refer to the latter. The courses are one and the same.
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. Most standard editions, though, are accompanied by code "walkthroughs" during which students receive direction on where to begin and how to approach the problem set. Led by Marta Bralic '11, these walkthroughs were filmed in Emerson Hall.
If you have questions or would like to discuss the material with others, you may want to join the Google Group at right. And if you'd like to implement these problem sets, you'll likely want to download the CS50 Appliance.
Below are quizzes; other answers may be possible. Reviews were led by Rose Cao '11, Matthew Chartier '12, Jesse Cohen '10, Derek Lietz '09, and Mike Teodorescu '11.
If you have questions or would like to discuss the material with others, you may want to join the Google Group at right.
Computer Science 50 (otherwise known as CS50) is Harvard College's introductory course for majors and non-majors alike, a one-semester amalgam of courses generally known as CS1 and CS2 taught mostly in C.
Even if you are not a student at Harvard, you are welcome to "take" this course via cs50.tv by following along via the Internet. (The course's own website is at www.cs50.net.) Available at left are videos of lectures, sections (aka "recitations" or "precepts"), and seminars along with PDFs of all handouts. Also available at left are the course's problem sets and quizzes. If you have questions or would like to discuss the material with others, do join the course's Google Group. The problem sets do assume that you have access to nice.fas.harvard.edu and cloud.cs50.net (servers on which Harvard students have accounts). But coming very soon to cs50.tv (by February 2010) is a downloadable virtual machine (for Linux, Mac OS, and Windows) that you can use to complete all of the problem sets on your own computer. Stay tuned!
If you're a teacher, you are welcome to adopt or adapt these materials for your own course, per the license.
If you'd like to take this course for real (on Harvard's campus or via the Internet) in order to receive feedback on work, grades, and a transcript, the course will next be offered through Harvard Extension School (as "Computer Science E-52") in Fall 2010. You can register online starting in August 2010.
Special thanks to Chris Thayer and Harvard Extension School for the course's videos and to Cansu Aydede '11 and Yuhki Yamashita '11, Fall 2009's heads.
Have a question about the course (even if you're not a student at Harvard)? Want to field questions from others? Join cs50-discuss, the course's Google Group!
We just created this group, so it's pretty quiet at the moment, but the course's staff will keep an eye on it for now!
So that this course is more accessible to individuals with disabilities and to individuals for whom English is not their native language, we are in the process of transcribing this course's videos in English and subtitling them in other languages.
If you would like to translate one or more videos on this site into another language, please let David know at malan@post.harvard.edu! Thanks to dotSUB.com, it's easy to do so (provided you know the language!). If curious as to what the process would be like, watch this tutorial on how to translate a video on dotSUB.
See the course's first lecture for an example of the work in progress. That lecture was transcribed in English by a human and translated into other languages using the Google AJAX Language API. (Realize, then, that the translations are not perfect!) If you would like to help improve the translations, though, do let David know at malan@post.harvard.edu!