Page type: course

Computer Science 212;Computer Science 212 Fall 1996;Course Information;August 29, 1996;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;Dan Huttenlocher, Professor, 4119 Upson;Tobias Mayr, TA, 5148 Upson;James Hamblin, ugrad TA;Robert Szewczyk, ugrad TA;Justin Voskuhl, ugrad TA;Andras Ferencz, consultant; Melissa Ho, consultant;When We Meet;Lectures are Tuesday and Thursday at 10:10, in B11 Kimball and;recitations are Monday and Wednesday at 1:25, 2:30 or 3:35. Recitations;expand on the material in lecture, and provide more opportunity;to ask questions.;Consulting hours, for help with problem sets or other questions,;will be held from 7pm until midnight the two evenings before each;problem set is due (see schedule below). Thus for problem sets;due on a Tuesday there will be consulting hours Sunday and Monday;evenings and for those due on a Thursday there will be consulting;hours Tuesday and Wednesday evenings. Consulting hours are in;the public Mac lab in B7 Upson.;Office hours are: James Hamblin TBA, Dan Huttenlocher T 1:00-2:00,;Tobias Mayr F 12:15-1:15, Robert Szewczyk TBA, Justin Voskuhl;TBA.;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.];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. 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.;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.; The CS department does not provide computer facilities for this;course. The course consultants will be available in the B7 Upson;Mac lab (see above).;Problem Set Due Dates and Exam Dates;All problem sets are due before 2am on the due date. For example,;an assignment due Tuesday must be submitted electronically to;the course server by 2am on Tuesday (that is late Monday;night). No late assignments are accepted, so make sure you submit;your final solution by the correct time and date.;[9/12] Assignment 1;[9/24] Assignment 2;[10/8] Assignment 3;[10/17] Prelim 1, 7:30pm;[10/29] Assignment 4;[11/12] Assignment 5;[11/19] Prelim 2, 7:30pm;[12/5] Assignment 6;[12/19] Final Exam -- see exam schedule;Lecture Outline; [8/29] The Study of Computation, and an Introduction to Dylan; [9/3] Function Abstraction and the Substitution Model of Evaluation; [9/5] Procedures and Processes: Iteration, Recursion and Induction; [9/10] Higher Order Procedures: Functional Arguments and Values; [9/12] Analysis of Algorithms: Orders of Growth; [9/17] Data Abstraction: Structures, Contracts and Implementations; [9/19] Hierarchical Data: Lists, Trees and the need for Quotation; [9/24] Recursive List Processing and Reasoning about Lists; [9/26] Symbolic Differentiation: An Extended Example; [10/1] Generic Operations: Type Dispatching and Generic Functions; [10/3] Generic Operations: Polynomial Arithmetic System; [10/8] Assignment and the Environment Model of Evaluation; [10/10] Assignment and Local State Variables; [10/17] Objects with State and Object Oriented Programming; [10/22] Object Oriented Programming and Inheritance; [10/24] Multimethods and More About Object Oriented Programming; [10/29] Mutable Data: Stacks and Queues; [10/31] Mutable Data: Heaps, Heapsort and Priority Queues; [11/5] The Metacircular Evaluator: Dylan in Dylan; [11/7] Variations on Expression Evaluation; [11/12] Compilation and Optimization; [11/14] Streams; [11/19] Infinite Streams; [11/21] Nonlocal Exits: Catch and Throw; [11/26] Garbage Collection and the Illusion of Infinite Memory; [12/3] Topics in CS: Randomization and Quicksort; [12/5] Topics in CS: Computability;