Computer Science 124:
Introductory Programming

   Department of Mathematics and Computer Science
   Hobart and William Smith Colleges

   Spring 2017.

   Instructor:  David J. Eck  (eck@hws.edu)
   
   Textbook:  Available on line at http://math.hws.edu/javanotes/

   Monday, Wednesday, Friday, 10:10–11:05 AM
        Room Gulick 206A.

   Lab: Thursday, 11:55–1:20 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 http://math.hws.edu/javanotes/. 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 http://math.hws.edu/javanotes/ 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 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.


Quizzes

Quizzes will be given at the beginning of some classes and labs, maybe once a week. Some quizzes will be announced in advance, but most will not. 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 will cover old as well as recent material; there is no restriction on how far back into the course the questions can go. It is not generally possible to make up quizzes that you miss. However, your two lowest quiz grades will be dropped.


Tests and Final Exam

There will be two in-class tests in addition to a final exam. The tests will be given on Monday, February 20 and on Wednesday, April 5. The final exam will take place during the officially scheduled exam time for the course, which is Saturday, May 6, at 7:00 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. The final exam will count for the same fraction of your course grade as the tests.


Grading

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%

Letter grades are assigned 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 a lab report for that lab, but your grade on the lab report 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 two lowest quiz grades 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.


Disability Statement from the CTL

Disability Accommodations: If you are a student with a disability for which you may need academic accommodations in this course, 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 CTL@hws.edu or x3351.


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. 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 eck@hws.edu.

The home page for this course on the World Wide Web is located at http://math.hws.edu/eck/cs124/index.html. This page will contain a weekly guide to the course and links to lab worksheets. You will want to bookmark this page! This courses 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 reading assignments 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.
Jan. 17 and 19 Chapter 1, especially Sections 1.1 and 1.3.
Introduction to Linux and Java.
Jan. 22, 24 and 26 Sections 2.1 to 2.4
Jan. 29; Feb. 1 and 3 Sections 2.5, 3.1, and 3.2
Feb. 6, 8, and 10 Sections 3.3 to 3.5
Feb. 13, 15, and 17 Selections from Sections 3.6 to 3.8
Feb. 20, 22, and 24 TEST on Monday, February 20, on Chapters 1 to 3.
Sections 4.1 and 4.2
Feb. 27; Mar. 1 and 3 Sections 4.3 to 4.5
Mar. 6, 8, and 10 Sections 4.6, 4.7, and 5.1
Spring Break, March 11–19
Mar. 20, 22, and 24 Sections 5.2 and 5.3
Mar. 27, 29, and 31 Sections 5.4 to 5.6
Apr. 3, 5, and 7 TEST on Wednesday, April 5, on Chapters 4 and 5.
Section 5.7
Apr. 10, 12, and 14 Selections from Chapter 6
Apr. 17, 19, and 21 Sections 7.1 to 7.3
Apr. 24, 27, and 29 Sections 7.4 and 7.5
May 1 Last day of class; wrap up the course!
May 6 Final Exam: Saturday, May 6, 2017, 7:00 PM