Computer Science 124:
Introductory Programming

   Department of Mathematics and Computer Science
   Hobart and William Smith Colleges

   Fall 2009.

   Instructor:  David J. Eck  (
   Textbook:  Available on line at

   Monday, Wednesday, Friday, 3:00 -- 3:55
        Room Napier 101.

   Lab: Thursday, 11:55 -- 1:20
        Library Multimedia Lab

About The Course

Computer Science 124 is an introduction to computer programming. Programming is the art of explaining to a computer what you want it to do, in exact detail and in a language that the computer can understand. Programming is only one part of computer science, but it is the most basic and most central part. It is an activity that requires you to think logically, to solve problems, to express yourself clearly, and often to endure a certain amount of frustration as you try to get your programs to work. The result, though, can be very rewarding.

This course has no prerequisites, although a general familiarity with computers would certainly be helpful.

Many different languages are used for writing computer programs. Some of the most important are: Assembly language, C, C++, C#, Pascal, BASIC, Cobol, FORTRAN, Ada, Lisp, Smalltalk, Prolog, Perl, Python, Ruby, and Java. It is impossible to learn all the different programming languages. Fortunately, it is possible to learn principles and general techniques of programming that can be applied no matter what language you write in. Although you will work with a specific language, you should try not to lose sight of the general ideas.

In this course, we will use the Java programming language. Java is a relatively new language, having been introduced in 1995. In the years since its introduction, it has become one of the most important languages for real application development. It is a very versatile language. Java can be used to write regular desktop applications and to make "applets" that can appear on Web pages. Many complex interactive Web sites are written in Java, and it can be used to write applications for many types of mobile phones. Even high-performance scientific programming has been done in Java. Although C++ might still be the most popular language, Java seems to be at least a close second at this point in time. Java has also become very popular for teaching programming.

Instead of a regular textbook, we will use an on-line text that I wrote for this course. The book can be found at We will cover the first seven chapters, out of the twelve, with a few topics omitted. I urge you to read the book on-line or to download a PDF version for easier reading on your computer, but if you would like a printed version, you can order one. See the links at the bottom of the main page of the book for more information.

Computer Labs

This course has a required lab component. The labs give you a chance to get hands-on experience with the computer and with programming while someone is nearby to help you get through the trouble that inevitably arises. I will make a "lab worksheet" available on-line for each lab. For a few of the labs, you will have the option of working with a partner. Aside from that, the labs are individual work.

Each lab will involve some programming. There might also be a few questions for you to answer in writing. Your lab report will consist of your answers to the programming and other exercises. It is quite possible that you will not finish all the exercises during the Thursday lab period. That is to be expected. Completing the lab exercises is part of your homework for the course.

Lab reports will generally be due at the beginning of the following lab. In some cases, the lab will be a starting point for a longer programming assignment that you can work on for several weeks.

In general, lab reports and programming assignments will not be accepted late (although in extraordinary cases, with sufficient reason, you might persuade me to accept them one or two days late).

About Programming Assignments

The computer programs that you turn in should be your own work or, in cases where you work with a partner, the work of you and your partner. You can get a certain amount of help from the Professor and from Teaching Assistants, but you should not discuss the details of your programs with anyone else, you should not look at the programs of other people in the class, and you should not use code that you find on the Internet or in books. (Note: For some of the assignments this semester, I might experiment with different rules about using other people's code.)

Inevitably in a programming course, it seems that a few people will turn in work that is not their own. You should understand that it is usually easy to detect copying of programs -- even when a program is modified to make it look a little different.

Final Programming Project

A final programming project will be due at the end of the course. This will be a project that you choose and design on your own (with some help from me if you need it). It should be more ambitious than the other programs that you write for the course. For the final project, you can work with a partner if you like. Naturally, I will expect group projects to be more ambitious than a typical individual project. I will give you more detail about the final project in the middle of the term.

Tests, Quizzes, and Grading

There will be two in-class tests in addition to a final exam. The tests will be given on Monday, October 5 and on Monday, November 9. The final exam will take place during the official scheduled exam time period for the course, which is Tuesday, December 15, from 1:30 to 4:30 PM.

The final exam will be comprehensive, covering material from the entire term, with some emphasis on material covered during the last part of the course.

In addition to the tests and exam, there will be some quizzes. On most Mondays, when there is not a test, we will start the class with a ten-minute quiz. The first quiz will be given on Monday, September 14. Your lowest quiz grade will be dropped.

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

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

Attendance, Etc.

I assume that you understand the importance of attending class. While I do not necessarily take attendance in every class, I expect you to be present unless circumstances make that impossible. Participation in lab is particularly important, and I do take attendance at lab. If you miss a lab without a good reason, you can still turn in a lab report for that lab, but your grade on the lab report will be reduced.

If you miss a quiz, test, or final exam without an extremely good excuse, you will receive a grade of zero. If you think you have an excuse for missing a quiz or test, please discuss it with me, in advance if possible. If I judge that your excuse is reasonable, I will -- depending on the circumstances -- either give you a make-up quiz or test, or I will average your other grades so that the missing grade does not count against you.

Although it should not need to be said, I expect you to maintain a reasonable level of decorum in class. This means that there is usually no eating or drinking in class. Cell phones are turned off. There is no walking in late or walking in and out of the room during lecture.

Office Hours, E-mail, WWW

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 office hours and post them on my office door and on the course web page as soon as my schedule is determined, but note that your office visits are certainly not restricted to my regular office hours!

My e-mail address is E-mail is good way to communicate with me, since I usually answer messages within a day of receiving them.

The home page for this course on the World Wide Web is located at This page will contain a weekly guide to the course and links to lab worksheets.

Tentative Schedule

Here is a tentative schedule of readings for this course. We will try to keep approximately to this schedule. We will not cover every topic in every section-- but it would be a good idea for you to read the first seven chapters of the book in their entirity, if you really want to learn Java. I also recommend reading the end-of-chapter exercises and reading their solutions on-line.

Note that the schedule only allows five class periods for Chapter 6. We will, however, cover some of the material in that chapter earlier in the course, in lab.

Dates Readings, Etc.
Aug. 31; Sept. 2 and 4 Chapter 1; Section 2.1; Begin Section 2.2
Sept. 7, 9, and 11 Finish Section 2.2; Section 2.3; Section 2.4
Sept. 14, 16, and 18 Section 2.5; Section 3.1; Section 3.2
Sept. 21, 23, and 25 Section 3.3; Section 3.4; Section 3.5
Sept. 28 and 30; Oct. 2 Section 3.6; Section 3.7; Section 4.1; Begin Section 4.2
Oct. 5, 7, and 9 TEST, Monday October 5, on Chapters 1 to 3.
Finish Section 4.2; Section 4.3; Section 4.4
Oct. 14 and 16 Spring Break, Monday and Tuesday.
Section 4.5; Section 4.6; Section 4.7
Oct. 19, 21, and 23 Section 5.1; Section 5.2
Oct. 26, 28, and 30 Section 5.3; Section 5.4; Section 5.5
Nov. 2, 4, and 6 Section 5.6; Section 5.7
Nov. 9, 11, and 13 TEST, Monday, November 9, on Chapters 4 and 5
Topics from Sections 6.1 through 6.5
Nov. 16, 18, and 20 Topics from Sections 6.6 through 6.8
Nov. 23 Thanksgiving holiday, Wednesday through Friday.
Section 7.1; Begin Section 7.2
Nov. 30; Dec. 2 and 4 Finish Section 7.2; Section 7.3; Begin Section 7.4
Dec. 7, 9, and 11 Finish Section 7.4; Section 7.5
Dec. 15 Final Exam
Tuesday, December 15, 1:30 PM