CS312 Overview

 

What is CS312 About?

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. You can also reach the course staff by sending email to cs312-l@lists.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/Consulting Hours
Tibor Janosi Professor janosi@cs.cornell.edu 255-4029 Upson 4152, Tue. 4:00-5:00
Alan Shieh TA ashieh@cs.cornell.edu 255-7987
255-1008
Upson 338, Wed. 5:45-7:45
Harlan Crystal TA hpc4@cornell.edu 255-1008 Syslab*, Mon. 1:30-2:30
Alex Fierro TA Consultant aaf25@cornell.edu   Upson 360 **
Kevin Markman TA Consultant km266@cornell.edu   Upson 360 **
Rohan Murthy Consultant rnm5@cornell.edu   Upson 360 **
Olga Belomestnykh Consultant osb5@cornell.edu   Upson 360 **
Aaron Kimball Consultant ak333@cornell.edu   Upson 360 **
Jon Guarino Consultant jfg32@cornell.edu   Upson 360 **
*The "Syslab" is in Upson 331; call 5-1008 from the phone outside the door

** Consulting Schedule 

First Week Monday 7-10 Aaron, Kevin
(starts 08/30) Tuesday 7-10 Alex, Kevin
  Wednesday 7-10 Olga, Jon
  Thursday 7-12 Alex, Aaron
Light Week Monday 7-10 Alex, Aaron
  Wednesday 7-10 Jon, Rohan
Heavy Week Sunday 7-10 Olga, Rohan
  Monday 7-10 Aaron, Kevin
  Tuesday 7-10 Alex, Kevin
  Wednesday 7-12 Olga, Jon

Lectures and Recitations

Lectures: Tuesday and Thursday, 10:10-11:00, B11 Kimball Hall. 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.

2:30-3:20 Upson 109 Harlan
3:35-4:25 Hollister 314 Alan
4:40-5:30 Thurston 202 Alan

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 360, during " heavy" weeks (i.e. the week when a problem set is due), and only Monday and Wednesday otherwise. The night before every project is due, we will hold extended consulting hours from 7 pm to midnight. The weeks when exams are scheduled are also considered "heavy," and we provide extended consulting hours as delineated above. If necessary and feasible, we will shift the consulting schedule to better match exam dates.

Course Materials

There is no official textbook for the course.  The following titles are excellent references and are on reserve in the Engineering library:

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 covered in lectures, in recitations, and in the readings that we might assign from time to time. 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.  The first two problems must be solved and submitted individually; the latter three will probably involve work in pairs. All homework material must be submitted electronically, through the Course Management System.

Problem Sets Subject
Problem Set 1 Introduction to ML
Problem Set 2  More ML programming
Problem Set 3 Substitution Model and Datastructures
Problem Set 4 TBA
Problem Set 5 TBA
Exams Date
Prelim I October 14, Upson B17, 7:30-9:00 pm
Prelim II November 16, Upson B17, 7:30-9:00 pm
Final Exam December 16, 3:00-5:30 pm
Goldwin Smith Hall, Kaufmann Auditorium

No late assignments will be accepted, but we will grade your homework, as long as you submit it within a reasonable time after the deadline. We make an effort to grade assignments the same night they are due and return them immediately.  All assignments, except the first one, are due on Thursdays at 12:01 am.  You should try to get started on the programming assignments early; no matter how close you feel to the solution an unexpected error might hold you up much more than you have anticipated. The best use of your time is to think about the problems before typing anything at the computer.

Makeup exams are oral and 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 Tibor  immediately to reschedule.

Joint Work

Your code should never be shared with anyone other than your partner (if you have one). If you have worked in pairs on an assignment, you will  create a group in CMS, add your named to it, and submit your solution as a group. You will both receive the same grade. It is possible to work with different partners on different assignments. 

Except when working in pairs - and explicitly acknowledging 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.  It is often easy 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 Cornell's Code of Academic Integrity. When in doubt, ask. Before we return graded exams and homeworks, we randomly photocopy a number of them.

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.