Course Description

This course couples work on program design, analysis, and verification with an introduction to the study of data structures that are important in the construction of sophisticated computer programs. Because we will be interested in studying more modern techniques for designing large, complex, and reusable code, we will be using the object-oriented programming language, Java.

You will be expected to write a collection of programs, ranging from very short programs to more elaborate systems. Since one of our goals in this course is to teach you how to write large, reliable programs composed from reusable pieces, we will be emphasizing the development of clear, modular programs that are easy to read, debug, verify, analyze, and modify.

Equally important is the ability to analyze programs using big-"O" notation to understand their runtimes. This will help us evaluate the trade-offs in different choices of algorithms and data structures.

The formal pre-requisite for this course is Pomona CS 54. We also assume that all students enrolled are comfortable writing small to medium-sized programs (around 500 lines of code with several interacting classes) in either Java, Python, or Grace. The knowledge assumed is generally equivalent to that of CSCI 051 as offered at either Pomona or CMC or the Computer Science advanced placement exam. Be aware that neither CS 5 at HMC or CS 30 at Pomona satisfy the prerequisites for this course. If you have any doubts as to whether your programming experience is sufficient for this course, please see us as soon as possible.

By the end of this course, you should have a good understanding of object-oriented design, coding and debugging of programs in Java, and of how one might analyze programs for efficiency. In particular, you will understand the trade-offs involved in selections of different data structures and algorithms to solve computational problems.

This course is a prerequisite for most upper level Computer Science courses. As part of continuing curricular changes in CS, sections of CS 62 will no longer teach C or C++. Instead that material will be taught in CS 105 taught at Pomona. Students should be aware, however, that sections of CS 105 taught at HMC will assume programming background in C. Thus students wishing to take that course at HMC will be required to learn C on their own.

Academic Accommodations

If you are seeking academic accommodations, you must contact your home college’s disability coordinator to establish accommodations. You should plan to meet with your coordinator to discuss appropriate accommodations and may be asked to provide documentation necessary to verify disabilities. Further information is available from the Student Disability Resource Center at CUC. Once your coordinator verifies your status, we will receive an email from them indicating what accommodations are recommended.

Use of electronics in the classroom

Several studies (and our in-person personal experience) have shown that use of electronic devices can be distracting and interfere with learning. We understand that after more than a year of remote learning this might have changed. We ask you to use laptops, tablets, and cell phones only if they are necessary for classroom activities, e.g., to take notes.

COVID-19 Safety Awareness

The faculty at Pomona College knows that person-to-person interaction provides the best liberal arts education. The best learning occurs in small communities. This year we are gathering in person for what we do best: create, generate, and share knowledge. During the past academic year, we built community remotely, and this year we will build on the pedagogical improvements we acquired last year. For example, some of our office hours and written Q&As will be online.

Our health, both mental and physical, is paramount. We must consider the health of others inside and outside the classroom. All Claremont Colleges students have signed agreements regulating on-campus behavior during the pandemic; in the classroom, we will uphold these agreements. We need to take care of each other for this course to be successful. We ask you therefore to adhere to the following principles:

  • there is a mask mandate for all indoor spaces on campus. You must wear a mask for the entire class; eating and drinking are not permitted. If you need to drink water, please do quickly so and put back your mask. Your mask must cover your mouth and nose. The college has zero-tolerance for violations of this policy, and our shared commitment to the health and safety of our community members means if you come to class unmasked you will have to leave class for the day.
  • If you need to miss class or lab for health reasons, concerning symptoms, suspected Covid exposure, unexpected dependent care, technology issues, or other emergency reasons we will work with you. Let us underscore this: please make your decisions always based on health, safety, and wellness—yours and others—and we will work with you at the other end. Take any potential symptoms seriously; we’re counting on each other.
  • When not in class, avoid closed public spaces, and if you can't avoid them: wear your mask properly, wash your hands, and maintain social distance. If you, or a family member, are experiencing hardship because of the pandemic, talk to us or to someone in the Dean of Students office. You are not alone during this time.

The pandemic is fast-moving, and we might have to adjust these principles as the semester evolves. We are always happy to receive your feedback to make this course work.

Let’s care for each other, show empathy, and be supportive. While there will likely be some community transmission and breakthrough infections, together, we can minimize their effect on our community and on your learning.

Instructor & Texts

Instructors:

Alexandra Papoutsaki
222 Edmunds
In-person Office Hours: M 3-6pm, TW 4:15-5:15pm, Zoom Office Hours: T 9-11am
Alexandra.Papoutsaki@pomona.edu
www.cs.pomona.edu/~apapoutsaki/

Thomas Yeh
128 Edmunds
In-person Office Hours: TWR 11am-12pm
thomas.yeh@pomona.edu

Lectures: TR 1:20-2:35 p.m., Edmunds 101
TAs: Alan Guo, Aidan Garton, Mercy Bickell, Adeena Liang, Camille Mince, Erin Puckett (head TA), Emily Tomz, Emily Zhang
Mentor sessions: M 2-4pm (Millie), T 7-10pm (Alan), T 7-8pm (Aidan), R 7-9pm (Erin), F 1-3pm (Emily T.), F 12-2pm (Adeena), Sa 3-5pm (Emily T.), Su 6-8pm (Emily Z.)
Learning Communities: 1: M 2-4pm (w/ Mercy at 2-3pm), 2: M 7-9pm (w/ Aidan at 7-8pm), 3: R 7-9pm (w/ Aidan at 7-8pm), 4: M 9-11am (w/ Erin at 10-11am), 5: F 10am-noon (w/ Adeena at 11am-noon), 6: F 1-3pm (w/ Adeena at 2-3pm), 7: F 7-9pm (w/ Aidan at 7-8pm)
BBICS: F 3-5pm (Naomi Amuzie)
Labs: W 1:20-4:20 p.m., in Edmunds 219 and 229
Textbook: Robert Sedgewick and Kevin Wayne, Algorithms, 4th edition. Addison Wesley Press.
The book is available for purchase at the Huntley Bookstore.
Textbook companion: The textbook comes with a companion website that contains chapter summaries, code, and exercises.

Schedule

You should consult this page regularly to see the most current version of the schedule of topics and readings.

You should complete all assigned readings and attempt to work all the problems at the end of each section as you are reading. They will be good practice for the regular quizzes during the first ten minutes on Thursday mornings, and may also appear on the midterm or final.

Lecture Date Topic Code and Handouts
1) August 31 Introduction & OOP Bicycle Demo
2) Sep 2 Java Basics Basic Java Syntax
3) Sep 7 Inheritance, Interfaces, and Generics Basic Inheritance
4) Sep 9 The Catch-All Java Lecture I/O and Java GUIs
5) Sep 14 Analysis of Algorithms Experimental Analysis
6) Sep 16 ArrayLists ArrayList implementation
7) Sep 21 Singly Linked Lists Singly Linked Lists implementation
8) Sep 23 Doubly Linked Lists Doubly Linked Lists implementation
9) Sep 28 Stacks, Queues, and Iterators
10) Sep 30 Midterm I
11) Oct 5 Sorting Basics and Comparators Comparators
12) Oct 7 Insertion Sort
13) Oct 12 Mergesort
14) Oct 14 Comp Arch Intro, Quicksort, Binary Trees
15) Oct 19 Fall Recess
16) Oct 21 Binary Trees and Heap
17) Oct 26 Heap, Priority Queues and Heapsort
18) Oct 28 Symbol Tables and Binary Search
19) Nov 2 Binary Search Trees, 2-3 Search Trees
20) Nov 4 Left-leaning Red-Black BSTs, Midterm Topics + Practice
21) Nov 9 Hash Tables
22) Nov 11 Midterm 2
23) Nov 16 Hash Tables
24) Nov 18 Graphs
25) Nov 23 Graph cont'd
26) Nov 25 Thanksgiving
27) Nov 30 Shortest Paths
28) Dec 2 Minimum Spanning Trees
29) Dec 7 Summary

Assignments & Labs

Labs for this course will be held on Wednesday afternoons from 1:20 p.m to 4:20 p.m. in 219 and 229 Edmunds. The rooms are equipped with iMac computers.
Attendance of the lab sessions is mandatory. Please arrive well prepared for the lab, having read the description thoroughly.

Unlike in CS 51 at Pomona, lab work will be distinct from the weekly programming assignments, though the lab work will generally be relevant to the longer assignments. Instead, we will often use lab time to introduce you to new software tools and techniques that require more hands-on experience to understand. You will usually need to submit your results from the lab by end of the lab day.

There will be two types of weekly programming assignments: individual programs and team programs. All programs assigned during the semester should be completed following the guidelines in the Academic Honesty Policy.
There will be 9 programs due. All programs will be graded on design, documentation and style, correctness, and efficiency. The elements of a good program are very much like the elements of a good paper. It must be correct, but it should also be written in a style that is clear and elegant. Most programs will be tested using automated tools, so it is essential that your program meet all of the specifications provided in the project handout. You will also receive written comments on all of your programs by the TAs.

Weekly assignments will generally be due on Tuesday evenings at 11:59 p.m. There will be a penalty assessed of 3n % for a program that is n days late. Programs will not be accepted more than four days late. It is usually better to turn in a correct and well-documented program one or two days late than a non-functioning or non-documented program on time.
All projects should be submitted electronically. The procedure will be explained in lab.

Lab Date Lab Assignment Due Assignment
Sep 1 Introduction Sep 1 Introduction
Sep 8 Silver Dollar Game Sep 14 Graphic Silver Dollar Game
Sep 15 Timing Sep 21 Darwin
Sep 22 Debugger Sep 28 Darwin, cont.
Sep 29 Midterm I prep Oct 5 Calculator
Oct 6 JUnit Oct 12 Compression
Oct 13 Linked Lists implementation Oct 19 Compression, cont.
Oct 20 Mergesort Oct 26 Compression, cont.
Oct 27 Binary Trees Nov 2 On-disk sort
Nov 3 Git Nov 9 Autocomplete
Nov 10 Midterm II prep Nov 16 Hex-A-Pawn
Nov 17 Profiling Nov 23 Text Generator
Nov 24 No lab Nov 30 Maps
Dec 1 Ethics Dec 7 Maps, cont.

Exams

There will be two in-class midterm exams plus a scheduled final exam. We will place sample midterm exams on-line approximately a week before each exam. There will also be quizzes every Thursday except the first week of classes. The quizzes will be during the first ten minutes of class. No make-ups will be allowed, but the lowest score will be dropped to make up for illness or other absences.

  • Midterm examination 1: Thursday, Sep 30.
  • Midterm examination 2: Wednesday, Nov 11.
  • Final examination: Thursday, Dec 16, 2-5 p.m., in class.

Grading Summary

Component Weight
Weekly Programming Assignments 35%
Midterm 1 15%
Midterm 2 15%
Final Exam 25%
Labs 5%
Quizzes 5%
Total 100%

Collaboration & Academic Honesty

In general, collaboration is encouraged in CS62. This means that you may discuss approaches to solving problems with anyone in this class, including students, faculty, and TAs. As specified in the department policy, you may help, or receive help, in using systems and tools, in debugging code, and in working with high-level design issues. However, using material from any external source—web page or person or book—is forbidden. The actual solutions to the assignments and labs and the code you submit must be your own (and your partner's, if applicable). Except for material from the textbook or lecture, you may not copy, retype, view, or share a copy of any file. If you have any questions about what is appropriate or inappropriate collaboration, please speak with the instructor. When in doubt, credit your sources. Course materials provided to you, including graded papers and exam summaries, are for your use in the course. You are encouraged to use them to the fullest extent, but you are not to publish them or distribute them to other people or organizations.