CPSC 225:
Intermediate Programming

   Department of Mathematics and Computer Science
   Hobart and William Smith Colleges

   Spring 2019.

   Instructor:  David J. Eck.

   Textbook:  Available on line at http://math.hws.edu/javanotes8/

   Monday, Wednesday, Friday, 9:05–10:00
         Gulick 2000.
   
   Lab:  Tuesday, 11:55–1:20
         Rosenberg 009.

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, classes, and arrays. 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 the JCF (Java 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, and threads. And you will learn more about GUI programming.

The textbook for the course will consist of Chapters 8 through 13 from my on-line textbook, Introduction to Programming Using Java, Eighth Edition, which can be found on the web at http://math.hws.edu/javanotes8. We will also be covering some of the material in earlier chapters that you might not have seen in CPSC 124. A PDF version of the book, which you can download for reading on your computer, is available at this address:

http://math.hws.edu/eck/cs124/downloads/javanotes8-linked.pdf

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. 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.


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, the labs will introduce you to some of the capabilities of the Eclipse IDE. And some GUI techniques will be introduced in the lab rather than in class.

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 fellows, or, when working on a team project, from your teammates.

In addition to programming assignments, there will be a few written assignments. Your responses to written assignments can be typed or hand-written. Labs and assignments together will count for 40% 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 final class period, on May 6. 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!


Tests

There will be two in-class tests, which will be given on Wednesday, February 27 and on Monday, April 15.

The final exam for the course will take place at the time scheduled by the Registrar's office: Sunday, May 12, at 1:30 PM. The final exam is cummulative, with some emphasis on material covered since the second test.


Grading

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

            First Test:            15%
            Second Test:           15%
            Final Exam:            20%
            Final Project:         10%
            Labs and Assignments:  40%

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 66–79%, D to 55–65%, and F to 0–54%. Grades near the endpoints of a range get a plus or minus.


Teaching Fellows

Computer Science Teaching Fellows will be available on a regular schedule in the Rosenberg 009 computer lab. The schedule will most likely be from 7:00 to 10:00 PM, Sunday through Thursday. If this schedule changes, I will announce it in class.


No Technology During Lecture

I ask that you refrain from using any technology (beyond pen/pencil and paper) in lecture, unless you have a verified need to take notes on computer. This includes laptops, tablets, and cell phones.

There is substantial research showing that taking notes on paper can improve retention of the material, compared to note-taking on computer. My real advice is to take notes in outline form, noting down important ideas and examples, and to make a more formal copy of the notes after class, filling in any missing details. There is also research showing that the multitasking that you are likely to engage in if you have a computer open in front of you is detrimental to learning.


Statements from the Center for Teaching and Learning

At Hobart and William Smith Colleges, we encourage you to learn collaboratively and to seek the resources that will enable you to succeed. The Center for Teaching and Learning (CTL) is one of those resources: CTL programs and staff help you engage with your learning, accomplish the tasks before you, enhance your thinking and skills, and empower you to do your best. Resources at CTL are many: Teaching Fellows provide content support in 12 departments, Study Mentors help you manage your time and responsibilities, Writing Fellows help you think well on paper, and professional staff help you assess academic needs.

Disability Accommodations: If you are a student with a disability for which you may need accommodations, you should self-identify, provide appropriate documentation of your disability, and register for services with Disability Services at the Center for Teaching and Learning (CTL). 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/academics/ctl/disability_services.aspx. Please direct questions about this process or Disability Services at HWS to Christen Davis, Coordinator of Disability Services, at ctl@hws.edu or x 3351.


Office Hours 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.

The Web page for this course is http://math.hws.edu/eck/cs225/index.html. I will post weekly readings and assignments on that page. This course does not use the Canvas website.


Tentative Schedule

Here is a very tentative weekly schedule of readings and topics for the course; for the actual week-by-week schedule, see the course web site:

Dates Readings, Etc.
Jan. 23 and 25 Sections 5.5–5.8: Subclasses, inheritance, interfaces.
Jan. 28 and 29; Feb. 1 Section 8.2: Preconditions, postconditions, invariants.
Section 8.3: Exceptions and try..catch.
Section 8.4.1: Assertions.
Feb 4, 6, and 8 Section 8.5: Introduction to analysis of algorithms.
Section 9.1: Recursion
Feb. 11, 13, and 15 Section 9.2: Linked Data Structures.
Some GUI basics from Chapter 6.
Feb. 18, 20, and 22 Section 9.3: Stacks and Queues.
More GUI basics from Chapter 6.
Feb. 25 and 27; Mar. 1 Section 9.4: Binary Trees.
TEST on Wednesday, Feb. 27, covering through 9.3.
Mar. 4, 6, and 8 Section 10.1: Introduction to Generic Programming.
Section 10.2: Lists and Sets.
Mar. 11, 13, and 15 Section 10.3: Maps.
Section 10.4: Programming with the JCF.
Spring Break, March 16–24
Mar. 25, 27, and 29 Section 10.5: Writing generic code.
Section 10.6: Introduction to the stream API.
Apr. 1, 3, and 5 Section 11.1: Input/Output streams.
Section 11.2: Files.
Apr. 8, 10, and 12 Section 11.3: More file programming examples.
Section 11.4: Introduction to network Programming.
Apr. 15, 17, and 19 Section 12.1: Introduction to Threads.
Test on Monday, Apr. 15, covering through 11.3.
Apr. 22, 24, and 26 Sections 12.2–12.4: Programming with threads.
Apr. 29; May 1 and 3 Sections 13.1, 13.2: Some advanced GUI programming.
May 6 Last day of class. Wrap up the course.
May 12 Final Exam: Sunday, May 12, 1:30 PM