Computer Science 124:
Introductory Programming

   Department of Mathematics and Computer Science
   Hobart and William Smith Colleges

   Spring 2021.

   Instructor:  David J. Eck  (
   Textbook:  Available online at

   Monday, Wednesday, Friday, 9:50–10:50 AM
       Second Floor of the Barn.

   Lab: Thuesday, 11:50–1:20 PM
       To meet remotely on Zoom.

Everything on this syllabus is tentative until the start of classes. Even after classes start, changes and adaptation might be necessary because of the pandemic. However, we will try to cover all of the material listed in the syllabus, no mater what form the class takes.

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 that have been used extensively include: Assembly language, C, C++, C#, Pascal, BASIC, Cobol, FORTRAN, Ada, Lisp, Smalltalk, Prolog, Perl, JavaScript, Python, PHP, Ruby, Swift, 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 was introduced in 1995. In the years since then, 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. Furthermore, many complex interactive Web sites are written using Java on the Web server. Even high-performance scientific programming has been done in Java. Java has also become one of the most popular languages for teaching programming.

Instead of a regular textbook, we will use an online text that I wrote for this course. The book can be found at Versions of this book have been used for all sections of CPSC 124 since 1996. We will cover Chapters 1 through 7, with many topics omitted. I urge you to read the book online 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 for more information. If you really want to learn programming, you will read the book carefully and get help on the parts that you don't understand.

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 available to help you get through the trouble that inevitably arises. I will make a "lab worksheet" available online for each lab. For some 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. The work that you turn in for the lab will consist of your answers to the programming and other exercises. It is expected that you will not finish all the exercises during the lab period. Completing the lab exercises is the main part of your homework for the course.

Your work for a lab will most often be due by the beginning of the following lab. More time will be allowed for some labs that are longer and more complex.

The general policy is that lab reports and programming assignments should not be turned in late. However, short extensions are possible in cases where there is sufficient reason.

Because of the pandemic, working closely together in person is not possible. Because of that, the lab for this course will be offered online through Zoom. Details about the Zoom meeting will be posted on the course's Canvas page. Instructions for getting help during the lab period and for turning in your lab work will be included in the first lab worksheet.

Software for Java Programming

Traditionally, programming labs for this course used the Colleges' computer labs. This semester, however, with the labs being run online, you will very likely want to do the programming on your own computer. We will use a programming environment called Eclipse, which can be downloaded and used for free. Eclipse is easy to install on Windows, Mac OS, and Linux computers. Instructions for doing so will be emailed to students before the start of classes.

If you do not want to program on your own computer, it will still be possible for you to work in the Colleges' computer labs. Eclipse should be available on all lab computers, and instructions for using it will be part of the first lab.

About Programming Assignments and Academic Integrity

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, unless that is specifically allowed for a given assignment.

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 try to disguise its source. Copying a program, or letting someone else copy your program, is a form of academic dishonesty and will be treated as such.


There will be occasional quizzes, which I expect to be given online through Canvas. Some quizzes will be given at the beginning of lab. Some will be given outside of class. It is possible that there will be some online quizzes during class time, if it turns out that everyone is able to access Canvas during class. Quizzes will be announced in advance. Some of the quizzes will be reading quizzes, covering material that has been assigned for reading but not yet covered in class.

In general, there will be no make-up quizzes. However, your lowest two quizzes will be dropped.

Tests and Final Exam

I am hoping to be able to give tests in person and on paper. If that becomes impossible, the tests will either be given online through Canvas, at the scheduled time, or they will be changed to take-home tests of some kind. (A take-home test gives you more time to work on the test and has a different kind of question than would be given on a timed test.)

Two tests and a final exam are scheduled. The tests will be given on Friday, February 26 and on Wednesday, March 31. The final exam will take place at the officially scheduled exam time for the course, which is Thursday, May 6, 7:00 PM.


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

             First Test:            15%
             Second Test:           15%
             Quizzes:               15%
             Final Exam:            15%
             Labs and Assignments:  40%

Final grades might be "curved" to some extent, but cutoffs for letter grades will not be lower than the following: 90-100: A; 80-89: B; 65-79: C; 55-64: D; 0-54: F. Grades near a cutoff get a + or -.

Attendance Policy

I assume that you understand the importance of attending class, and you should always plan to be in class, if possible. However, because of the pandemic, I will not take attendance, and attendance is not required. In fact, if you are sick, you should not be in class. Technology permitting, classes will be streamed on Zoom and also recorded and posted on Canvas.

Teaching Fellows

Computer Science teaching fellows will be available on Zoom from 7:00 to 10:00 PM, Sunday through Thursday. Details will be posted on the Canvas page for this course. The teaching fellows are students, usually computer science majors, who can offer help on course material and programming assignments.

About Office Hours

The Colleges' administration advises against having in-person meetings with students in Faculty offices. Since my office is large, however, it might be possible for me to meet there with one person at a time. (This is assuming that classes don't go entirely remote.) However, in-person meetings would be by appointment only, since we can't have groups of people waiting in the hall. It might also be possible to meet somewhere other than my office. If you would like to try to schedule an in-person meeting, you should contact me.

I will schedule a few open, drop-in office hours on Zoom. I will also set up times for individual or group appointments on Zoom. Appointments will be made using the Calendar feature in Canvas. Details will be announced, and Zoom links for office hours will be posted on Canvas.

Of course, email is always a good way to contact me. My email address is I welcome comments and questions by email, and I will usually respond to them fairly quickly.

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: Please direct questions about this process or Disability Services at HWS to Christen Davis, Coordinator of Disability Services, at or x 3351

Tentative Schedule

Here is a tentative schedule of readings for this course. We will try to keep approximately to this schedule, but the actual reading assignments will be posted weekly on the course web page, We will not cover every topic in every section, my any means. However, if you want to learn more of the details of the Java language, it would certainly not be a bad idea to read the first seven chapters of the textbook in their entirety. I also recommend reading the textbook's end-of-chapter exercises and reading their solutions online.

(Note that we will cover some material from the textbook, especially from Chapter 6, before we get to it on this schedule; usually this sort of preview material will be introduced to support lab work. )

Dates Readings, Etc.
Jan. 25, 27, and 29 Sections 2.1, 2.2; Chapter 1, especially Sections 1.1 and 1.3.
Introduction to computing and Java programming.
Feb. 1, 3, and 5 Chapter 2, Sections 2.3, 2.4.
Objects and subroutines; input and output.
Feb. 8, 10, and 12 Sections 2.5, 3.1.
Details of expressions; basic loops and branching.
Feb. 15, 17, and 19 Sections 3.2 to 3.5.
Algorithms; while, for, and if statements.
Feb. 22, 24, and 26 Selections from Sections 3.6, 3.7.
Switch statement; exceptions.
Test on Friday, February 26.
Mar. 1, 3, and 5 Sections 3.8, 4.1, 4.2.
Basic arrays; fundamentals of subroutines.
Mar. 8, 10, and 12 Sections 4.3 to 4.5.
Writing and using subroutines.
Mar. 15, 17, and 19 Sections 4.6 to 4.8
Program design; details of expressions.
Mar. 22, 24, and 26 Sections 5.1 and 5.2.
Objects and classes.
Mar. 29 and 31; Apr. 2 Sections 5.3 and 5.4.
Object-oriented programming.
Test on Wednesday, March 31.
Apr. 5, 7, and 9 Section 5.5 and 5.6.
Inheritance and polymorphism.
Apr. 12, 14, and 16 Selections from 5.7, 5.8; Section 7.3.
Details of classes; ArrayLists.
Apr. 19, 21 and 23 Selections from Chapter 6.
GUI programming.
Apr. 26, 28, and 30 Selections from the rest of chapter 7.
Array processing.
May 6 Final Exam
Thursday, May 6, 7:00 PM