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

Prerequisites: The formal prerequisite for this course is Pomona CSCI054. 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 or Python. The knowledge assumed is generally equivalent to the different versions of CSCI051 as offered at Pomona or the Computer Science advanced placement exam. Be aware that neither CS5 nor CS60 at HMC 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.

Lectures

Lectures take place on Mondays and Wednesdays at 1:15-2:30pm in Seaver Commons 102. See the schedule for details.

Mentor sessions

Monday 7-9pm (Evelyn and Gloria)
Tuesday 6:30-8:30pm (Chau and Emily)
Wednesday 7-9pm (Earn and Maxim)
Thursday 6:30-8:30pm (Michele), 8-10pm (Neil)
Friday 4-5pm (Camden)
Sunday 7:30-8:30pm (Evelyn)

Lab

Labs are mandatory and take place on Fridays at 1:15-4pm in Edmunds 219/229.

Instructor

Alexandra Papoutsaki Alexandra Papoutsaki
Alexandra.Papoutsaki@pomona.edu
Edmunds 222
Office Hours: M 2:30-4pm, W 10am-noon, and by appointnment

TAs

Neil Chulani Neil Chulani
Evelyn Hasama Evelyn Hasama
Stevie Kim Stevie Kim
Maxim Koretsky Maxim Koretsky
Camden Le Camden Le
Gloria Lee Gloria Lee
Michele Tang Michele Tang
Chau Vu Chau Vu
Emily Wang Emily Wang
Earn Wonghirundacha Earn Wonghirundacha
Alex Wood Alex Wood

Assignments and Labs

See the assignments and labs schedule for details. Labs for this course will be held on Friday afternoons from 1:15-4:00p.m. in 219 and 229 Edmunds. The rooms are equipped with some iMac computers but you are welcome to use your own laptops. Attendance of the lab sessions is mandatory. Please arrive well prepared for the lab, having read the description thoroughly.

Unlike in CS051, most weeks 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 and partner assignments. All programs assigned during the semester should be completed following the guidelines in the Academic Honesty Policy. There will be about 10 assignments due. All assignments 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 Thursday evenings at 11:59pm. You get three late days that may be used at your discretion to submit assignments after the deadline with no penalty. Notify the instructor when you use a late day. For team assignments, both you and your partner must spend a late day available to use one. Further extensions after you have exhausted all your late days will be granted only in exceptional circumstances.

Exams

There will be two midterms and one final exam in this course. Minderms will take place in class on February 26 and April 8. The final exam will take place on May 8 from 2-5pm. See the schedule for details.

Grades

Finishing all the assignments successfully is required to pass the class. After that, grades are computed on a point basis, as follows:

Assignments: 30%
Midterms: 30%
Final Exam: 25%
Labs: 5%
Quizzes: 10%

Academic Integrity

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. This includes tools like chatGPT. 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 resources linked on the website or slides, 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.

There will be stringent penalties for violations of academic honesty, up to failure in the course.

Environment and Accommodations

All students are welcome in this class, and all of the course staff are committed to providing equal opportunity for all students. If you have concerns about anything that is preventing you from fully participanting in the class, please talk to us so that we can address it. Requests for formal accommodations may be made by contacting the Disability Coordinator on your home campus; all accommodations will be honored.