This course ended on
May 8, 2012

CPSC 225: Intermediate Programming

   Department of Mathematics and Computer Science
   Hobart and William Smith Colleges

   Spring 2012.

   Instructor:  David J. Eck  (

   Course Handout:

   Monday, Wednesday, Friday, 11:15--12:10 PM, Room Eaton 111.
   Lab:  Thursday, 1:30--2:55, Gulick 208.

Lab 1, January 19
Spellcheck (and Eclipse)
Lab 2, January 26
Sort/Search Experiments
Lab 3, February 2
Lab 4, February 9
Linked Lists
Lab 5, February 16
Lab 6, February 23
CVS / Debugging
Lab 7, March 1
Lab 8, March 8
Stack and Map
Lab 9a, March 15
Not PowerPoint, Part 1
Lab 9b, March 29
Not PowerPoint, Part 2
Lab 10, April 5
Net Draw
Lab 11, April 12
Web Server

Some Links:

Week 1: January 18 and 20

This shortened three-day week is an introduction to the course. We will begin with a little review on Wednesday. We will then start in on Chapter 8. We will only be covering Section 8.3 and Section 8.5 in that chapter. However, I encourage you to read the entire chapter.

Section 8.3 covers exceptions and the try..catch statement in more detail than you've probably seen, and it covers checked exceptions and mandatory exception handling. Section 5 is an introduction to the "Analysis of Algorithms," which considers efficiency of algorithms in terms of the amount of time that they take to run for an input of a given size. This is an important consideration that we will use throughout the course when evaluating algorithms. It might be next week before we get to Section 8.5.

The first lab of the course meets on Thursday at 1:30, in Gulick 208.

Week 2: January 23, 25, and 27

On Monday, we will continue to work on Section 8.5, Analysis of Algorithms. We will then work briefly on Section 8.3 (try..catch and exceptions), which we didn't cover last week after all. Sometime on Wednesday, we should get to Section 9.1, which covers recursion. We will spend a week on recursion, so the only reading for the week is Section 9.1.

The lab this week will be on the running time of sorting and searching algorithms.

Week 3: January 30; February 1 and 3

We continue with Section 9.1 for the first part of the week. I will introduce turtle graphics and show how to use it to do recursive drawing. You will be doing some of that yourself in the lab. We will also talk abou the QuickSort sorting algorithm, which uses recursion.

By Friday at the latest, we will start Section 9.2 which covers linked data structures and, in particular, linked lists.

Week 4: February 6, 8, and 10

We will finish Section 9.2 by looking at more operations on linked lists. We will be moving on to Section 9.3 by Wednesday. Section 9.3 covers two important data structures, stacks and queues, and some of their applications. It also introduces an important general concept, Abstract Data Types (ADTs). Stack and queues are abstract data types that can be implemented in several ways. We will see how to implement a stack using either an array or a linked list.

Week 5: February 13, 15, and 17

We will finish section 9.3 with a discussion of how a stack of activation records is used to implement subroutine calls and recursion. We will also talk about how to use a stack or queue instead of recursion.

By the end of class on Monday, we will move on to Section 9.4, which covers binary trees, tree traversal, binary sort trees, and expression trees.

Week 6: February 20, 22, and 24

There is a test on Wednesday of this week. A review sheet was handed out on Friday and is available on line.

This week, we will finish up Section 9.4 and start Chapter 10. We will not be covering Section 9.5. Chapter 10 covers generic programming and parameterized types. We have already encountered some parameterized types: ArrayList and LinkedList. Chapter 10 introduces more examples and covers the theory behind them.

Week 7: February 27 and; March 2

We move on to generic programming and Chapter 10. The reading for the week is Chapter 10, Sections 1 to 4. We will not cover this material in exactly the order that it appears in the book. After covering some basics (the idea of generic programming, wrapper classes for the primitive types, and for-each loops for traversing collections), we will look at some of the basic ways to use lists, sets, and maps. The lab on Thursday will, in particular, use sets of strings.

Week 8: March 5, 7, and 9

I will finish all I have to say about Chapter 10 this week. If you are following the syllabus, you'll notice that we are spending less time on this chapter than I originally planned. We will finish up Sections 1--4 on Monday and Wednesday. On Friday, we'll look at just the more basic material from Section 10.5, mostly from Section 10.5.1. (I'll also briefly mention a few things from the rest of that section.) Next week, we will move on to Chapter 11.

Week 9: March 12, 14, and 16

Next week is Spring Break! Have fun! Do some programming!

The lab this week is part of a two-week lab called "Not PowerPoint." The program that you will work on is vaguely inspired by PowerPoint, only in the sense that it lets the user create, edit, and display a series of "slides" containing some text. In preparation for the lab, we will look at some of the advanced GUI material in Chapter 13. You should read Sections 13.1 and 13.2.

In the second part of the lab, after break, you will add to the program the capability to save work to a file, and to re-open that file and continue editing the work later. This will depend on material in Chapter 11, which we will start this week. You should read sections 11.1 through 11.3. We will start this material this week and pick up after break where we leave off on Friday.

Week 10: March 26, 28, and 30

We continue looking at Java IO. We will begin the week talking about files, Sections 11.2 and 11.3. We will start in on networking, Section 11.4, by the end of the week. The lab for this week is a continuation of the lab from the Thursday before Spring break.

Information about the final project is available. You should meet with me over the course of the next week to discuss your ideas for a project. I will have a sign-up sheet in class on Monday and Wednesday.

There is a test coming up next week, on Wednesday, April 4.

Week 11: April 2, 4, and 6

There is a test this week, on Wednesday, April 4. A review sheet is available.

For the rest of the week, we will be talking about Networking, Section 11.4. In the lab, you will work with your first network program.

Week 12: April 9, 11, and 13

We will finish up networking on Monday and Tuesday, which will be the last of Chapter 11. After that, we will move on to Chapter 12, which covers threads and parallel programming. You should read Section 12.1.

In lab this week, you will write a basic threaded web server.

Week 13: April 16, 18, and 20

We will continue talking about threads this week. We will cover as much of Chapter 12 as we can, before moving on to Chapter 13 next week.

We are not having a regular lab this week. Instead, you should use the lab period to work on your final project (or to finish up Lab 11 if you prefer). You should have some work done your final project before the lab period, and you should show me your work during the lab.

Week 14: April 23, 25, and 27

We will cover some topics from Chapter 13 this week, notably the Model/View/Controller design pattern and a discussion of the use of events in GUI programs. Important sections to read include 13.3.1 to 13.3.3, 13.4.1 to 13.4.4, and 13.5.5. However, you should really read the whole chapter!

End of Term: April 30 and May 8

Monday, April 30 is the last day of classes for the semester. I want to finish by talking briefly about Actions and AbstractAction (Section 13.3), and then I will answer questions about the final exam.

Your final project is due on Tuesday, but will actually be collected on Wednesday morning. It should be in your homework folder in classes/cs225/homework by that time.

The final exam is scheduled for 8:30 AM on Tuesday, May 8, in our regular classroom. A review sheet is available.