Spring 2002

Computer science is no more about computers than astronomy is about telescopes.

—Edsger W. Dijkstra


This course is an intensive introduction to the fundamental concepts of computer science, using the Java programming language. It is designed for students who intend to major in computer science or a related technical field. Students will gain experience with computer programming through the study of Java, and with computer science through the study of several important algorithms and data structures. Topics to be covered include sorting and searching algorithms, iteration and recursion, arrays and vectors, linked lists, binary search trees, elementary analysis of algorithms, and a thorough introduction to object-oriented programming in Java, including data types, objects, classes, methods, inheritance, applets and graphics, exception handling, and file processing. Class periods will consist of a mixture of lectures and hands-on interaction at the computer. There will be weekly programming assignments illustrating the concepts covered in class.

Prerequisite: Mathematics 30 or equivalent. No previous knowledge of computer programming is assumed.

This course fulfills the Pomona College PAC 3 distribution requirement.

How to Succeed in CS 50

Section 1

Instructor: Jim Marshall
Office: Andrew 261
Office Hours: Monday 2-4pm, Thursday 11am-noon, and by appointment.
Phone/Voicemail: 78650 (off-campus: 607-8650)
E-mail: jmarshall@pomona.edu

Section 2

Instructor: John Brown
Office: Millikan 212B
Office Hours: Monday 2:30-4:30pm, Wednesday 11am-noon, and by appointment.
Phone/Voicemail: 71866 (off-campus: 607-1866)
E-mail: john.brown@pomona.edu

Course Materials


Computing Concepts with Java 2 Essentials, 2nd Edition
by Cay Horstmann

Students should always bring their textbook and extra disks with them to lab. Also, from time to time, supplementary readings may be handed out in class.

Computer Accounts

All students enrolled in CS 50 need a Novell account on the Pomona network. Pomona students should already have such an account. Off-campus students should go to the consultant desk in the Seaver Computing Center as soon as possible to obtain an account. Click here for more information.

Grading and Homework

You are expected to attend all lectures and labs. Your final course grade will be based on attendance, class participation, weekly programming assignments, and three exams, weighted as follows:

35% Programming Assignments
15% Midterm Exam 1 (Thursday, February 28, 7:00-9:00pm)
15% Midterm Exam 2 (Thursday, April 11, 7:00-9:00pm)
25% Final Exam
10% Class Attendance and Participation

The location of the exams will be announced in class.

Homework will be assigned each week and will be due the following Tuesday by the beginning of class. You will hand in your homework assignments electronically, via a drop folder on the network (to be explained in class). You do not need to turn in a hardcopy printout of your assignment, unless we explicitly ask for one. Some homework assignments will have optional problems that you can complete for extra credit.

Late Homework Policy

Good Programming Style

In its purest form, programming is the art of expressing abstract ideas about computation in concrete language that is as clear and precise as possible. To become an expert programmer, it is not enough simply to be able to write fancy programs that run correctly on a computer. Programs must be written primarily for other programmers to read and understand, and only incidentally for machines to execute. Expert programmers rely at least as much on a well-developed sense of aesthetics and style as on technical mastery of the programming language.

Accordingly, your homework grade will be strongly influenced by the legibility and organization of your code. It is very important for you to develop a clear and consistent programming style, making good use of comments, indentation, and well-chosen variable and method names. Your code should follow the general stylistic guidelines listed below:

Homework Grading Scale

Homework grades will be based on both functionality and style, according to the following scale. Note that even if your program works 100% correctly, it may still get a B due to stylistic problems. In order to get an A, your program must not only work correctly, it must be well-organized, easy to read and understand, and must conform to the stylistic guidelines given above. If there are known problems with your code, you should describe these problems in a comment at the top of your program.

A+ Program incorporates extra features beyond the assigned requirements or gets the job done in a particularly elegant way. This grade is used for outstanding submissions that significantly exceed the expectations of the assignment.
A Program works correctly for all input data, is well-written and documented, and uses good programming style. This grade designates a submission that clearly satisfies all of the requirements of the assignment—a job well done.
B Program works correctly for most but not all input data, or has stylistic problems. This grade designates a submission that meets most of the general requirements of the assignment.
C Program compiles and executes, but works incorrectly. This grade signifies that the submission has problems serious enough to fall short of the assigned requirements.
D Program does not compile or execute. This grade designates a submission that has extremely serious problems, but nevertheless demonstrates at least some effort and understanding.
F Program shows little effort, and does not represent passing work.

Getting Help

You are strongly encouraged to come to office hours or talk to one of the student mentors whenever you are having difficulty with the material. If you are confused about something, don't stay that way! Staying confused will only make things worse later. Come see one of us as soon as possible so that we can clear up the problem. There is no point in staring at your code for hours trying to figure out why your program won't work, when just a few minutes is usually all it takes to track down the problem together.

If you want to see me but can't make it to my office hours, I'll be more than happy to schedule an appointment. Ask me about it in class, send me some e-mail, or leave a message on my voice mail. You can also try to catch me outside of my regular office hours, though I can't always guarantee that I'll have time to meet with you right then.

Student Mentors

We have several student mentors for CS 50 this semester. Here is their contact information:

Sarah, John, and Kabir will be helping out during the labs each week. In addition, all of the mentors are available to answer your questions about the course material or homework assignments. If you would like to set up an appointment with one of them, feel free to contact them directly.

Weekly Mentoring Sessions

Collaboration Policy

The highest level of academic integrity is expected of every student. You are strongly encouraged to discuss ideas and approaches to solving problems, on a general level, with the student mentors and with your fellow classmates, but unless I tell you otherwise, the work you hand in must be done independently. Effective learning is compromised when this is not the case.

Accordingly, you should never read or copy another student's code or solutions, exchange computer files, or share your code or solutions with anyone else in the class. Under no circumstances may you hand in work done by, or in collaboration with, someone else under your own name, with the exception that you may freely use any code that we provide to you or code from the textbook, as long as you cite this code as coming from the instructor or the book. Additionally, the student mentors are allowed to help you with your code.

Because many students feel they learn more through collaboration, on some assignments you will be allowed to work jointly with one other person (although you may work alone if you wish). No more than two people may work together. If you work with a partner, then you and your partner may share code for the particular assignment on which you work jointly, and both of you should participate equally in designing, writing, and debugging the code. In this case you should submit a single, joint assignment with both names clearly indicated at the top of your code.

When in doubt, credit the people or sources from whom you got help. This also goes for any help obtained via the Internet. You will not lose any points for acknowledging significant help obtained in a legitimate fashion. If you are ever unsure about what constitutes acceptable collaboration, just ask. Here are some examples of what is considered "okay" and "not okay" collaboration.

Failure to abide by these rules is considered plagiarism, and will result in severe penalties. Usually the first offense results in failure in the course. A second offense is automatically referred to the College's Board of Academic Discipline. See the Academic Honesty Policy in the Student Handbook for further information. Please do not put me, yourself, or anyone else in this unpleasant situation.