CPSC 225:
Intermediate Programming

   Department of Mathematics and Computer Science
   Hobart and William Smith Colleges

   Spring, 2009.

   Instructor:  David J. Eck.

   Monday, Wednesday, Friday, 9:05 to 10:00, Room Napier 202.
   Lab:  Tuesday, 11:55 to 1:20, Room Gulick 208.

About This Course

CPSC 225 builds on the material covered in CPSC 124. In Introductory Programming, you spent most of your time learning about the basic building blocks of programs, including variables, control structures, classes, and methods. Intermediate Programming builds on this work in several directions. A large part of the course will be devoted to more advanced building blocks such as recursion, linked data structures, and Java's Collection Framework. But in addition to this, you will learn more about designing and coding complex, robust, and efficient programs. And you will be introduced to two professional programming tools, the Eclipse Integrated Development Environment and the CVS version control system.

The textbook for the course will consist of Chapters 8 through 12 from my on-line textbook, Introduction to Programming Using Java, which can be found on the web at http://math.hws.edu/javanotes. There might also be a few readings from earlier chapters to cover material from those chapters that was not covered in CPSC 124. A PDF version of the book, which you can download for reading on your computer, is available at this address:


If you would like to get a pre-printed version of the part of the book that we will be using, you can purchase it from lulu.com at this address:


Note that the pre-printed version is not required, and you will not need to bring a copy of the book with you to class.

Labs and Assignments

This course has a required lab component. The labs will reinforce the material that we are covering in class, but they will also introduce new ideas and techniques from time to time. For example, at some point during the term, one of the labs will introduce you to the debugging facilities that are included in the Eclipse IDE. Another lab will introduce CVS, a system that can keep track of multiple versions of a program so that you can easily recover from unwise changes. CVS also makes it easier for several people to cooperate on a programming project.

Every lab will involve some programming. You should not expect to complete the lab during class; completing the labs is part of your homework for the course. In most cases, all the work for a lab will be due at the beginning of the next lab period. In a few cases, the lab will get you started on a longer programming project that will be due several weeks later.

At least one lab will require you to work together with one or two other students in the class on a team programming project. Other labs will require you to work on your own. Unless otherwise specified for a particular assignment, you should not get any help on assignments except from me or, when working on a team project, from your teammates.

In addition to programming assignments, there will be a few short writing or design assignments. Your responses to these assignments can be word-processed or hand-written. Labs and assignments together will count for 38% of your grade for the course.

Final Programming Project

In addition to the weekly labs and assignments, you are required to complete a larger-scale final programming project that will be due at the end of the semester. It will count for 12% of your grade for the course. This final project can be either an individual or a team effort; a team project will, of course, have to be more ambitious than a typical individual project. We will discuss the requirements for the project in more detail later in the course, but part of the assignment is to choose the project that you will work on, so you should start thinking about it now!


There will be two in-class tests, which will be given on Friday, February 20 and on Friday, April 3. The final exam for the course will take place at the time scheduled by the Registrar's office: Monday, May 11, 8:30--11:30 AM.


Your numerical grade for the course will be computed as follows:

            First Test:            15%
            Second Test:           15%
            Final Exam:            20%
            Final Project:         12%
            Labs and Assignments:  38%

I reserve the right to adjust your grade downwards if you miss more than one or two classes or labs without a good excuse. In my grading scale, an A corresponds to 90--100%, B to 80--89%, C to 65--79%, D to 50--64%, and F to 0--49%. Grades near the endpoints of a range get a plus or minus.

Office Hours, E-mail, and Web

My office is room 313 in Lansing Hall. My office phone extension is 3398. I am on campus most days, and you are welcome to come in anytime you can find me there. My regular office hours will be posted on my door and on my website (math.hws.edu/eck), as soon as my schedule is fixed. Office hours are times when I promise to try my best to be in my office. I do not generally make appointments during my office hours, since they are times when I am available to students on a first-come, first-served basis. When necessary, I am happy to make appointments for meetings outside my scheduled office hours.

My e-mail address is eck@hws.edu. E-mail is good way to communicate with me, since I usually answer messages within a day of the time I receive them.

There is a Web page for this course at http://math.hws.edu/eck/cs225/index_s09.html. I will post weekly readings and assignments on that page.

Tentative Schedule

Here is a very tentative weekly schedule of topics for the course. Note that in addition to the topics listed here, we will spend some time on tools and techniques such as Eclipse, the Eclipse debugger, and CVS. In addition, throughout the course, we will be discussing program design and style.

Dates What Will Be Covered
Jan. 19, 21, and 23 Programming Style Guidelines (from a handout).
Exceptions (Section 8.3), JavaDoc (Section 4.5.4), and the switch statement (Section 3.6.1).
And an introduction to the Eclipse IDE (mostly in the lab on Tuesday).
Jan. 26, 28, and 30 Introduction to the Analysis of Algorithms (Section 8.6).
Review of basic searching and sorting algorithms.
Feb. 2, 4, and 6 Recursion and the QuickSort algorithm (Section 9.1).
Feb. 9, 11, and 23 Linked data structures and linked lists (Section 9.2).
Feb. 16, 18, and 20 Introduction to Abstract Data Types. Enums (Sections 2.3.3, 3.4.4, 3.6.3).
TEST on Friday, February 20.
Feb. 23, 25, and 27 Stacks and Queues (Section 9.3).
Mar. 2, 4, and 6 Binary Trees (Section 9.4).
Mar. 9 and 11 Introduction to Generic Programming (Section 10.1).
Spring Break, March 13--22
Mar. 23, 25, and 27 The Java Collection Framework (JCF):
Lists, Sets, and Maps (Sections 10.2 and 10.3.1).
Mar. 30; Apr. 1 and 3 Hash Tables (Section 10.3.3) and more JCF Examples (Section 10.4).
TEST on Friday, April 3.
Apr. 6, 8, and 10 Selected Topics on Files and Streams from Sections 11.1, 11.2, and 11.3.
Apr. 13, 16, and 17 Selected Topics on advanced GUI programming from Sections 12.1, 12.2, and 12.3.
Apr. 20, 23, and 24 Selected Topics on Threads and Networking from Sections 8.4, 11.4, and 11.5.
Apr. 27 and 29; May 1 Further Selected Topics on GUI programming from Chapter 12.
May 4 Last day of classes. Wrapping up the course.
May 11 Final Exam, Tuesday, December 12, 1:30--4:30 PM.