Computer Science 124:
Introductory Programming

   Department of Mathematics and Computer Science
   Hobart and William Smith Colleges

   Fall 2017.

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

   Monday, Wednesday, Friday, 10:10–11:05 AM
        Room Gulick 2000 (formerly room number 206A).

   Lab: Thursday, 1:30–2:55 PM
        Room 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. And a version of Java can be used to write applications for Android mobile phones. Even high-performance scientific programming has been done in Java. Java has also become perhaps the most popular language 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 Chapters 1 through 7, with some 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 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 nearby to help you get through the trouble that inevitably arises. I will make a "lab worksheet" available on-line for each lab. For one or two 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 due date will be extended for longer, more complex labs.

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


Quizzes will be given at the beginning of some classes and labs, maybe once a week. Most quizzes will be announced in advance, but a few might not be. Quizzes will sometimes cover material from assigned readings before that material is covered in class, so it is important to keep up with the reading! Quizzes can cover old as well as recent material. It is not generally possible to make up quizzes that you miss. However, your lowest quiz grade will be dropped.

Tests and Final Exam

There will be two in-class tests in addition to a final exam. The tests are currently scheduled for Friday, September 29, and on Friday, November 3. The final exam will take place during the officially scheduled exam time for the course, which is Wednesday, December 13, at 8:30 AM.

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.


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%

Letter grades are assigned approximately as follows: 90-100: A; 80-89: B; 65-79: C; 55-64: D; 0-54: F. Grades near a cutoff get a + or -.

No Technology During Lecture!

This is a computer science course, but that doesn't mean that it is OK to use a computer or cell phone during lecture. Use of a laptop, cell phone, or other device is not allowed during lecture. (The only exception is if you have a verified medical reason to take class notes on a computer.) For note taking, you should use paper.

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.

Attendance Policy

I assume that you understand the importance of attending class. While I do not 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 your work for that lab, but your grade for the lab might 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 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 test, or I will average your other grades so that the missing grade does not count against you. Since your lowest quiz grade will be dropped, make-up quizzes will be extremely rare.

Also, I ask that in the absense of real necessity, you do not walk in and out of class during lecture.

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, Q Fellows support you in courses that require math, 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.

Teaching Fellows

Computer Science teaching fellows will be available in the Rosenberg 009 computer lab from 7:00 to 10:00 PM, Sunday through Thursday, starting Sunday, September 3. The teaching fellows are students, usually computer science majors, who can offer help on course material and programming assignments.

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

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. You will want to bookmark this page! This course does not use Canvas.

Tentative Schedule

Here is a tentative schedule of readings for this course. We will try to keep approximately to this schedule, but the actual schedule will be posted weekly on the course web page. 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 entirty, if you really want to learn Java. I also recommend reading the end-of-chapter exercises and reading their solutions on-line. (Note that we will cover some of the material from Chapter 6 in labs before we get to Chapter 6 on this schedule.)

Dates Readings, Etc.
Aug. 28; 30; Sept. 1 Sections 1.1, 1.3, 2.1, 2.2: Introduction to computing and to Java.
Sections 1.4–1.6 are recommended.
Sept. 4, 6, 8 Sections 2.3–2.5: Basic building blocks of programs.
Sept. 11, 13, 15 Sections 3.1–3.3: Programming with loops and branches.
Sept. 18, 20, 22 Sections 3.4, 3.5: Additional control structures.
Section 3.8: Arrays
Sept. 25, 27, 29 Selections from Sections 3.6, 3.7.
Test on Friday, Sept. 29
Oct. 2, 4, 6 Sections 4.1–4.4: Writing subroutines.
Oct. 11, 13 Sections 4.5, 4.6: More about program design.
Fall Break, Monday, October 9.
Oct. 16, 18, 20 Section 4.7: Some details (scope, final variables, etc.).
Section 5.1: Introduction to objects and classes.
Oct. 23, 25, 27 Sections 5.2–5.4 and starting 5.5: Object-oriented programming
Oct. 30; Nov. 1, 3 Finishing Section 5.5, and Section 5.6.
Test on Friday, Nov. 3
Nov. 6, 8, 10 Selections from the rest of Chapter 5.
Nov. 13, 15, 17 Selections from Chapter 6.
Nov. 20 Section 7.1: Closer look at arrays.
Nov. 27, 29; Dec. 1 Sections 7.2, 7.3: Programming with arrays and ArrayList.
Dec. 4, 6, 8 Sections 7.4, 7.5: Sorting, Searching, and more about 2D arrays.
Dec. 13 Final Exam: Wednesday, December 13, 8:30 AM