General information | Reading material | Grading | Syllabus | Course evaluation
Writing Java is like realizing your
imagination.
Donghui Yuan, Quest for Java contest 2nd place
winner
Lecture: sections 1391 (C212) and 1351 (A592), TR
5:30-6:45 in LH102
Instructor: Christopher
Haynes | Email: chaynes@indiana.edu
Office: LH230F | Phone: 855-3376 | Hours:
T 2:00P-3:00P, W 9:00A-10:00A, W 11:00A-12:00P.
Discussion: sections 1353 (A592) and 1392 (C212), R
11:15A-12:05P in WY125
Associate Instructor: Sean Broadley | Email: sebroadl@cs.indiana.edu
Office: LH401F (office hours in LH230) | Phone: 855-2966
| Hours: M 12:00P-2:00P and T 9:30A-11:30A
Discussion: sections 1350 (A592) and 1393
(C212), R 4:40P-5:30P in BH118
Associate Instructor: Shomari Liburd | Email: sliburd@cs.indiana.edu
Office: LH201H | Phone: 855-4173 | Hours:
M 9:30A-11:30A and F 3:30P-5:30P
Consulting Associate Instructor: Rutvik Desai |
Email: rudesai@cs.indiana.edu
Office: LH325 | Phone: 855-9930 | Hours:
T 9:30A-11:30A and R 10:30A-12:30P.
Web: www.cs.indiana.edu/classes/c212/. The first-day handout is the initial web, but the web evolves continuously and is all subject to change. Major changes are announced in class and/or the class newsgroup.
Newsgroup: ac.csci.c212. Use this for questions, comments, and items of general interest related to the class.
Prerequisite: C211 or A591. Consult the instructor if you have not had one of these courses.
Course relationships: C212 is usually the second CS course for majors. A592 is the numbering of this course for non-CS graduate students. H212 is the honors version of C212, offered only in the spring. The sequence A201-A202 is intended for non-majors with no prior programming experience and covers material similar to C212. Together A201 and A202 are equivalent to C212 for prerequisite and degree purposes.
Bulletin description: (4 cr.) NMMC P: C211. Design of computer software systems and introduction to programming in the environment of a contemporary operating system. Topics include the Java systems programming language and its data structure facilities; building and maintaining large projects; and understanding the operating system interface, including shell tools and system calls. Introduction to object-oriented programming. Credit not given for both C212 and H212, or A592; credit not given for both C212 and A306, A502 (discontinued), or A512. Lecture and laboratory.
Incompletes: An incomplete (I) final grade will be given only in exceptional circumstances conforming to departmental policy in which the bulk of course work has been completed in passing fashion.
Drop deadline: W October 27. Through this date you can withdraw from the course without grade penalty or authorization. After this date you will be stuck with whatever grade you earn (see grading section below), unless you can convince a Dean of exceptional hardship (and even that must be done a few weeks before the semester ends). Since the knowledge and skills learned in this course are highly cumulative, if you are not doing well at midterm you may well do worse in the remainder of the course even if you try harder. So if you are not very confident that you will catch up, seriously consider dropping whle you can. If in any doubt about whether to drop, please speek to your instructor.
Help from course instructors: We (the course lecturer and AIs) are eager to help you learn the course material. No appointment is needed to see us during our office hours. If these hours are not compatible with your schedule, see or email one of us to make an appointment at a time that does work for you. We can only help you effectively when you have made an attempt to study the material or do the assignment on your own and come with questions. Our goal is to help you discover how you might have solved your problem on your own. That will help you master the material in this course and improve your problem solving skills, which will serve you for a lifetime. If you need help with an assignment, see the help instructions on the assignments page.
Attendance: Formal attendance will not be taken in lecture or laboratory sections, but may influence 3% of the final grade. Little time is available to assist those who have missed relevant lectures or discussion sections. Unless otherwise indicated, you may attend either or both of the discussion sections above if you are registered for one of the lectures sections above. The other lecture section of C212 this semester will, at least initially, be covering similar material, so occassionally switching lecture section attendence may be satisfactory. Attending both might be beneficial.
Academic integrity: Providing or receiving help during exams or quizzes, or submitting the unacknowledged work of another as your own, both constitute academic dishonesty. There are no "small" offenses. If you do an assignment in a group, hand in one assignment with all of your names on it. Group work is allowed only if specified as part of the assignment. The Computer Science Department Statement on Academic Integrity provides further information. If you are not sure about the rules, ask first.
Required: Object-oriented Programming in Java, by Stephen Gilbert and Bill McCarty, Waite Group Press, 1997. Chapter and page references are to this book unless otherwise noted.
Recommended: Java in a Nutshell, Second Edition (with online quick reference), by David Flanagan, O'Reilly, 1997. This is the most popular Java reference book on the market, and perhaps the best (though not recommended for its coding style). You will probably find it quite valuable now and in the future to have at least one Java reference, but you may prefer a different one. Particularly if you have your have a personal computer with a Java IDE providing extensive on-line documentation, and you love looking things up on-line, you may get by without a reference book.
Recommended: Learning the UNIX Operating System, by Grace Todino, John Strang, and Jerry Peek, O'Reilly, 1993. All assignments must be submitted through the nations cluster of Unix machines, on which they should be tested. At least one assignment will depend on Unix. In future computer science courses Unix is used extensively and you will be expected to be familiar with its basics. This little book contains about the minimum that you will need to know for this and future courses. If you are already familiar with Unix, have another Unix book, or love reading on-line reference and tutorial material, you do not need this book.
Optional: A Little Java, A Few Patterns, by Matthias Felleisen and Daniel P. Friedman, MIT Press, 1998. This little book provides a gentle and enjoyable introduction to object-oriented programming concepts and a few important O-O design patterns. It is especially recommended for anyone having difficulty gaining an intuition for object-oriented design. Its emphasis on functional programming techniques in Java make it a nice bridge from the C211 material. On reserve in the Swain library.
Optional: Bleeding at the Keyboard: A Guide to Java Programming, by Gregory Rawlins. This on-line book is a work in progress. It focuses on many of the most important object-oriented programming concepts with an extended metaphor that many find clarifies these concepts.
Optional: Learn Microsoft Visual J++ 6.0 Now, by Kevin Ingalls and Daniel Jinguji, Microsoft Press, 1998. Courtesy of Microsoft, a copy is available to students in this class for free: pick up a copy from the boxes outside LH230F while supplies last. This is an elementary introduction to Java with a bit of material specific to the J++ development environment (especially parts of chapters 1, 2, 10, and 11). It also includes a fair amount on WFC, COM, J/Direct, and other Java extensions that are usable only on Win32 operating systems (not laboratory assignments in this course).
We will be using Universal Modeling Language (UML) notation, in varying degrees. You may wish to consult a UML reference card, though it contains more notation than we will use. It is a bit advanced for this class, but The Java Programming Language by Ken Arnold and James Gosling (Addison Wesley, 1998) is the classic description of Java.
If you are serious about a computing career, consider joining the primary organization for computer professionals, the Association for Computing Machinery (ACM). Student membership is a bargain, with major benefits.
On-line homework is posted by Monday noon and must be completed by midnight the following Wednesday.
Assignments may not be submitted after the due date and time, usually noon on Tuesday. They will be at posted on the assignments page at least a week in advance. Two weeks will be allowed for some assignments later in the course, and these assignments will receive double weight in grade calculations. See the assignments page for grading information and much more.
Exams and the quiz are closed book and notes, but do not test API details. They consist of multiple-choice and short-answer questions, including short programming exercises. Here is a sample exam (the first exam this semester will not cover arrays or inheritance, other than inheriting Applet) and there is exam advice for this course.
If there is a medical, personal, or professional emergency requiring you to miss an exam or an assignment, you must present your excuse in advance and in person (whenever possible) and in all cases in writing, with sufficient written documentation. Emailed requests for grading exceptions will be ignored.
There will be no opportunities to do extra work to raise a grade or make up missing work.
All grades become final one week after the material is returned to you.
The Student Academic Center offers a one-credit course on study habits and other academic assistance.
You may see your grades so far using the Post'em system (allow up to two weeks for grades to be posted).
Object-oriented programming (OOP) is the dominant paradigm for new system development. This course is concerned primarily with OOP methodology and language features that support it. For this our vehicle is the Java language, which is rapidly becoming the language of choice for new system development. This course is, however, not about Java itself. Most of the concepts we are concerned with are also found in other object-oriented languages such as C++ and Smalltalk. Though much of Java's core will be covered, we will only touch the surface of the vast Java APIs (application programming interfaces, standard program libraries). This course will prepare you to master whatever APIs are appropriate for a chosen application.
The course also introduces operating system features widely used in system development. This includes multi-processing and multi-tasking, synchronization, and network communication. For this our vehicles are Java (which has features other languages usually leave to the operating system interface) and the Unix operating system. Most newer large-scale computer systems use the Unix operating system, particularly in network applications.
We will also study a few common algorithms and data structures, and their efficiency, and be concerned with program design and other software development issues.
The following is an approximate list of topics to be covered.
The Lectures and Readings page includes reading assignments and selected lecture material (particularly programs presented in lectures).
Before the end of the course, please complete before 12/23 the electronic course evaluation forms for Chris Haynes via
http://iueval.cs.indiana.edu:5281/iueval/cgi-bin/course-form/semester=fall99/course=c212-chay
and your laboratory section AI. If you submit your evaluation via a web link, as above, you can ignore the form you receive via email.
Email chaynes@indiana.edu with questions or comments about this web site.
The material on this web site is Copyright © 1999 by Christopher T. Haynes.