CS312 Overview


What is CS312 About?

CS312 is the third programming course in the Computer Science curriculum, following CS100 and CS211.  The primary goal of the course is to give students a firm foundation in the fundamental principles of programming and computer science.   Consequently, CS312 covers a broad set of topics including (1) alternative programming paradigms (beyond imperative and object-oriented programming), (2) key data structures and algorithms, (3) reasoning about program behavior and complexity, (4) type systems and data abstraction, and (5) the design and implementation of programming languages.  

A major goal in CS312 is to teach you how to program well.  Just about anyone can learn how to program, but it takes a deep understanding of the principles of computer science to write truly elegant and efficient programs.

We use the Standard ML (SML) programming language throughout the course.  SML is a modern functional programming language with an advanced type and module system.   The course is not about programming in SML.  Rather, SML 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 SML 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 SML 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 SML are largely orthogonal to those of object-oriented languages.  By studying alternatives, 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 SML is that it has a relatively clean and simple model that makes it easier to reason about the correctness of programs.  Indeed, SML was one of the first major programming languages to have a formal semantic definition.   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 for SML makes it easy to do this.

Reaching Us

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 within one working day.

Another way to contact us is to e-mail us at cs312@cs.cornell.edu , however, if possible we would prefer you to post to the newsgroup.

Please read these guidelines before emailing or using the newsgroups.

Course Staff

Name Position Email Phone Office/consulting hours
Ramin Zabih Professor rdz@cs.cornell.edu 255-8413 Upson 4106, by appointment
Tibor Janosi TA janosi@cs.cornell.edu 254-5075 Monday 3:30-4:30, Upson 5154
Sigmund Cherem TA siggi@cs.cornell.edu 255-7421 Tuesday 3:00-4:00, Upson 5162
Hubert Chao TA hc85@cornell.edu Friday 1:15PM-3:00PM, Upson 331*
Abhishek Mistry TA aam23@cornell.edu   Thursday 1:00-2:00, Upson 304A
Jackie Bodine TA jfb24@cornell.edu   Tuesday 11:45-12:45, Upson 304A
Saikat Guha TA sg266@cornell.edu   Wednesday consulting and by appointment
Frances Spalding TA fjs23@cornell.edu   Monday consulting and by appointment
Kori Oliver Consultant klo26@cornell.edu   Sunday consulting
Jeffrey Vaughan Consultant jav28@cornell.edu   Sunday consulting
Justin Koser Consulting jmk63@cornell.edu   Monday consulting
Tim Bavaro Consultant tmb28@cornell.edu   Tuesday consulting
Sergey Grankin Consultant sg252@cornell.edu   Tuesday consulting
Haakon Larsen Consultant hl272@cornell.edu   Wednesday consulting
Gregory Roth Consultant gbr4@cornell.edu   Wednesday consulting
Jeff Vinocur TA emeritus jmv16@cornell.edu   M-F 7:40AM, 34th and Walnut St. Starbucks, Philadelphia
Walter Chang TA emeritus walter@cs.utexas.edu   by appointment, ACES 3SEo3F, University of Texas at Austin
Emmanuel Schanzer TA emeritus ets7@cornell.edu   by appointment, Building 115 Cafeteria, Microsoft Campus
* = call 5-1008 from the main door to be let in, or knock on the side door

Lectures and Recitations

Lectures: Tuesday and Thursday, 10:10-11:00, Kimball B11

Recitations: Monday and Wednesday

11:15-12:05 Hollister 320 Hubert
1:25-2:15 Olin 165 Frances/Saikat
2:30-3:20 Thurston 203 Tibor/Jackie
3:35-4:25 Olin 218 Siggi/Abhishek

You need not attend the same time slot on both days, nor do you need to add/drop to attend the section of your choice.

Office and Consulting Hours

The TAs have regular office hours during the day, consultants have evening consulting hours.  Office hours are given in the above table.  Consulting hours are 7-10pm Sunday through Wednesday in Upson 304A, unless otherwise announced. The night before every project is due, we will hold extended consulting hours from 7pm-12 midnight. Consulting hours will not be held the day the problem sets are due, nor the day after.

For an appointment with professor Zabih, please contact Cindy Robinson.

Course Materials

There is no official textbook for the course.  The following titles are excellent references:

Paulson's and Ullman's books will be on reserve at the Engineering Library later in the semester.

Two convenient online sources that we will be using from time to time are:

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

We will be using the Standard ML of New Jersey (SML/NJ version 110) compiler, interactive system, libraries, and tools for all examples and homework.  SML/NJ is a freely available, open source development system brought to you from Lucent's Bell Labs -- the same place that developed C and Unix.   SML/NJ runs under Win32 systems and just about any flavor of Unix.   Sadly, there is no support for the Macintosh.  There are other SML compilers freely available, such as MoscowML which do run on the Macintosh.  However, there are subtle differences between systems, so we recommend that you use SML/NJ if possible.  In particular, we will be using SML/NJ's make system (called the Compilation Manager or CM for short) which provides a convenient way to organize programming projects and to build large systems.

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 five 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 heavy thinking on your feet.  All will contribute to your final grade as follows:

Problem Sets Due date Subject % of grade
Problem Set 1 September 10 Introduction to ML TBA
Problem Set 2 September 19 More Introduction to ML TBA
Problem Set 3 October 10 TBA TBA
Problem Set 4 November 7 TBA TBA
Problem Set 5 December 5 TBA TBA
Exams Date Time Place % of grade
Prelim I October 17 7:30-9:00pm Upson: 109, 111, B17 TBA
Prelim II November 19 7:30-9:00pm Malott: 251
Bache Auditorium
Final Exam December 13 9:00-11:30am Phillips 101 TBA

No late assignments will be accepted, but we generally grade assignments the same night they are due and return them immediately.  Programs are submitted online.  Except for problem set 1, all homeworks will be due by 1:00 am on the due date; the submission system will be disabled at that time.   If there is a written portion, it should be submitted to Cindy Robinson in 4146 by 4pm on the due date.  You should try to get started on the programming 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. (No matter how many times we say this, it takes a long time to sink in: think before typing.)

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 Zabih immediately to reschedule.

Joint Work

Unless you are told otherwise, you are expected to work on each assignment individually.

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 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 include expulsion; see the CS Department's Code of Academic Integrity. If you are unsure about anything, please ask.

For later assignments, you may be allowed to work with a partner. In fact, for certain assignments we may require that you work with a partner However, unless we explicitly tell you that a particular assignment is to be done with a partner, you should assume that it is an individual assignment.

Public Lab Facilities

CIT and various colleges on campus provide public Macintosh and PC facilities. We have only installed SML/NJ on the Windows machines. You may use your own machine or the public ones. If you are interested in installing SML/NJ or MoscowML on your own machine, then see the course software page for details. The CS department does not provide computer facilities for this course.  This means that students from other courses have priority in the CSUG lab.