CS50 - Section 12

Section Information

Semester Schedule

1/1/96 - 1/9/96
Extended office hours (at least for me). I'll try to make myself available as much as I can during this period (although I also will have other time commitments during that week).

1/9/96 5:00pm
Your project is due! Late days cannot be applied to the project, and late projects will be rejected. Get this done on time.

1/10/96 9:00?
Presentation of final projects (voluntary), exam review, and end of semester celebration. Exact time and location are not nailed down yet. If you have a problem with this time, but want to participate, please let me know.

1/10 - 1/15
Ask the Experts - a week-long open house where you can drop in and ask whatever questions come up during your review for the exam. Schedule and location will be posted during reading period.

Final exam review sessions. There will probably be at least two of these. Watch your email, the course newsgroups, and the cs50 motd for more information.

1/17/94 9:15am (?)
Final examination, location TBD.

The Final Project

Project Proposal

If you haven't gotten your proposal back from me yet, please do so as soon as possible! I've marked up the proposals with notes, comments, and suggested changes.


Just as your proposal should have closely resembled an assignment, your implementation should resemble a solution set for an assignment. It should contain a complete design of your project (filling in whatever details were missing from your proposal), answer any questions raised in the proposal, and of course contain a well commented, organized, and working implementation of the code that implements your project.

If you get stuck during the implementation, don't panic, and whatever happens do not change your project. Send me email asking for help- I'll probably be around a lot in early January.

Note that your grade on the project will reflect how well you implement whatever it was that you propose to do, not how complicated or impressive the program you write is. Therefore, if you propose to write a program that plays a card game, but change your mind over Christmas and decide to write a program that proves or disproves Yao's hypothesis, I will have to give you a zero (although perhaps someone else will give you an award).


I'm not going to write much in the notes about networking, because it's all in the lecture notes and the Comer book. However, I will nag you to read the lecture notes and the Comer book. Nag, nag, nag.

Some things to keep in mind:

Your Future and Computer Science

As CS50 draws to an end, you may find yourself wondering where to turn for your next dose of Computer Science. The logical next step, of course, is CS51, but after that you have a lot choices.

The courses have changed a lot since I took them, so there are a lot of courses that I just don't know much about. The following courses, however, are ones that I am familiar with and recommend:


CS51 is the logical successor to CS50. Learn LISP, which will (hopefully) open your eyes to a whole new way of thinking about programming, and then return to more familiar territory with MIPS and C++. Learn some sophisticated algorithms and how to use them.


The theory of computation. There are several abstract mathematical models for computation, and this course dives headlong into some of the most important. This stuff comes up again and again, at least in the theoretical side of things.

Not for the mathematically faint-of-heart. Lots of proofs.


A tour of data structures and algorithms.

Good stuff to know. I hear it has changed a lot (it's been passed from professor to professor a few times), so I don't know what it's like now. Ask someone who has recently taken it.


A tour of the computer language countryside. Cool.

The course gets raves. I haven't taken it in its current form, but from looking at the syllabus, I wish I could take it.


Compilers; really cool. I find compilers to be a very interesting subject.

As a historical note, I took this course from Eric Roberts when he was a visiting professor at Harvard.


Operating systems; wicked cool. Find out what's really going on inside UNIX and other operating systems. (I took this course a long time ago, but from what I've heard it has gotten better since then!)

Don't take this course, however, unless you're willing to make a serious commitment; it is quite challenging and the homework is very time-consuming.

CS224r, CS226r

Randomized algorithms and efficient algorithms. If you have a chance to take a course from Michael Rabin, then by all means do so. You will need to have some theoretical mathematical background in order for this course to make much sense (algebra, computation theory) and you'll need a love of hard puzzles in order to enjoy this course. (In most fields, by the time someone writes a textbook and teaches a course about something, the topic is five/ten years old. If you take one of these courses, however, you'll be learning stuff that's five years ahead of the field- not an opportunity that you want to miss.

Please bring any errors or inconsistencies in this document to the attention of the author.

Dan Ellard - (ellard@deas.harvard.edu)