Computer Science 212 Spring 1997
Course Information
CS212 is an introductory course covering a broad range of
computer science concepts and techniques, including data
abstraction, recursion, program correctness, generic functions,
object oriented programming, pattern matching, and languages and
their evaluators. We use the Dylan language, an object oriented
dynamic language developed at Apple Computer, which is well suited
for covering a broad range of introductory computer science topics.
This is not a course about the Dylan language, it just happens to
be the "notation" that we have chosen for writing programs. The
major goals of the course are to teach students how to think
clearly about programs and programming, and to provide a toolbox of
modern programming techniques that will be applicable in any
language.
What course to take: Students often wonder whether to
take CS211 or CS212. CS211 focuses on programming skills in the
object-oriented language Java, whereas CS212 provides exposure to a
broad range of computational and programming problems, using a
number of programming paradigms including functional,
object-oriented and imperative programming techniques. If you have
a good CS background or good formal skills (e.g., mathematics or
physics) you should probably take CS212. Transfers between CS211
and CS212 (in either direction) are encouraged during the first two
weeks.
Reaching Us
The best way to reach the course staff is by posting questions
or comments using the CS212 Web site
http://www.cs.cornell.edu/Info/Courses/Current/CS212/ This
site contains all course materials, and runs a CoNote server which
allows students and staff to post questions and answers as
"annotations" to the handouts and problem sets. In order to access
the Web site you will need to request a user-id and password for
the CoNote system. To do this, simply go to the CS212 home page and
follow the instructions. Your user-id and password will be created
by Monday if you request them this week.
You can also reach the course staff is by sending email to cs212@cs.cornell.edu but this should not be used for asking questions about problem sets or handouts (use the Web site).
Who We Are
When We Meet
Lectures are Tuesday and Thursday at 10:10, in Hollister B14 and recitations are Monday and Wednesday, times and locations listed below. 403. Recitations expand on the material in lecture, and provide more opportunity to ask questions.
Office Hours
Consulting Hours
In addition, the course consultants will be available Sunday through Wednesday, from 7:00 pm to 10:00 pm. The consulting hours are designed to help you with the problem sets and with other questions, and will be held in Upson 320. The night before every project is due, we will hold extended consulting hours from 7:00pm to 12:00 am. Consulting hours will not be held the day the problem sets are due, or the day after.
Course Materials
There is no textbook for this course. There will be course
handouts and lecture notes, which will be available both in
hardcopy and on the course Web site.
The Dylan interpreter is available free on the course Web site,
and was developed by Justin
Voskuhl for this class. It is implemented in Java, and thus
will run under any Java capable Web browser. The best current
browser (it changes almost weekly) is Netscape 3.0 for
Windows95/NT, which has Borland's just-in-time Java compiler. There
are also standalone versions available that you can download onto
your computer if you do not want to use the Web browser version.
One word of warning: if you download a standalone Dylan onto your
machine, make sure that you are using the most recent
version by checking the web site.
Course Requirements
Students are responsible for all material in the assigned
readings, as well as that covered in lectures and in recitations.
There will be six problem sets, two preliminary exams, and a final
exam (a schedule is given below). Each problem set will be a
combination of written exercises and a programming assignment.
Course grades will be based on a combination of the problem sets
and exam scores. The problem sets will account for approximately
one half of the total grade. No late assignments will be
accepted (we will generally grade assignments immediately and
return them the following class period).
You should try to complete the programming assignments early, as
we will not accept late work. The best use of your time and the
machine's time is to think about the problems before sitting
down at the computer. [No matter how many times we say this, it
takes a long time to sink in; think about the problems before
sitting down at the computer.]
Turning in Assignments
Assignments should be turned in on the day that they are due in
either in lecture or in Upson 303 before 4:00 pm. Do not
turn them in to the consulting office, as there will be no one
there to recieve them. No late assignments will be accepted.
There will be no extensions.
Policy on Joint Work
Much of the learning in this course comes from doing the
programming problems. You may work jointly with one other person on
the assignments (no more than two people should work together).
However, if you work together with someone, you must 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 in doubt, credit the person(s) from
whom you got help. 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 work 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.
Public Lab Facilities
CIT and various colleges on campus provide public Macintosh and PC facilities, you may use your own machine or the public ones. Since the course software is web-based, it doesn't matter which platform you use. The CS department does not provide computer facilities for this course.
Due dates (subject to change)
[9/11] Problem set 1
[9/25] Problem set 2
[10/9] Problem set 3
[10/27] Problem set 4
[11/13] Problem set 5
[11/18] Problem set 6jr
[12/5] Problem set 6sr
Exam schedule
[10/16] Prelim 1
[11/18] Prelim 2
[12/18] Final
Lecture Outline
[8/28] The Study of Computation, and an Introduction to Dylan
[9/2] Function Abstraction and the Substitution Model of Evaluation
[9/4] Procedures and Processes: Iteration, Recursion and Induction
[9/9] Higher Order Procedures: Functional Arguments and Values
[9/11] Analysis of Algorithms: Orders of Growth
[9/16] Data Abstraction: Structures, Contracts and Implementations
[9/18] Hierarchical Data: Lists, Trees and the need for Quotation
[9/23] Recursive List Processing and Reasoning about Lists
[9/25] Symbolic Differentiation: An Extended Example
[9/30] Generic Operations: Type Dispatching and Generic Functions
[10/2] Generic Operations: Polynomial Arithmetic System
[10/7] Assignment and the Environment Model of Evaluation
[10/9] Assignment and Local State Variables
[10/16] Objects with State and Object Oriented Programming
[10/21] Object Oriented Programming and Inheritance
[10/23] Multimethods and More About Object Oriented Programming
[10/28] Mutable Data: Stacks and Queues
[10/30] Mutable Data: Heaps, Heapsort and Priority Queues
[11/4] The Metacircular Evaluator: Dylan in Dylan
[11/6] Compilation
[11/11] Optimization
[11/13] Variations on Expression Evaluation
[11/18] Streams
[11/20] Infinite Streams
[11/25] Garbage Collection and the Illusion of Infinite Memory
[12/2] Topics in CS: Randomization and Quicksort
[12/4] Topics in CS: Computability