Dale Skrien, statement, CS2 workshop

I have taught CS2 using Pascal and lately using Java and so I have had experience teaching the course with a non-OO language and an OO language. In the Pascal version of the course, the traditional topics and their implementations were covered. In the Java version, I have covered some traditional topics, some OO design, and some use of existing classes and class libraries.

Based on my experience teaching the both versions of CS2, I have come to the following position regarding teaching CS2 using an OO language. I am assuming that the student will have used an OO language in CS1 before entering the CS2 class.

  1. Through the use of an OO language in their CS1 course, students will already feel comfortable with using existing classes and class libraries by the time they enter the CS2 course. Therefore the idea of using a List or Stack or Tree class that already exists will be easy for the students to adjust to.

  2. As a result of this, larger projects can be built by the students than was possible when they implemented every detail of the data structures they used.

  3. Furthermore, in these larger projects, students can learn not only what the basic data structures can do, but how to design appropriate new classes/data structures for solving these larger problems in a robust way. Therefore I propose that part of the time of the course be spent in OO Design, including such topics as CRC cards and simple UML diagrams.

  4. However, for a variety of reasons I also feel that part of the course needs to focus on implementation details of basic data structures. In my opinion, students will feel more comfortable with various data structures if they have tried to implement them themselves. Furthermore, they will appreciate better questions concerning worst-case complexity of the use of various implementations of the structures if they have seen or constructed one or more implementation themselves.

Of course, the main problem with covering all this material in a one-semester course is how to do it without rushing through the material or leaving out lots of details. My proposal is to deal with this problem is to make the course project-based in the following way:

  1. Motivated by a large project that is to be completed by the students by the end of the semester, gradually introduce existing data structures/libraries and discuss design decisions regarding combining them to solve large problems.
  2. In the midst of the work on this large project, add a few small projects dealing with implementation of a few of the structures.

Owen L. Astrachan
Last modified: Wed Sep 2 00:21:03 EDT 1998