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) additional programming paradigms (beyond the imperative and object oriented paradigms covered in CS100 and CS211) such as functional and concurrent programming, (2) key data structures and algorithms, (3) reasoning about program behavior and complexity, (4) type systems and data abstraction, and (5) the design of larger programs and systems.

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. You can also reach the course staff by sending email to cs312-l "at" cs.cornell.edu.  We will try to respond to questions within one working day. 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 Office/Consulting Hours
Dan Huttenlocher Professor  dph2 at cornell.edu  255-1974 Upson 4133 Wed 1:00-2:00pm
Lars Backstrom TA  lb87 at cornell.edu   Upson 4124 Tue 1:00-2:00pm
Paul Eastlund TA  pme8 at cornell.edu Upson 360 TBD
Kareem Amin Consultant  kaa32 at cornell.edu

"

Sun 7:00-9:00pm
Olga Belomestnykh Consultant  osb5 at cornell.edu

"

Wed 7:00-9:00pm
Durham Goode Consultant  dmg53 at cornell.edu

"

Mon 7:00-9:00pm
Jon Guarino Consultant  jfg32 at cornell.edu

"

Wed 7:00-9:00pm
Sam Hofstaetter Consultant  sfh23 at cornell.edu  

"

Tue 7:00-9:00pm
Aaron Kimball Consultant  ak333 at cornell.edu

"

Thu 7:00-9:00pm
Paul Lewellen Consultant  ptl5 at cornell.edu

"

Tue 7:00-9:00pm
Edward McTighe Consultant  ecm29 at cornell.edu

"

Mon 7:00-9:00pm
Tyler Steele Consultant  ths22 at cornell.edu  

"

Thu 7:00-9:00pm
Benjamin Weber Consultant  bhw7 at cornell.edu

"

Sun 7:00-9:00pm

Lectures and Recitations

Lectures: Tuesday and Thursday, 10:10-11:00, 203 Thurston. 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, but be aware that different sections may cover material in slightly different order.

Section Time Room Recitation instructor
1 Mon and Wed 2:30-3:20 245 Olin Paul E.
2 Mon and Wed 3:35-4:25 306 Hollister Olga & Aaron
3 Mon and Wed 12:20-1:10 368 Hollister Lars

Office and Consulting Hours

The professor and TAs have regular office hours during the day, consultants have evening consulting hours.  Office hours are shown in the above table.   Consulting hours are 7-9pm Sunday-Thursday nights Upson 360. Note: there are no consulting hours the Monday after a problem set is due or on nights of prelims.

Course Materials

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

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,  your code will be tested using automated scripts that assume SML/NJ, so your programs must correctly run under SML/NJ.

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 project.  The final project will be in two parts, and the second part will be due during final exam period.  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 not just rote recall.  Note: completing a course evaluation at the end of the semester will also count for 1% of your final grade.

No late assignments or final projects will be accepted.  Programs are submitted online. 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.) It is advisable to check the schedule for the problem sets and final project now, and plan accordingly.

Makeup prelims 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 Huttenlocher immediately to reschedule.  The university maintains the prelim schedule.

Joint Work

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.

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.