CSC 112a
Fall 2007
Audrey Lee

112 Computer Science II
Object-Oriented Programming and Data Structures


This is the second programming course in the required Computer Science major sequence. It will cover more advanced programming techniques (object oriented), more advanced Unix concepts and fundamental data structures. The language of instruction this semester will be primarily Java. If time will allow and without going into full depth, there will be an independent unit (of 1-2 weeks) which will expose you to another object-oriented programming language, C++.

This is a programming intensive course. There are weekly lab and homework assignments and a final programming project, counting for 70% of the grade. Two exams (midterm and final) will test mostly theoretical knowledge. Due dates are final, and lateness will not be tolerated.


  • Object-oriented programming in Java.
  • Event-driven programming, basic GUI design (Graphical User Interface) and basic 2-dimensional graphics in Java.
  • Fundamental Data Structures:
    • Stacks
    • Queues
    • Linked Lists
    • Hash Tables
    • Trees
    • Graphs
  • Searching and Sorting Algorithms
  • More advanced programming techniques: recursion
  • If time allows:
    • Pointers, references and indirection in C++.
    • Memory allocation in C++ versus Java
    • Object oriented programming in C++. Makefiles.

Course Requirements


  • Weekly programming assignments (labs and homeworks).
  • One in-class midterm exam and a final in the final exam period.
  • Final Programming Project with in-class presentation.


  • Labs, homeworks and class participation 50%.
  • Exams 30%.
  • Final Project 20%.
For the final grade, you have the option to choose one out of the 10 or so homeworks - presumably the one with the lowest grade - which will be dropped from the final average computation. However, you can only choose to drop a homework for which you did the work. If you miss a homework you get 0 points on it (and that will count towards the final average).

Warning! This is a Programming Intensive Course.

While I think programming is one of the most interesting, challenging and rewarding intellectual activities, it is almost impossible to learn it without a lot of practice. This takes time, especially in the "dreaded" process of debugging. If you get easily frustrated by the amount of time spent debugging, you should see me very soon - before this becomes a problem.

General Grading Guidelines

  1. The program has to compile. Do not submit code that does not compile, as that will receive a minimal grade of D (if after looking at it I see that at least it resembles a possible solution to the problem - else it will be an E).
  2. It is better to submit a program that works, even if it has not implemented all the required features. Keep intermediate versions of your programs in separate directories, and if you do not have time for last minute debugging, submit the last version that (at least partially) worked.
  3. The way you document your program affects your grade: be generous with pertinent comments!
  4. A small percentage of the grade comes from design, but most of it reflects functionality: if your program does what it was supposed to do. By a good design, I mean both a nice user-interface (when this is asked for), as well as good and elegant programming style.
  5. Throughout the semester, interspread with the technical aspects of programming and theory (data structures), I will teach you simple software engineering principles, which convey scientific discipline to the art of programming. Class attendence, participation in discussions regarding possible solutions, self-study discipline, good organizational skills are your key to mastering programming and avoiding lengthy debugging sessions. Your final grade will also have to reflect and reward these qualities, and the work on the final project will be the best indicator.
  6. Throughout the semester, I will occasionally add optional enhancements to your homework assignments. Doing them will help you accumulate EXTRA CREDIT points, which I will use for your final grade as follows:
    • In case you are on the borderline between two grades
    • To make up for exceptional situations when your performance was low (illness or other documented cases like this).
    • To differentiate EXCEPTIONAL (A level) performance from VERY GOOD one (A- level).
  7. To summarize: A and A- level work means quality programs which run, do what they are supposed to do, are well designed and documented and submitted in time.
  8. According to the College's policy of reducing grade inflation and making B the average grade at Smith College, you should expect your final grade to be in the A group only if you are in the top 35-40% of the class.
  9. Reminder: we are under the Honor code.
    While I encourage you to:
    • Talk to your class mates about the lab and homework
    • Organize study groups
    • Consult other books or the internet for inspiration and clarifications
    • Ask the TAs to help you find bugs in your code
    I also have to remind you that:
    • All the work that you submit should be yours: it is against the honor code to have somebody else do the assignment for you (including tutors) or to copy it from somewhere else (including books or the internet).

Lab, Homework and Lateness Policy

Labwork is designed to be completed during the scheduled lab time. If for some reason you are left behind or want to redo the work later at your own pace, you have to submit everything by midnight the same day. The lab work counts as a small portion of your homework grade for the week. You will not receive feedback on the lab, but you will receive your graded homework back with comments every week. You should see me right away if you think there has been a mistake in the way the grading was done. You should ask questions about the lab during the lab. You should start working on your homework early, and use the Tuesday class to clarify the statement of the homework by asking questions in class.

All homework is assigned on Thursdays and is due on Wednesday by midnight (i.e., before we start a new topic and a new lab on Thursday).

NO late homework accepted, except for special, documented circumstances. You should submit, by the midnight deadline, the homework solution reflecting your work on it up to that point.

The final project is due before the last class. No late submissions are accepted.


There is no required textbook. I recommend that you use:

  1. Any book on Java, as a reference. I like:
    Cay Horstmann
    Big Java
    John Wiley and sons, 2002
  2. Any book on data structures, as a reference. A good one using Java is:
    Lewis and Chase
    Java software structures
    (designing and using data structures)
    second edition
    Pearson Addison Wesley, 2005