Course Syllabus

Official Description

Harvard College/GSAS: 112960

Spring 2015-2016

Location:

Science Center C (as well as Maxwell Dworkin G125 and Northwest Building ground floor)

Meeting Time:

Tuesday, Thursday 1:00pm - 2:30pm

Course Description:

Abstraction and design in computation. Topics include functional and object-oriented styles of programming, software engineering in the small, and models of computation. Our main goal is to understand how to design large programs to make them readable, maintainable, elegant, and efficient.

Extension school version

The course is also offered through the Harvard Extensions School as CSCI E-51. Further information about extension-school-specific policies is available at the CSCI E-51 web site.

Administrative Details

CS51 teaches fundamental concepts in the design of computer programming, emphasizing the crucial role of abstraction. The goal of the course is to give students insight into the difference between programming and programming well. One and the same problem can be solved in different ways, and the different solutions can vary along multiple dimensions including correctness, efficiency, readability, scalability, and elegance.

To emphasize the differing approaches to expressing programming solutions, you will learn to program in a variety of paradigms -- imperative (familiar from CS51 but seen here in a more elemental form), functional, and object-oriented. The elegant multi-paradigm programming language OCaml is the ideal language for manifesting these ideas. Important ideas from software engineering and models of computation will inform these different views of programming. You should come out of the course a better programmer, but also a better computational thinker, with a much broader range of tools at your disposal and ability to analyze the quality of programs.

Philosophy

"Perfection is finally attained not when there is no longer anything to add, but when there is no longer anything to take away." (Antoine de Saint-Exupéry. Wind, Sand, and Stars, chapter III, translated by Lewis Galantière. New York : Reynal & Hitchcock, 1940.)

Prerequisites

Programming ability and computer science knowledge at the level of CS50.

Web site

http://cs51.io

Required texts

The primary textbooks are

Both books are available in print and PDF form.

In addition, course handouts will be made available on the course web site.

The following book may be useful as a secondary reference. (The link is to the online version available through the Harvard Library.)

  • Yaron Minsky, Anil Madhavapeddy, and Jason Hickey. 2013. Real World OCaml. O'Reilly Media, Inc.

Coursework

Lectures:

There are roughly weekly lectures, on Tuesdays and occasional Thursdays (when there is no lab), covering the conceptual aspects of the course. Lectures are recorded and videos and slides will be available from the CSCI E-51 web site some time after each lecture.

Labs:

Labs are held on most Thursdays, in place of lecture, at three time slots (1-2:30, 2:30-4, 4-5:30, as sectioned at the start of term). The lab sessions will involve a short introduction, followed by pair programming exercises to be completed in lab. Students unable to attend their lab slot may on occasion attend an alternate slot. Students unable to attend any lab slot one week can submit the exercises after the lab sessions when the exercises are posted to the course web site.

Readings:

Short readings are assigned before each lecture and lab. Every lecture and lab session will assume that students have done the reading for the session.

Surveys:

A survey with questions about the reading are to be filled out by midnight the night before the corresponding lecture or lab.

Code review sections:

In the weekly code review section, instructional staff lead discussions of code quality in the context of class assignments.

Final project:

The final project involves implementation of an interpreter for a subset of OCaml or a simple web client. The final project is a larger and more open-ended programming effort than the problem sets, and is generally done in pairs. Students who have performed especially well in class and who have an idea for a different final project topic are welcome to apply to substitute their topic.

Exams:

There will be an in-class midterm, and a final exam at the time specified by the registrar.

Extra help

Regular office hours are held in the basement of the Science Center. The schedule appears on the course's Canvas Calendar, and in the table below.

Students are encouraged to ask and help answer questions on the course Piazza discussion forum.

For individual administrative questions, please send an email to cs51heads@gmail.com to reach Sam Green and Emily Houlihan, the course's head TFs.

Grading

Your grade in the course will be based on your performance on the problem sets, final project, and exams, as well as your effort on labs and surveys, and your contribution to the learning of others (as evidenced by your contributions to questions and answers on Piazza and your useful contributions in code review discussions).

Labs and reading surveys are graded on effort, not result. Problem sets are graded based on their correctness as measured by automated testing against unit tests as well as the quality of the solutions in terms of their readability, maintainability, elegance, and efficiency when applicable. Final projects are graded on the quality of both the writeup and the code along all pertinent dimensions. Approximate weightings for the course components are:

Component Percentage
Labs, surveys, code review, learning of others 10%
Problem sets 50%
Final project 15%
Midterm Exam 10%
Final Exam 15%
Total 100%

Submitting coursework

Solutions to lab exercises and problem sets are submitted to a web service called Vocareum. Vocareum automatically checks every submission to make sure that it compiles cleanly against a series of unit tests. Any attempt at submission that fails to compile cleanly is rejected; rejection is equivalent in both process and grading to not having submitted the lab or problem set at all.

Problem set submissions that are accepted (having compiled cleanly against the unit tests) will be graded automatically against the unit tests as well as manually for their quality along multiple dimensions of design and style. You will receive a report of performance on the unit tests once the problem set is fully graded.

Lab submissions that are accepted receive full credit regardless of their performance against the unit tests. You will receive a report of performance against the unit tests immediately upon submission.

Course Policies

Late policy

All problem sets are due on the indicated due date by 5:00 p.m. unless otherwise indicated. Occasionally, extraordinary circumstances may make it impossible for you to submit your solutions on time. For this reason, we provide five “late days” for your problem sets. For each day a problem set is turned in late, up to two per problem set, you will be charged one of your allotted late days. For example, if a problem set is due on Friday at 5:00 p.m., it can be turned in by 5:00 p.m. on Saturday charging one late day, or by 5:00 p.m. Sunday charging two, but will receive no credit thereafter. After two days, we will not accept late homework and will stop charging late days; that is, only two late days will be charged for unsubmitted work or work submitted exceptionally late. If you turn in a problem set late without sufficient late days remaining, the problem set will not earn any credit. However, we recommend that you turn in such problem sets anyway as we may consider them in allocating final grades in borderline cases.

All lab exercises are due on the day of the lab by 11:59 p.m. of that day, although we expect that the lab work will generally be completed during the lab session itself. Labs are graded on effort, not results. There are no late days for labs.

Laptop policy

Students are kindly requested not to use laptops or other screen devices during lecture.

Laptops are required for labs. Please make sure that you have ample charge in your battery for lab sessions.

Academic integrity and collaboration policy

The course, like all courses at Harvard College, operates under the salutary spirit of the Harvard College Honor Code. That spirit is especially important in considering collaboration on course work. Students are encouraged to discuss all aspects of the course work -- readings, labs, problem sets, final projects -- with each other; talking together can be a useful method for working out difficulties in solving the problems and in improving your understanding of the concepts. Indeed, we will provide opportunities for this kind of interaction in the weekly code review sections. However, except where explicitly stated otherwise, all assignments should be completed individually. It goes without saying that all individually submitted work should be the student’s own. Please see the section on Plagiarism and Collaboration in the Handbook for Students.

If in doubt about where the line is between appropriate discussion and undue collaboration or appropriation of others’ work, please talk to a member of the instructional staff.

Auditing policy

You are more than welcome to attend lectures or view the lecture videos online and work on the lab materials and problem sets (which are posted on the course web site as the course progresses). However, participation in the lab sessions, code review sections, discussion forums, exams, and course office hours is restricted to enrolled students.

Accommodations for students with special requirements

We will happily accommodate any student with special requirements. Students needing academic adjustments or accommodations because of a documented disability must present their Faculty Letter from the Accessible Education Office (AEO) and speak with one of the instructors by the end of the second week of the term. Failure to do so may result in our inability to respond in a timely manner. All discussions will remain confidential.

Course Summary:

Date Details Due