CSE116: Computer Science 2

Summer 2026

Jump to current week


Syllabus

Course Description

You know the basics of programming: Expressions, variables, functions, control flow, data structures, and memory. With these concepts, you can train a computer to complete nearly any task you can imagine. The next step is to use these skills in more efficient ways to write better software.

In this course, you will learn:

  • Classes and Object-Oriented Programming (OOP) - How to organize large projects
  • Data Structures & Algorithms - How to efficiently work with data
  • Memory - How a computer runs your software

Expectations

This is not an easy course! To do well in this course you are expected to:

  • Have a strong understanding of the basics of programming (Including expressions, variables, functions, control flow, data structures, and memory)
  • Invest a minimum of 12 hours/lecture* in CSE116 including at least 9 hours/lecture outside of class

* If you do not have a strong understanding of the basics of programming, you will need to spend much more than 12 hours/lecture in order to pass this course.

Learning Objective Checklist / Exams

There are 2 learning objectives that must be completed in order to pass the course.

  • Tracing OOP - Correctly trace the memory usage of a program that uses Inheritance and Polymorphism
  • Tracing Data Structures - Correctly trace the memory usage of a program that uses Linked-Lists and Trees

Both learning objectives will be graded on a pass/fail (or complete/incomplete) basis. If you do not complete both of these learning objectives, you will earn an F in this course. All completion decisions will be made by a human after reviewing your submission. You do not have to be perfect to pass a trace, but you must accurately demonstrate the relevant concepts (eg. Making a math error is usually fine. Forgetting your super constructor calls is not.)

The purpose of these traces is to give you practice reading code. You will trace through everything that happens in stack and heap memory as a given program executes. Traces will take place during the midterm and final exams and will be completed using the tracing tool.

Both the midterm and final exam will consists of 2 traces for each of OOP and Data Structures (4 total traces per exam). You must pass at least 1 trace to complete a learning objective. If you pass a trace on the midterm, you do not have to retake it on the final exam. If you pass complete both learning objectives on the midterm, you do not have to take the final exam.

To clarify: The midterm and final with both contain 2 programs to trace for each learning objective. This means that for each learning objective (OOP and Data Structures) you will have a total 4 opportunities to complete a corresponding trace. If you pass any of the 4 traces, you will have completed that learning objective (Meaning that there are 8 total traces that you can complete. You must pass 1 OOP trace and 1 Data Structures trace to pass the course.)


Points

If you complete both learning objectives, your grade will depend on the number of points you've earned on the programming problem sets.

Course Activity Points
5 Problem Sets (50 pts each) 250

Problem Sets

Problem sets are take-home programming assignments that are submitted to AutoLab. You have an unlimited number of submissions on these assignments. All deadlines are listed on the course schedule below.

Late Policy: You may submit any problem set late at a penalty of 20% per day late (additive). Note that whether you are 5 minutes or 23 hours late, it is still considered 1 day late. If the deadline is June 4 and you submit at any time on June 6, it is considered 2 days late for a penalty of 40% off your earned points.


Grading

You must complete both learning objectives to pass this class. Here's a chart to make that abundantly clear:

Learning Objectives Complete Grade
2 Grade depends on the number of points earned
0 or 1 F

If you complete both learning objectives, your grade depends on the number of problem set points you've earned:

Points Grade
230 - 250 A
220 - 229 A-
210 - 219 B+
200 - 209 B
190 - 199 B-
180 - 189 C+
165 - 179 C
150 - 164 C-
0 - 149 -or- <2 LOs F

Readings

There is no textbook for this course. Instead, links to relevant readings and tutorials are provided in the course schedule. When a reading is listed, you should study it before lecture.

Academic Integrity

CSE Department Academic Integrity Policy

UB Academic Integrity Policy

In addition to the department and university policies, the following apply to this course:

  1. All submitted work must be of your own creation.
  2. Do not help another student violate point 1.

All violations will result in:

An F in CSE116.

Examples of acceptable behavior:

  • Discussing an assignment with your classmates and brainstorming abstract solutions, then writing the code on your own
  • Forming study groups and discussing course material and assignments on Discord, Zoom, etc.
  • Studying from supplementary material to improve your understanding of the course topics
  • Asking the teaching staff for clarification on a homework question
  • Having, or hiring, someone to help you understand the concepts of the course
  • Copying code from the course examples repo, linked at the top of this page, into your assignments

Examples of unacceptable behavior:

  • Submitting code for credit without being able to explain how the code works and why you wrote it the way you did (The code is not your creation if you can't).
  • Using Artificial Intelligence to help you write code (The code is not your own creation).
  • Using autocorrect or autocomplete without understanding exactly what the code does (The code is not your own creation).
  • Collaborating with another student to write code for an assignment. (Do not sit next to your friend while you both work on the coding tasks)
  • Allowing another student to access your work that will be submitted for course credit. (Examples: Do not post you code publicly, host your code in a public repository, or allow a classmate to access your laptop)
  • Having someone help you write code. It doesn't matter if you typed the code when someone else is telling you what to type (The code is not your own creation)
  • Copying a large amount of material found on the Internet into your submission. (The code is not your own creation)
  • Copying any amount of code you found without knowing exactly what it does, even it's 1 character. (The code is not your own creation)
  • Attempting to access the grading code on Autolab.
  • Asking any of the course staff to falsify your grade (eg. Asking for any result that you did not rightfully earn).

Any student may be challenged by the course staff at any time to prove that they did create the code they submitted for course credit. They must be able to explain their code and walk through their thought process as they wrote the code. The method of proof can vary and is left for the course staff to decide. If the student fails to convince the course staff that they created all the code they submitted for course credit, they will be found in violation of this academic integrity policy. Please note that if a student is in violation of any other part of this policy, it is still a violation even if they can prove that they were the creator of their code (Ex. If they did write their code, but helped someone else cheat).

If challenged, the following excuses are not acceptable:

  • "That assignment was 3 weeks ago. I forgot." (If you forgot everything in 3 weeks, you did not learn it)
  • "I got that from the Internet." (You're clearly not the creator)
  • "I didn't write that." (Yes, this is a common excuse. At least it makes the meeting easier..)
  • "The TA told me to do that." (If they did, you still need to understand all code you submit)
  • "I hired a tutor" (You hired a cheater)

If you plan on cheating, plan on taking this course again.


Lecture 1: Introduction to Java
Lecture 2: Introduction to Java
Problem Set 0: Java Basics
Thursday
May 28

Java: Data Structures - Slides


Java: Reading Files + CSV Parsing - Slides

Lecture 3: Classes
Tuesday
June 2

Classes and Objects - Slides


Classes and Objects - Slides


Classes and Examples - Slides

Lecture 4: Linked Lists
Problem Set 1: Classes
Thursday
June 4

Linked List Structure - Slides


Linked List Algorithms - Slides


Stack and Queue - Slides

Thursday, June 4 @ 11:59pm
Problem Set 0 Deadline
Lecture 5: Inheritance
Tuesday
June 9

Inheritance - Slides


Inheritance and Override - Slides


Abstract Classes and Interfaces - Slides

Lecture 6: Polymorphism
Problem Set 2: Linked Lists + Inheritance
Thursday
June 11

Polymorphism - Slides


Polymorphism - Slides


Sorting with Comparators - Slides

Thursday, June 11 @ 11:59pm
Problem Set 1 Deadline
Lecture 7: Testing
Tuesday
June 16

Unit Testing - Slides


Testing Strings and doubles - Slides


Behavioral Testing

Lecture 8: Trees
Problem Set 3: Polymorphism + Trees + Testing
Thursday
June 18

Binary Trees and Traversals - Slides


Binary Search Trees (BSTs) - Slides


BST Runtime

Thursday, June 18 @ 11:59pm
Problem Set 2 Deadline
Lecture 9: Midterm
Tuesday
June 23

Midterm Exam - 11:00AM - 1:30PM EST

Lecture 10: Graphs
Problem Set 4: Graphs + Testing
Thursday
June 25

Graphs - Slides


Graph with BFS - Slides


Graph Examples

Thursday, June 25 @ 11:59pm
Problem Set 3 Deadline
Lecture 11: Runtime (Async)
Tuesday
June 30

Runtime Examples (Async Lecture. No live stream)

Lecture 12: Final Exam
Tuesday
July 2

Final Exam - 11:00AM - 1:30PM EST

Thursday, July 2 @ 11:59pm
Problem Set 4 Deadline

GitHub icon Website GitHub