CS 312 Overview


What is CS312 About?

CS312 is the third programming course in the Computer Science curriculum, following CS100 and CS211.  The goal of the course is to help students become excellent programmers and software designers who can design and implement software that is elegant, efficient, and correct, and whose code can be maintained and reused.


CS312 covers a broad set of topics, including:

Here is a [diagram] showing the course material and the dependencies among different parts of the course.

Contacting the course staff

The best way to reach the course staff is by posting questions or comments to the CS312 newsgroup cornell.class.cs312. We will try to respond to questions on a regular basis. However, the newsgroup is not meant to replace office hours. Please do not expect prompt answers during the weekend, or the evening an assignment is due. You can also reach the course staff by sending email to Turn on JavaScript to view email address . If we judge that the question might have been better directed to the newsgroup, the question may be forwarded there unless an explicit request is included to the contrary.

Please read these guidelines before emailing or using the newsgroups.

Course Staff

Name Position Email Phone Office/consulting hours
Andrew Myers Instructor 255-8597 Upson 4119C, Monday 11-12, Thursday 1:30-2
K. Vikram TA   Upson 4110, Monday 3:30-4:30
Edward McTighe TA   Upson 328B, Tuesday 12:30-1:30
Tanya Gupta UG TA   Upson 360, Wednesday 7-9pm
Rick Ducott UG TA   Upson 360, Tuesday 7-9pm
Andrew Owens Consultant   Upson 360, Monday 7-9pm
Matt Pokrzywa Consultant   Upson 360, Sunday 7-9pm
Dane Wallinga Consultant   Upson 360, Tuesday 7-9pm
David Kupiec Consultant   Upson 360, Monday 7-9pm
Jerzy Hausknecht Consultant   Upson 360, Wednesday 7-9pm
Matt Paff Consultant   Upson 360, Sunday 7-9pm

Lectures and Recitations

Lectures: Tuesday and Thursday, 10:10-11:00, Hollister Hall, room B14. Attendance is required.

Recitations: Monday and Wednesday. Attendance is required; students will be responsible for the new material presented in recitation. Students may attend sections other than the one they are assigned to.

Time Location Recitation instructor
2:30–3:20 Hollister 314 K. Vikram
3:35–4:25 Hollister 314 Edward McTighe
6:30–7:20 Upson 315 K. Vikram/Tanya Gupta

Notes for most lectures and recitations are available from the course schedule.

Functional programming in Objective Caml

We use a programming language from the ML family of programming languages throughout the course: Objective Caml (OCaml). OCaml is a modern functional programming language with an advanced type and module system.   The course is not about programming in OCaml.  Rather, OCaml provides a convenient framework in which we can achieve the objectives of the course.  Like the object-oriented model of Java, the functional paradigm of OCaml is an important programming model with which all students should be familiar, as it underlies the core of almost any high-level programming language. In addition the OCaml type and module systems provide frameworks for ensuring code is modular, correct, re-usable, and elegant.  Other languages, such as Java, also provide facilities to achieve these goals, but the mechanisms of OCaml are largely orthogonal to those of object-oriented languages. In fact, OCaml does support objects, but we will not use this feature because we will be focusing on other aspects of the language. By studying alternatives to object-oriented programming, students will be better equipped to use, implement or even design future programming environments that combine the best features of both worlds.

Another important reason we use OCaml is that it has a relatively clean and simple model that makes it easier to reason about the correctness of programs.  In our studies, we will reason not only about the functional correctness of code, but also the space, time, and other resources used in a computation.  The relatively simple evaluation model of OCaml makes it easy to do this.

Office and Consulting Hours

The TAs have regular office hours during the day, consultants have evening consulting hours.  Office hours are shown in the above table. 

Course Materials

There is no official textbook for the course.  However, there are some useful resources:

The following are good textbooks that are about a different variant of ML, Standard ML:

This a good textbook on programming methodology:

In addition, there are many other resources on the Web for ML, including tutorials, free compilers, libraries, etc.

Course Requirements

Students are responsible for all material in the assigned readings, as well as material covered in lectures and in recitations. There will be six problem sets, two preliminary exams, and a final exam.  Each problem set will involve a programming assignment and may include written exercises.  Exams will cover material presented in class and will require you to do some thinking on your feet.

Assignments are due at 11:59pm on the due date. However, assignments will be accepted up to 48 hours late, but at a 10% penalty if late up to 24 hours, and a 20% penalty if late up to 48 hours. We can't accept later assignments because it interferes with grading. Assignments are submitted online.  You should try to get started on assignments early. The best use of your time and the machine's time is to think about the problems before typing anything at the computer. (Again: think before typing.)

Karma problems. Assignments may include optional problems called karma problems. These problems exist to provide extra challenge to those who want it. Karma problems will be graded, and but doing these problems mostly just gives you good karma. In some cases it can increase your score on the assignment, but usually it will not. Students who do karma problems will be noticed and doing them may be taken into account when assigning the final grade. However, spending your time on regular problems is almost always a more effective way to improve your overall score. Tackle karma problems only after you're sure you have the rest of the assignment well in hand.

Makeup exams must be scheduled within two weeks of the start of class.  Check now to see if you have a conflict with another class and contact Professor Myers immediately to reschedule.

Joint Work

Some assignments will be done individually. Others (including the projects) will be done in pairs. For assignments done in pairs you will submit a single joint assignment with both names on it.

Under no circumstances may you hand in work done with (or by) someone else under your own name. If you have a question, consult the course staff.  Your code should never be shared with anyone other than your partner. You would be amazed at how easy it is to tell when people have worked closely together on problem sets, so please don't make life unpleasant for all of us by breaking these rules. The penalties for cheating at Cornell are severe, and can include expulsion; see the CS Department's Code of Academic Integrity. If you are unsure about anything, please ask. General discussions about how to solve problems are typically fine. However, if in the course of doing a problem set, you discuss a problem with someone who is not a member of your group, you should mention their names and the extent of the discussion in your submitted assignment.

Public Lab Facilities

CIT and various colleges on campus provide public Macintosh and PC facilities. You may use your own machine or public ones. For your convenience, F# is installed on the Windows machines in Upson B7. If you are interested in installing OCaml on your own machine, then see the course software page for details. Students in this course also have access to the CSUGLab.