This was CS50.00:00

  • We start with a nostalgic video of the semester, featuring lectures, office hours, lunches, and more.

  • Remember that, when we first began our adventure, we promised "what ultimately matters in this course is not so much where you end up relative to your classmates but where you, in Week 12, end up relative to yourself in Week 0."

  • And now, we can look back, from when this was our toughest challenge:


    to what we’ve done more recently:


    and to the final Problem Set, Mashup, where we used fancy Ajax, JavaScript calls, and HTTP requests, among other things, to create an entire web app.

  • 78% of you started with no prior experience, but hopefully now you’re among many new friends and supporters.

  • We traditionally start and end with cake, which will be waiting for you at the end of lecture.

  • Remember how one time David noticed Edible Arrangements' website was using HTTP and not HTTPS? Well he wrote to them, and they finally fixed their website:

    Edible Arrangements' web address

Final Projects05:00

  • All that’s left now is the final project, where you can create (almost) anything.

  • Many students take the simple framework from Problem Set 7 as the beginning of their project.

  • If you want to work with Ajax or import data sets, Problem Set 8 is a good example for how to get started with that too.

  • Another popular PHP framework, Laravel, adds features to PHP and lots of tools for your toolkit.

  • And if you wanted to put your code not just on the appliance but a server on the internet, many web hosting options are available. It’s relatively easy these days to buy a domain name, change its DNS settings, and upload your code so anyone can visit your website at the domain you buy. CS50’s homepage will add instructions for these things in the days to come.

    • A recommended option is Amazon Web Services (AWS), where CS50 actually runs many of its own servers in the cloud (with virtual machines). And we’ve actually had a seminar on AWS recently!

  • Parse is another service where it takes care of storing data in databases for you, so you can focus more on the front-end or user interface.

  • CS50 ID is also useful for authenticating users, at least those with a Harvard ID and PIN.

  • Mobile projects might also benefit from tools like PhoneGap or Titanium that allow you to write programs in JavaScript or some other language, and converts them so they can be used on multiple platforms.

  • After CS50, you might not be handed distribution code and specifications anymore (gasp), and you don’t even have to use the CS50 Appliance to code anymore (double gasp)!

  • For Macs, Windows, and Linux alike, there are lots of freely available tools you can use to set up your own development environment, without having to use the CS50 Appliance:

Remains and Reminders09:20

  • The CS50 Hackathon is coming up soon, starting Wed 12/3 7pm, and continuing through to 7am the next morning. There you’ll have your laptops and final projects and friends, with food provided not once, not twice, but three times throughout the night/morning.

  • The CS50 Fair is Mon 12/8, 11:30am - 4:30pm, where you’ll exhibit your final projects to students and attendees from across campus. There will be music, popcorn, candy, a photobooth, balloons, recruiters from industry, and a raffle with exciting prizes!


  • And then we were interrupted by a "Yale tour group."

  • Turns out, the tour group was led by none other than Sam Clark and On Harvard Time, from this infamous video.

  • And indeed, CS50 will be offered at both Harvard and Yale in Fall of 2015. Lectures will be streamed live, and a local support structure with teaching fellows and course assistants will be set up, with full sections and office hours available there as well.

  • We’ll invite our new friends to next year’s Puzzle Day and Hackathon, and hold a Fair in both Cambridge and New Haven.

  • If you have any friends at Yale who might be a good TF or CA, have them!

  • We’ll also send one of our best teaching fellows, Jason Hirschhorn, to work full time there and set up this amazing collaboration.

  • Let’s watch this video of David’s recent visit to Yale.

Thank Yous18:00

  • Let’s thank everyone who was on the team this year, making everything possible. In particular:

    • Colton, whose EDM has started lecture many times this year.

    • The production team, with Dan, Shelley, Andrew, Cheng, Colton, Ramon, Barry, Kenny, and others involved behind the camera.

    • Gabriel, our head TF, who translated our material to Portuguese some years ago, and lectured to his classmates in Brazil.

    • Daven, who has been managing the course.

    • Rob, who’s been involved for more than 5 years now, starting as assistant head TF, then head TF, then Preceptor, and now Member of Technical Staff (which is actually an honor in the computer science world)!

    • Allison, whose official sections have been an amazing resource for students unable to make sections.

    • Zamyla, who’s been at every single office hours this year, with her walkthroughs.

    • Cheng, who, along with production, appeared in this thank-you video to the staff, that we call Cheng on the Street.

  • We’re now recruiting for a variety of roles on the staff team, so check out our open positions at!

  • Colton, Gabe, and Taylor perform "Wake Me Up"!


  • Let’s take some students and staff, and form some teams to play Jeopardy!

  • We’ll be asking questions that were written by you, in Problem Set 8.

  • Team 3 starts by choosing Week 0, 500, and Team 2 answers "What is the difference between global and local variables?" correctly, with an explanation of scope.

  • But we’ll only take answers that are exactly what other students wrote, so Team 2 is now at -500.

  • Team 3 chooses Week 1, 500, which has the question "What are the data types and their sizes?"

  • Rob from Team 1 lists the sizes for char, short, int, long, long long, char*, int*, long long*, but the answer included float and double.

  • Team 1 chooses Week 4 for 500, "What must you always remember to do after you’re done with the memory you requested from malloc?" and Team 3 answers correctly with "`free` it."

  • They choose Week 3, 500, which is a Daily Double, and the question is, "In C, can you use a switch function to compare strings?" They answer correctly with "no!"

  • Next, we get Week 0 for 100: How do you make a cat say "hello, world"?

  • Team 2 answers, "with the say block in MIT’s Scratch program," but the answer is "cats only say meow."

  • Then we go to Week 3, 100, "What is the best case scenario for bubble sort?" Team 3 answers with "it’s in order" but the correct answer is "In the best case scenario I don’t have to sort lists."

  • Moving on to the second round, we start with Week 6, 1000, "How does the stack grow," and Team 2 answers with "adding a new function to scope," but the correct answer is "grows up."

  • Week 8, 1000, reads: "T/F: Is HTML a programming language." Rob answers "false," with the answer "no," losing 1000 points for the staff team.

  • Week 9, 1000: "What’s the difference between ID and class?" Team 3 answers correctly with "You can apply ID to one thing in HTML but you can apply class to many things"

  • Week 9, 200: "What symbol do all PHP variables start with?" Rob answers, "hashtag."

  • And now, Final Jeopardy, with the category Week 12.

  • The question is: "What comes next in this sequence of numbers? 2, 4, 8, 16, 32."

  • All the teams answer correctly with 955, with Team 3 taking the game!

  • That’s it for CS50 2014! Colton plays us out.