Syllabus

Object-Oriented Programming and Data Structures

CS 2110 / ENGRD 2110, Fall 2025

Course Overview

Over the past few decades, software systems have exploded in both scale and scope. These days, we rely on technology for most aspects of our lives: communicating with others, searching for and accessing information, managing businesses and personal finances, entertainment, and automation in industries such as manufacturing, transportation, and healthcare, to name a few. All of these technologies are driven by software. As our reliance on technologies has grown, so too have their code bases. Applications have grown to comprise tens of millions, or even billions, of lines of code, spread across thousands of files and maintained by thousands of developers. At this scale, writing correct, efficient, and maintainable code really matters.

In this intermediate programming course, we will move beyond the foundational programming concepts (variables, conditional statements, subroutines, iteration, recursion) to develop a set of tools for building bigger and better software. We’ll explore software engineering concepts such as specifications, invariants, and testing that lead to more readable, reliable, and extendable code. Through our principal programming language Java, we’ll introduce the foundational ideas of object-oriented programming including objects, classes, subtypes, encapsulation, and polymorphism. We’ll develop a theoretical framework (asymptotic analysis) for characterizing the complexity of our code and use this to study the performance of various algorithms (sorting, searching, and traversal) and data structures (including lists, stacks, queues, trees, heaps, hash tables, and graphs). Finally, we’ll introduce alternate programming paradigms (concurrent and event-driven programming) that lie at the core of many modern software systems.

Course Objectives

This course has been designed to satisfy the following high-level objectives. By the end of the course, you should be able to confidently:

  1. Employ recursion and object-oriented programming concepts (e.g., classes, interfaces, polymorphism, inheritance) to solve computational problems.
  2. Design, implement, and verify nontrivial Java programs (roughly 1000 lines of code), starting from an English language specification, leveraging features like encapsulation and unit tests to improve maintainability.
  3. Analyze the asymptotic complexity of algorithms and programs to evaluate their running times and memory requirements.
  4. Implement basic data structures (dynamic arrays, linked lists, binary search trees, heaps, hash tables, adjacency lists) and use them in programs.
  5. Build and modify event-driven graphical user interfaces (GUIs) expressed in Java.

For a more fine-grained list of specific learning outcomes, see this page.

Logistics

Course Offering

Credit Hours: 4
Grading Basis: Letter grades or S/U, auditing is not permitted (per departmental policies)
Instruction Mode: On campus
Class Format: Two 75-minute lectures and one 50-minute discussion per week.
Attendance and participation are expected in both lectures and discussions.
Supplemental: This work describes work expected outside class for all students to succeed in 2110. Approximately 10 hours of independent work / study per week.
This will vary depending on your background, desired grade and studying efficiency.

Times and Locations

Lecture Time: Tuesdays and Thursdays 10:10 - 11:25 AM
Lecture Dates: Tuesday August 26 - Thursday December 4, 2025
Lecture Location: Bailey Hall 101
Discussions: Times and locations vary, see class roster
Prelim 1: Thursday, October 9, 2025 7:30-9:00 PM, room assignments TBA
Prelim 2: Thursday, November 6, 2025 7:30-9:00 PM, room assignments TBA
Final Exam: Date and location TBA

Instructors

Prof. Matthew Eichhorn
Office: 452 Gates Hall
Email: meichhorn@cornell.edu
Office Hours: See this page
Prof. Leah Perlmutter
Office: 467 CIS Building
Email: leahperl@cornell.edu
Office Hours: See this page

You won’t usually need to email us directly – just for personal stuff like extenuating circumstances that’s not covered by Kim or the Ed discussion board. (See Communication Norms section below for more info.) When sending emails about the course, please include both instructors (and reply-all to ensure this is maintained throughout the conversation thread) to ensure the most efficient response.

Course Coordinator

Kim Budd
Email: kj37@cornell.edu

We are fortunate to have Kim as our course coordinator in CS 2110. Kim should be your first point of contact for course matters concerning SDS accommodations or exam conflicts. Please do not email the instructors about exam logistics.

Teaching Assistants

CS 2110 has almost 40 teaching assistants who lead discussion sections, hold office hours, and assist with grading, among other course duties. More information about our TAs can be found on this page.

Communication Norms

There are lots of channels to get in touch with the course staff when you need something! For the fastest responses, and to make life easier for your friendly course staff, please follow the conventions below.

After reading this, if you’re not sure who to send your message to, you can send it to any channel with a note saying you aren’t sure. Course staff will make sure it gets to the right place. We’ve got your back!

Prerequisites/Related Courses

We assume that all students in the class have prior programming experience with a general-purpose procedural language (e.g. Python, Java, etc.). Suitable courses offered by Cornell include CS 1110 and CS 1112. Credit for CS 1110 is also offered to students who scored a 5 on the “Computer Science A” AP exam, passed the Computer Science Advanced Standing (CASE) exam during orientation, or took an equivalent course at another university. If you are not comfortable with recursion or control flows involving multiple levels of nested loops and/or conditional statements, then you are likely not yet ready for 2110.

The language used in this course is Java. CS 2110 focuses on design principles, algorithms, and data structures, and these ideas generalize across different languages. You will find your prior programming knowledge is applicable to Java programming, and likewise, the ideas from this class will extend to other languages you may use in the future. We don’t assume you know any Java syntax yet, and we will offer you everything you need to know about Java. If you already know Java, please be patient and support your peers in the learning process!

ENGRD 2110: CS 2110 is cross-listed as ENGRD 2110. These are the exact same course (same lectures, discussions, assignments, and grading scheme). The ENGRD label is a reminder that this course can count towards the engineering distribution requirement for students in the College of Engineering (if taken for a letter grade). Whenever course staff or materials refer to CS 2110, they also apply to ENGRD 2110.

CS 2112: An honors course on object-oriented programming and data structures is offered most fall semesters as CS 2112. That course covers topics in more depth, and its assignments entail writing significantly more code.

ECE 2400: For the purposes of affiliating with the CS major, an alternative to CS 2110/2112 is ECE 2400, Computer Systems Programming, which uses C++ instead of Java. This course is offered only in spring semesters.

ENGRG 1011: A student-led Academic Excellence Workshop (AEW) is offered as ENGRG 1011 and provides additional practice with the material in a collaborative setting.

CS 2110 is a prerequisite for most other courses offered by the Computer Science department.

Course Resources

Required Materials

You do not need to purchase a textbook for this course. Our primary reference is the lecture notes which are publicly available on this website. These notes are meant to be comprehensive (they include all of the material that we expect you to learn during the course) and self-contained (you should not need to consult external resources to learn this information, though doing so may be beneficial). The notes are broken down by lecture and include many examples and interactive animations. Throughout the semester, we are working to add exercises to these notes which will serve as an additional learning tool. Written solutions for these exercises will not be provided. Rather, we encourage you to collaborate with classmates, engage in discussion on Ed, and speak with the course staff who can help to guide you through these exercises.

You will need regular access to a computer in order to complete this course, both to access and interact with this website and the various other online resources listed below, as well as to complete programming assignments. Your computer must be able to read and produce PDF documents, extract ZIP archives, and run a Java development environment. Our course is designed around the IntelliJ IDEA Community Edition IDE. You can find instructions for setting this up on this page. This is the only environment for which our course staff will guarantee to offer support, so choose an alternate option (Eclipse, VSCode, etc.) at your own risk. A cloud-based file storage account (e.g. google drive) will come in handy should you need to use a loaner laptop or computer lab at some point during the semester; make sure you have a plan for what to do if your primary computer breaks down.

Online Services

This website serves as the backbone of our course. It is where you will find all of the course’s logistical information, lecture notes, our course schedule, information about office hours, assignments, and your current performance. In addition, we will make use of the following three online resources to help manage various aspects of our course. Links to all three of these sites can be found under “Links” in the website header.

1. Gradescope: https://www.gradescope.com/courses/1076047

We will use Gradescope to release, collect, and grade assignments and to upload and grade exams. Gradescope also has a companion mobile app that you can use to take pictures of and upload your written assignments.

2. Ed Discussion: https://edstem.org/us/courses/81279/discussion

Ed provides a discussion board where we will post announcements for the class, and where you can ask and answer questions about the course material, assignments, and logistics. These posts can be public (viewable to the entire class) or private (viewable only to the instructors).

3. PollEv: https://pollev.com/2110fa25

PollEv is an online polling software that we will use for polls and activities during lecture. It is expected that you bring a device with an internet connection to each lecture so you can participate in these activities. You do not need to purchase any physical device (a remote or clicker) to use PollEv.

CS 2110 does not plan to use Canvas in any significant capacity.

Optional References

There are many other excellent texts that offer an alternative presentation of the material, which may be helpful in your studies. We list some of these references below. Note that the topic coverage and levels of formality, depth, and difficulty vary between these texts. In addition, some notational choices, diagramming conventions, and vocabulary differ from our presentation in lecture. For consistency, we expect you to adopt the nomenclature and conventions presented in the course lecture notes.

Grade Determination

To allow you some autonomy in grading, we will offer two choices of final grade computations. You may select whichever computation you would like for your own grade, but must commit to your decision by the course “Add” deadline (September 5, 2025) by filling out this survey.

Option 1: Effort-Acknowledging
Lecture (PollEv):4%
Discussion:6%
Assignments:30%
Lower Prelim Score:10%
Higher Prelim Score:20%
Final Exam:30%
Option 2: Purely Performance-Based
Lecture (PollEv):0%
Discussion:0%
Assignments:30%
Prelim 1 Score:20%
Prelim 2 Score:20%
Final Exam:30%

More details about each of the grade components are provided in later sections of this syllabus. Option 1 reflects our belief that consistent, active engagement throughout the course enhances your learning by shifting some weight from your lower prelim score to class participation. Option 2 acknowledges that consistent attendance may present a burden to some students, who may learn better outside of the classroom.

Final Letter Grades

Letter grades are assigned in accordance with the Cornell University grading system. The cutoffs used to translate final grades to letter grades will be determined and published at the end of the semester. This course is not curved, meaning we do not pre-determine the percentage of students who will qualify for each letter grade. Historically, the median course grade has been a B. While grade boundaries are not known in advance (since assignments, exams, and rubrics vary between semesters), we guarantee that

We reserve the right to assign you a final grade that is higher than determined by these criteria. Grades will be posted promptly and updated regularly so you can evaluate your performance in the course.

Course Evaluation:

At the end of the semester, you will receive a link to the course evaluation for CS 2110. This is a way for you to provide candid feedback on the instruction, content, and course organization. While we receive a report of who completes the course evaluations, your answers will remain anonymized. Completing the course evaluation will earn you 5 bonus points on the final exam.

Lectures

Our lectures are held Tuesday and Thursday mornings in Bailey Hall 101 and offered exclusively in person. They will not be recorded. Lectures will largely follow the lecture notes available on this site, but may omit some sections and include extra examples as we see fit. Annotated lecture slides and lecture demo code will be made available on the course schedule on our website homepage within 24 hours after each lecture.

Lectures serve as a synchronous opportunity to introduce new definitions and concepts, ask and answer questions, and work on example problems and coding exercises as a large group. Engaging in activities and discussions during lecture both improves your learning and creates a more vibrant learning environment for your peers. We will use PollEv to collect responses and track participation during lecture activities. Your participation grade (if you elect the Effort-Acknowledging grading option) will be computed by the formula

\[ \min \Big( 1, \frac{\#\:\textrm{answered lecture activities}}{0.9 \cdot \# \:\textrm{lecture activities}} \Big). \]

In other words, we will compute the proportion of lecture activities that you answer and scale this so that 90% participation earns full credit, capping your participation grade at full credit. In effect, this means that you can miss around 2-3 lectures over the course of the semester without it affecting your participation grade. This provides accommodation to miss an occasional class for illness or a conflicting obligation without worrying about the impact on your grade. If you expect you will miss more than 10% of class meetings for extenuating circumstances, reach out to the instructors to discuss this.

Discussion

Discussions provide a smaller-group setting to revisit the week’s material and collaborate hands on with other students and teaching assistants on practical programming problems. All materials that you need for discussion will be linked on the course schedule. You do not need to turn in completed discussion exercises, though we plan to make autograders and/or written solutions available for you to evaluate the correctness of your work.

Since discussion activities are not graded for correctness, we do not place any restrictions on resources that you may use to complete them, which include notes, books, unrestricted conversations with other students, internet searches, and the use of large language models or other generative AI. We advise you to be pragmatic about your use of these resources and think critically about whether they are enhancing your learning. Discussion activities are intended to serve as “strength training” for programming tasks we will expect on assignments and exams (and that you will encounter in future courses and careers), and their main benefit comes from critically thinking to “puzzle” them out.

Your discussion grade will be based on your attendance and active participation in discussion. TAs will mark you as present for a discussion section if you are actively engaged with the activity (working on the activity on your computer, discussing the activity with your group, asking and answering questions, etc.) for the entire 50-minute section period. Your discussion grade (if you elect the Effort-Acknowledging grading option) will be computed by the formula

\[ \min \Big( 1, \frac{\#\:\textrm{discussion sections where you were actively engaged}}{\# \:\textrm{discussion sections} - 2} \Big). \]

In other words, you may miss up to two weeks of discussion sections and still earn full credit. If you expect you will miss more than 2 discussion meetings for extenuating circumstances, reach out to the instructors to discuss this. You must attend the section at the time and location specified in Student Center. If you have a one-time conflict with your regular section, you may arrange to attend an alternate section that week by making a private post on Ed.

Assignments

The assignments in CS 2110 have two primary goals. First, they offer an opportunity to complete more long-form (as compared to discussion activities) programming assignments, putting into practice many of the theoretical concepts that we introduce in lecture. Additionally, they provide an opportunity to think more deeply about the course material and understand which concepts you need more help or practice with (which in turn provides good preparation for the exams). Most weeks, there will be homework assigned on Wednesday and due the following Wednesday (see the schedule on the homepage for more details). Assignments consist of a mix of written problems (asking you to draw diagrams, trace through code, or prepare text responses or reflections) and coding problems.

Assignment Policies

Exams

The goal of the exams is to provide an incentive to review the material and for us to check that you understand the material at a sufficient level to be able to use it in future courses. Our course will have two preliminary (prelim) exams on Thursday, October 9, and Thursday, November 6, both from 7:30-9:00 PM, locations to be decided. The time of the final exam will be announced later in the semester.

Grading Feedback / Regrades

Transparency and objectivity in grading are critical to ensure that all students are evaluated fairly. To this end, we will release detailed rubrics and grading comments along with your grades on all work during the semester. Please review this information carefully, as this feedback is critical for learning.

Manual Regrade Requests

In a large course where hundreds of responses are graded each week, some grading mistakes will inevitably be made. If you feel that a rubric was misapplied to any of your work on a homework assignment or exam, you should submit a regrade request.

Autograder Resubmission

Sometimes, a small mistake in your code (e.g., a compiler error) can result in the failure of all or nearly all of our autograded tests. While our autograders are designed to alert you of these sorts of errors in Gradescope during the submission window, we also offer an opportunity to resubmit to the autograder to address these issues.

\[ \max \Big( \textrm{original assignment score}, \textrm{original manual score} + \textrm{resubmitted autograder score} - 5 \Big). \]

Bug Bounty

We’ve created many materials for CS 2110 this semester: lecture notes, slides, discussion and assignment handouts, code files, etc numbering well over 500 pages at this point. While we have been careful to make these materials as accurate and well-polished as we can, it is inevitable that some mistakes will slip through. To help ensure that you leave the course with the best possible materials, we present the following “bug bounty”: The first student to point out a typo/mistake (and suggest an appropriate correction) on any of our materials will receive 1 point added to their total homework score. Please see the pinned post on Ed for more details on how to report bugs for credit.

Absences / Late Registration

The course grading policies, which allow you to miss some homework submissions, discussion sections, and lectures without penalty, are designed to accommodate absences due to illness, travel, etc. If a situation arises that requires a prolonged (multiple-week) absence, please email the instructors so we can make a plan to complete the missed work. If you join the course late, you may need to apply your homework drops (etc.) to the assignments due before your enrollment.

Personal Conduct

Cornell expects students to be respectful and professional in all participation and communication. You are expected to maintain professional conduct and speech in all aspects of this course. Professional behavior demands you have a responsible and mature attitude in person and online. Disrespectful, unethical, and/or unprofessional behaviors will not be tolerated and can result in course failure and/or dismissal from the program. This same professional standard is also expected of our course staff. If anyone on the course staff behaves in a manner that you feel is inappropriate, please bring it to our attention immediately so that it can be addressed.

Academic Integrity

Integrity is a cornerstone of both our learning community and professional life; it is about respecting yourself and respecting others. You respect yourself by submitting work completed through your own effort; you respect others by acknowledging contributions from them when collaboration is allowed (e.g., group projects). When your individual effort is required (such as on an exam), you may neither seek nor accept help from others.

Each student is expected to abide by the Cornell University Code of Academic Integrity. In addition, CS 2110 adopts the same academic integrity policy as CS 1110. In particular,

Violations of the Code of Academic Integrity, especially plagiarism, may result in an F in the course.

Course materials posted on this website, Ed Discussions, and Gradescope are intellectual property belonging to the authors of the materials. Students are not permitted to buy, sell, trade, or share any course materials without the express permission of the instructors. Such behavior constitutes academic misconduct. Public availability does not imply permission to redistribute.

You hold the copyright on original work that you create in this course. But note that assignments include significant “skeleton” code authored by the course staff and licensed for use only in the context of this class, unless otherwise indicated. Therefore, it is generally not permissible to share code for completed assignments. If you want to showcase your new skills in a portfolio, be creative and apply them in a novel setting.

Accommodations

Our primary goal is to establish an inclusive learning environment that is accessible, comfortable, and supportive of everyone’s physical, mental, emotional, and learning needs. Services and reasonable accommodations are available to persons with temporary and permanent disabilities when conditions cause barriers to equal educational opportunity. Student Disability Services (SDS) determines the eligibility of students to receive accommodations and works collaboratively with the student, faculty, and staff to recommend appropriate accommodations. If you believe you require an accommodation, please reach out SDS at sds_cu@cornell.edu or by going to their office at Cornell Health as soon as you can. In order to have adequate time to arrange your approved accommodation(s), you should request your SDS accommodation letter no later than the add/drop deadline for the semester.

Beyond formal accommodations, if you ever have concerns about your learning, grades, or progress in the course, if you get sick, or if you are facing other challenges and need help connecting with the right resources, please don’t hesitate to reach out to the instructors.

Exam Accommodations:

In addition to requesting your accommodation letters, this course will be participating in the Alternative Testing Program (ATP). All exams will be centrally managed and supported by the ATP Testing Coordinator in the Office of Student Disability Services. You will receive communication about the time and location of the exam in your SDS student portal and via email from sds-testing@cornell.edu.

Inclusivity

Students in this course come from a variety of backgrounds, abilities, and identities. We support an inclusive learning environment where diversity and individual differences are understood, respected, appreciated, and recognized as a source of strength. It is expected that students in this class will respect differences and demonstrate diligence in understanding how other peoples’ perspectives, behaviors, and worldviews may be different from their own. Please contact the instructors if you observe any behavior (from other students, TAs, or instructors) that runs counter to our goal of inclusivity.

Attestation

By registering for this class and accessing course materials through Canvas, students agree to abide by University, College, Department, and Course policies.