CS211, or ENGRD211 is the second programming course in the Computer Science curriculum, following CS100, and an engineering distribution course required for ECE and OR&IE majors. The primary goal of this course is to have students learn intermediate programming in a high-level language and introduce computer science. The topics range over recursion, program structure and organization, object oriented programming, analysis of algorithms, proofs of program correctness, data structures and types (lists, stacks, queues, trees, hashtables), and some graph theory. Java is the principal programming language, but this is not a course on Java.
We want our students to come out of the course knowing how to program well. But this is not the only goal. We also want them to gain exposure to the topics that are the foundation of computer science. If they become comfortable with these concepts in CS211 then they will be well equipped to pursue futher coursework offered in computer science (and related disciplines) at Cornell and elsewhere.
The best way to reach the course staff is by coming to our office hours or sending us email. We will try to respond to questions as soon as possible - hopefully within one working day. If we judge that the question might have been better directed to another staff member, the question may be forwarded there unless an explicit request is included to the contrary.
Name | Position | Phone | Office hours | |
Matthew Harris | Instructor | mharris@cs.cornell.edu | 5-3495 | 11:30-12:30 after his classes, Upson 5152 |
Alexa Sharp | Instructor | asharp@cs.cornell.edu | 5-9834 | 11:30-12:30 after her classes, Upson 5157 |
Vincent Ng | TA | yung@cs.cornell.edu | 4-8830 | Tuesdays & Thursdays 6:30-7:30pm, Upson 309 |
Richard Chung | Consultant | rc238@cornell.edu | Mondays & Fridays 2:30-3:30, Upson 304 | |
Navin Kumar | Consultant | nsk8@cornell.edu | Tuesdays & Wednesdays 2:30-3:30, Upson 304 |
Monday to Friday, 10:00-11:15, Phillips 203
Note: July 4 is a holiday, and classes will not be held.
The course staff have regular office hours during the day and evenings. Office hours are given in the above table. Try to get your assignments started early so that if you have any trouble you can make it to someone's office hour in time.
Although the official textbook for the course is Java: An Introduction to Computer Science & Programming, Walter Savitch, Prentice Hall, 2001, we will not be relying on it much. Rather, all of the material will be given orally, on handouts, or as references to webpages to read. If it helps you to have the above text or some other book as an additional source for learning the material, we encourage you to use it.
Whereas the above text is a good Java language reference, Mark Allen Weiss' Data Structures & Problem Solving Using Java is good for the other material in the course such as data structures and algorithms.
There are also some useful textbooks on reserve in the Engineering library, such as Java in a Nutshell (3rd ed), David Flanagan, O'Reilly, 1999 (on CS100 reserves)
And it goes without saying that there are many useful online resources that will undoubtedly come in handy.
We will be using JDK 1.3 as our official compiler. You are welcome to use any compiler you wish for your assignments, so long as it also compiles with our JDK 1.3. You may find Java development environments from many vendors. The CIT computer labs that support Java use CodeWarrior. Although we suggest that you use CodeWarrior for consistency, you may use any development environment that you wish. See the CodeWarrior Resources link for help on CodeWarrior.
Students are responsible for all material in the assigned readings, as well as material covered in lectures. There will be eight(ish) assignments, two preliminary exams, one final exam, and regular pop quizzes that we may or may not tell you about. The assignments will be a mix of programming and written exercises. Exams will cover material presented in class and will require you to do some heavy thinking on your feet. The pop quizzes will test you on what you learned in the last day or so. The quizzes will not count. The remaining stuff will contribute to your final grade as follows:
Assignments | Due date | Subject | % of grade | |
Assignment 1 (Solutions) | 1 July | Recursion and Induction | 7% | |
Assignment 2 | 6 July | OOP and Java | 7% | |
Assignment 3 | 15 July | Searching and Sorting | 7% | |
Assignment 4 | 17 July | ADTs and Binary Trees | 7% | |
Assignment 5 | 19 July | Linked Lists, Stacks, Queues, Hashtables | 7% | |
Assignment 6 | 26 July | Algorithm Analysis | 7% | |
Assignment 7 | 29 July | Program Correctness | 7% | |
Assignment 8 | 2 August | Graphs | 7% | |
Exams | Date | Time | Place | % of grade |
Prelim I | 8 July | in class | Phillips 203 | 14% |
Prelim II | 19 July | in class | Phillips 203 | 14% |
Final Exam | 6 August | 8am (ouch) | Phillips 203 | 14% |
The above table is, naturally, subject to change.
No late assignments will be accepted. This is because we will generally grade the assignments the same day they are due and return them immediately. They will be due at the beginning of lecture on the due date. The submission system will be disabled at that time, if the assignment is electronic. If there is a written portion, it should be brought to class and turned in before lecture starts. I know everyone always says this, but really, you should try to get started on your assignments (especially the programming ones) early. We will try to tell you which portions of an assignment you are able to do as the material is covered, incrementally, to help you start early.
If for some reason (such as illness) you are unable to complete an assignment or take a test, please talk to one of the instructors as soon as possible. We will handle them on a case-by-case basis.
In general, it is OK to talk with other students about the assignments, but you have to be very careful about how much you collaborate. A good rule of thumb is that you may talk to eachother so long as no one writes or types anything down. Please do not hand in work done with (or by) someone else under your own name. The course staff (conveniently) have a third eye for finding suspicious similarities in code, so please don't break the 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.
We will sometimes have assignments that allow joint work with a partner. We will tell you when this is permissable, and we will outline the rules when that time comes.
For public access to CodeWarrior and Java, you use CIT labs Carpenter B101, Upson B7, Dickson, or Noyes. The Green Room in ACCEL also has CodeWarrior.
If you are registered with the Office of Student Disability Services and require special accomodation (such as additional time to complete exams), please speak to one of the instructors during the first week of class so that we have time to make suitable arrangements.