CSCI C212: Introduction to Systems

Professor Haynes

Course descriptions and relationships
Bulletin description links: C212, H212, A592

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 semester. Students registered for H212 are offered additional material in lab sessions and will be given programming assignments that present additional challenges. The sequence A201-A202 is intended for non-majors with no prior programming experience. Together, A201 and A202 are together equivalent to C212 for prerequisite and degree purposes.

Prerequisite
The prerequisite of this course is C211, H211, or A591, with a grade of at least C-. If your grade in your previous computing course was less than B-, your chances of success in this course are poor.  

If you have not had one of these courses, but you did well in the equivalent of one semester of rigorous programming experience, you may take this course at your own risk. An equivalent course should have covered recursion, arrays, and at least one sorting algorithm, though some courses covering these topics may not be sufficient. For the benefit of those who have had the official prerequisite courses, comparisons between Java and Scheme will frequently be made, but these comparisons are not essential to this course. 

Consult the instructor if you have any doubt about whether you belong in this course.

 
Course overview
Object-oriented programming (OOP) is the dominant paradigm for new system development. This course is concerned primarily with building general programming skills and introducing the fundamentals of OOP methodology and language features that support it. For this our vehicle is Java: the most popular language 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++. 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.

Other concepts fundamental to modern software systems are also introduced, including a few common data structures and algorithms, event handling, multi-tasking, graphics, and software development methodology.

The following is an approximate list of major topics for each week.

  1. Introduction to Java, objects, events, and graphics
  2. Conditional evaluation and methods
  3. Primitive types, operators, and strings
  4. Defining classes
  5. Iteration and active objects
  6. Arrays and more iteration
  7. Interfaces and GUI programming
  8. ArrayLists and searching
  9. MVC design and lnked lists
  10. Inheritance
  11. Abstract classes and exceptions
  12. Stream input/output
  13. Sorting and efficiency
  14. Review
Textbook
Java: An Eventful Approach, by Kim B. Bruce, Andrea Pohoreckyj Danyluk, and Thomas P. Murtagh, Prentice Hall, 2005.

See the Other Resources page in the course's Oncourse Resources tool for optional text material that may be helpful.

Evaluation
Evaluation is based upon the following (percentages are approximate)
  • 20%, Final exam
  • 30%, Several in-class short tests
  • 35%, Programming assignments (one a week, sometimes part of a multi-week project, and frequently done in teams of two or three)
  • 15%, Materials handed in during class and lab and on-line reading quizzes

See the Policies page in the course's Oncourse Resources for further details.

Program development
All programming is in Java 1.5, making substantial use of the textbook's objectdraw library, and some use of JUnit for testing and javadoc for program documentation. The DrJava integraded development environment is used for most lab programming. All this software may potentially be installed on personal machines, and development environments other than DrJava may be used if desired. See the Personal Machine Usage page in the Oncourse Resources tool for further information.