Computer Science 124:
Introductory Programming

   Department of Mathematics and Computer Science
   Hobart and William Smith Colleges

   Fall 2021.

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

   Web site:

   Monday, Wednesday, Friday, 9:50–10:50 AM
       Coxe 7.

   Lab: Tuesday, 10:10–11:40 AM
       Rosenberg 009.

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.

The goals of the course are: to understand basic elements of computer programming including data values, variables, types, control structures, subroutines, arrays, objects, and classes; to be able to use those elements in Java programs; to be able to apply program design techniques to develop solutions to programming problems; and to write well-documented programs that follow appropriate style guidelines.

About the Pandemic

Because of the ongoing Covid 19 pandemic, plans for this course should be regarded as tentative and subject to change if the Covid 19 situation warrants it.

Note that it is the policy of the Mathematics and Computer Science Department that, until further notice, masks should be worn in classes, labs, office hours, Math Intern hours, Teaching Fellow hours, and when present on the third floor of Lansing Hall.

The plan is to have in-person classes and labs. If that becomes impossible, or if we have people going into quarantine, we will deal with that when it happens. If the class is forced to move to remote learning at any time, I expect to continue the class on Zoom. However, I will not offer regular Zoom access to classes that are being held in-person. Of course, you should not come to class if you are sick, but you should contact me to discuss how you can make up the missed material.

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.

Labs are scheduled to meet Tuesdays, 10:10 to 11:40, in Room number 009 in the basement of Rosenberg Hall.

Working on your Own Computer

You will be given an account on the Math/CS Department's computer system to use for this course. Our computers use the Linux operating system. You will be able to do the work for the course on the computers in Lansing 310 and Rosenberg 009.

For at least the first lab, working on Linux is required. After that, you can work on your own computer, if you prefer to do that. However, to do so, you will have to install some software to support Java programming. Instructions will be available after the first lab.

Note that the professor, TA, and Teaching Fellows for this course are there to help you with Java programming. They are not responsible for helping you with Windows or MacOS. They might be willing to try to help, if they have time, but if you use your own computer for Java programming, it's really your responsibility to get Java up and working on that computer.

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 Fellows, 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 at the beginning of class. I hope to give a quiz most weeks when there is not a test, starting with the second week of the course. Quizzes will be announced in advance.

In some cases, quizzes might include questions on material that has been assigned for reading but has not yet been covered in class.

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

Tests and Final Exam

Two in-class tests and a final exam are scheduled. The tests will be given on Friday, September 24 and on Monday, November 1. The final exam will take place at the officially scheduled exam time for the course, which is Friday, December 10. 8:30 AM. A study guide will be distributed in advance of each test.


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

             First Test:            15%
             Second Test:           15%
             Quizzes:               10%
             Final Exam:            20%
             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.

If you need to miss an in-class test, you should make arrangements with me in advance if possible. If that is not possible, you should contact me as soon as you can. If you have a sufficient reason for missing the test, we can arrange a make-up test.

Note that any arrangements for moving your final exam must be made with the Dean's office, according to school policy.

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.

Teaching Fellows

Computer Science teaching fellows will be available from 7:00 to 10:00 PM, Sunday through Thursday. Details will be announced at the start of the semester. The teaching fellows are students, usually computer science majors, who can offer help on course material and programming assignments.

About Office Hours

I expect to hold office hours in my office, Lansing 313, on Mondays, Wednesdays, and Fridays, from 11:00 to 1:00. That's the two periods after class. I will be available by appointment for some time after my classes end, after 2:30 on Mondays, Wednesdays, and Fridays, and after noon on Tuesdays and Thursdays. Meetings on Zoom might be possible, depending on the situation.

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.

Statement from the Center for Teaching and Learning

Disability Accommodations: If you are a student with a disability for which you may need accommodations and are new to our office, you should self-identify for services by scheduling a Welcome meeting (link to do so is on the top right of our webpage)  with Disability Services at the Center for Teaching and Learning (CTL). Disability related accommodations and services will be provided when the registration and documentation process is complete. The guidelines for documenting disabilities can be found at the following website:

Returning students may request their accommodation letter by emailing the request to the or by using the link on the top right of our webpage to schedule a meeting should you feel one is necessary.

Please direct questions about this process or Disability Services at HWS to or x 3351. Jamie Slusser, Disability Services Administrator & Accommodation Specialist and Christen Davis, Associate Director of CTL for Disability Services are the main contact staff for Disability Services.

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, by 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.
Aug. 23, 25, and 27 Sections 2.1, 2.2; Chapter 1, especially Sections 1.1 and 1.3.
Introduction to computing and Java programming.
Aug. 30; Sep. 1 and 3 Chapter 2, Sections 2.3, 2.4.
Objects and subroutines; input and output.
Sep. 6, 8, and 10 Sections 2.5, 3.1.
Details of expressions; basic loops and branching.
Sep. 13, 15, and 17 Sections 3.2 to 3.5.
Algorithms; while, for, and if statements.
Sep. 20, 22, and 24 Selections from Sections 3.6, 3.7.
Switch statement; exceptions.
Test on Friday, September 24.
Sep. 27 and 29; Oct. 1 Sections 3.8, 4.1, 4.2.
Basic arrays; fundamentals of subroutines.
Oct. 4, 6, and 8 Sections 4.3 to 4.5.
Writing and using subroutines.
Oct. 13 and 15 Fall break, no class on Monday, no lab on Tuesday
Sections 4.6 to 4.8
Program design; details of expressions.
Oct. 18, 20, and 22 Sections 5.1 and 5.2.
Objects and classes.
Oct 25, 27, and 29 Sections 5.3 and 5.4.
Object-oriented programming.
Nov. 1, 3, and 5 Section 5.5 and 5.6.
Inheritance and polymorphism.
Test on Monday, November 1.
Nov. 8, 10, and 12 Selections from 5.7, 5.8; Section 7.3.
Details of classes; ArrayLists.
Nov. 15, 17, and 19 Selections from Chapter 6.
GUI programming.
Nov. 22 Thanksgiving Break, no class on Wednesday or Friday.
Continuing with GUI programming.
Nov. 29; Dec. 1 and 3 Selections from the rest of chapter 7.
Array processing.
Dec. 10 Final Exam.
Friday, December 10, 8:30 AM.