CPSC 225:
Intermediate Programming

   Department of Mathematics and Computer Science
   Hobart and William Smith Colleges

   Spring, 2012.

   Instructor:  David J. Eck.

   Monday, Wednesday, Friday, 11:15--12:10, Eaton 111.
   Lab:  Thursday, 1:30--2:55, 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, methods, and classes. 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. You will learn to use files, networking, threads, and a few of the more advanced aspects of GUI programming. And you will use 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 13 from my on-line textbook, Introduction to Programming Using Java, Sixth Edition, which can be found on the web at http://math.hws.edu/javanotes. This is the same book as was used 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 have a printed copy of the book, you can purchase one from the publishing website lulu.com. See


Labs and Assignments

Reading the textbook is a major part of the homework for this course. That includes reading and maybe working on at least some of the end-of-chapter exercises and their solutions. I also suggest going over the notes that you take in class, preferably on the same day as the class. Ideally, you should make a neat copy of your notes, filling in details and making sure that you understand everything. It is a good idea to write small test programs, on your own, to test your understanding. Anything that you don't understand should be brought up in class or in my office hours.

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 the major component of your graded homework for the course. In most cases, all the work for a lab will be due before 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, from teaching assistants, 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 35% 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 on the last day of classes. It will count for 10% 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 Wednesday, February 22 and on Wednesday, April 4.

The final exam for the course will take place at a time scheduled by the Registrar's office: Tuesday, May 8, 8:30--11:30 AM.


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

            First Test:            17%
            Second Test:           17%
            Final Exam:            21%
            Final Project:         10%
            Labs and Assignments:  35%

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.

Teaching Assistants

There will be student teaching assistants for computer science available in Lansing 310 from 7:00 to 10:00 PM, Sunday through Thursday.

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. I will announce regular office hours and post them on the course web page as soon as I know what my schedule will be.

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.

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

Statement from the CTL

Disability Accommodations: If you are a student with a disability for which you may need accommodations, you should self-identify and register for services with the Coordinator of Disability Services at the Center for Teaching and Learning (CTL), and provide documentation of your disability.  Disability related accommodations and services generally will not be provided until the registration and documentation process is complete. The guidelines for documenting disabilities can be found at the following website: http://www.hws.edu/disabilities

Please direct questions about this process or Disability Services at HWS to David Silver, Coordinator of Disability Services, at silver@hws.edu or x3351.

Tentative Schedule

Here is a very tentative weekly schedule of readings and topics for the course. Note that we will cover some topics from Chapter 11, 12, and 13 as the need arises for lab projects, so that by the time we get to these chapters officially, some of the material will already have been covered.

Dates Reading Topics to be covered
Jan. 18, 20 8.3
8.4 (optional)
Brief review of Intro Programming
Checked exceptions and try..catch
Jan. 23, 25, 27 8.5
9.1 (start)
Analysis of Algorithms
Jan. 30; Feb. 1, 3 9.1 (finish)
9.2 (start)
QuickSort and other recursive algorithms
Linked data structures
Linked lists
Feb. 6, 8, 10 9.2 (finish)
9.3 (start)
Operations on linked lists
Abstract Data Structures (ADTs)
Stacks and queues
Feb. 13, 15, 17 9.3 (finish)
9.4 (start)
Stacks and postfix expressions
Binary trees
Binary sort trees (BSTs)
Feb. 20, 22, 24 9.4 (finish)
9.5 (maybe)
Expression trees
Recursive descent parsing (?)
TEST on Wednesday, February 22
Feb 27, 29; Mar. 2 10.1
10.2 (start)
Generic programming and parameterized types
Iterators and for-each loops
ArrayList and LinkedList
Mar. 5, 7, 9 10.2 (finish)
TreeSet and HashSet
TreeMap and HashMap
Hash tables
Mar. 11, 14, 16 10.4
10.5 (selections)
Java Collection Framework examples
Writing generic classes
Mar. 26, 28, 30 11.1
Streams, Readers, and Writers
Apr. 2, 4, 6 11.3
File programming examples
Introduction to Networking
The Client/Server Model
TEST on Wednesday, April 4
Apr. 9, 11, 13 12.1
Creating and using threads
Race conditions and synchronization
Parallel processing
Apr. 16, 18, 20 12.4 -- 12.5
13.1 -- 13.2
Network Programming With Threads
Advanced Graphics
Apr. 23, 25, 27 13.3 -- 13.5 Advanced GUI Programming
April 30 END OF TERM Wrap-up and Review
FINAL EXAM: Tuesday, May 8, 8:30--11:30 AM