You know the basics of programming. You're proficient in variables, functions, control flow, data structures, and file IO. With these concepts, you can train a computer to complete nearly any task you can imagine. So what's next?
Writing large programs
You will learn how to write and organize large pieces of software. To this end, in CSE116 you will study:
While studying these topics we will have a focus on how your programs work, not just that they work.
This is not an easy course! To do well in this course you are expected to:
* The 12 hour minimum is an average. If you invest less than 12 hours/lecture in CSE116 early in the semester, or do not fully understand all the CSE115 topics, you should expect to work significantly more than 12 hours/lecture while you catch up. You should expect to spend 50+ hours in a single week on this course alone if you fall behind or if you're not comfortable with the CSE115 material. Do not fall behind.
If you did not take CSE115 at UB, or would otherwise like to review the material, below are some CSE115 resources to help you get caught up:
Keep in mind that you must understand the concepts of CSE115 and be prepared to apply them to the syntax of a new language (Java). You will not be required to write Python in CSE116.
Specifically, you are expected to understand the concepts of variables, expressions, functions, conditionals, loops, memory diagrams, and reading CSV files.
Being successful in CSE116 requires completion of all of the learning objective requirements. You must complete every Learning Objective requirement in order to pass CSE116.
Learning objectives are divided into 2 primary categories:
Instead of writing programs as a collection of variables and functions, with objectoriented programming we will group these variables and functions into classes and objects. This allows developers to reason about their programs at a higher level of abstraction.
A student has completed this objective if they are able to:
We will study several new approaches for storing data and computing with that data. Primarily, we will see linkedlists, trees, and graphs while exploring applications of each data structure.
A student has completed this objective if they are able to:
To complete the learning objectives of this course, you must complete all of the following requirements.
Learning Objective Requirements Completed  Grade 

All 8 Programming Tasks and 2 Quizzes  Grade depends on the number of Application Objectives completed 
Less than all Programming Tasks all Quizzes  F 
If you have completed all of the learning objectives, your grade will be determined by the number of application objectives you've completed. Most application objectives are designed to incentivize you to keep up with the material of the course and are not meant to be overly difficult to earn. Your final letter grade will be determined as follows:
Application Objectives Completed  Grade 

2024  A 
1819  A 
1617  B+ 
1415  B 
1213  B 
1011  C+ 
89  C 
67  C 
45  D+ 
03  D 
Falling even 1 week behind in this course will significantly increase your chances of failing. Application Objectives offer you incentives to stay uptodate on the material by giving you chances to improve your letter grade.
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.
CSE Department Academic Integrity Policy:
https://engineering.buffalo.edu/computerscienceengineering/informationforstudents/undergraduateprogram/cseundergraduateacademicpolicies/cseacademicintegritypolicy.html
UB Academic Integrity Policy:
https://catalog.buffalo.edu/policies/integrity.html
In addition to the department and university policies, the following details apply to this course.
All submitted work must be of your own creation, and you must not share your submission with anyone else. If any submission is very similar to code that has been submitted by another student, or can be found online, it is in violation of this course's academic integrity policy, and all students will be penalized whether they were copying or sharing their code with other students so they can copy. If two submissions are similar beyond what is likely if the students worked independently, then both students are in violation of the academic integrity policy.
All violations will result in:
It is your responsibility to understand what constitutes an academic integrity violation. If you have any question whether something you are doing is a violation or not, ask for clarification before receiving an F in the course. I will not entertain excuses after you have been caught.
Examples of acceptable behavior:
Examples of unacceptable behavior:
If you plan on cheating, plan on taking this course again.
Thursday May 30 
Java Data Structures  Slides 
Java Examples 
Programming Task 1: Unit Testing  
Tuesday June 4 
Unit Testing  Slides 

Testing Strings/doubles  Slides 

Testing and Recursion  Slides 
Programming Task 2: Classes  
Thursday, June 6 @ 8:00am Task 1: Expected Deadline 

Thursday June 6 
Classes and Objects  Slides 

Classes and Objects  Slides 

Testing Classes and Examples  Slides 

Saturday, June 8 @ 8:00am Task 2: Expected Deadline 

Sunday, June 9 @ 8:00am Task 1: Late Deadline 
Programming Task 3: Linked Lists  
Tuesday, June 11 @ 8:00am Task 2: Late Deadline 

Tuesday June 11 
Linked List Structure  Slides 

Linked List Algorithms  Slides 

Stack and Queue  Slides 
Programming Task 4: Inheritance  
Thursday, June 13 @ 8:00am Task 3: Expected Deadline 

Thursday June 13 
Inheritance  Slides 

Inheritance and Override  Slides 

Sorting with Comparators  Slides 

Saturday, June 15 @ 8:00am Task 4: Expected Deadline 

Saturday, June 15 @ 11:59pm Task 1: Final Deadline 

Sunday, June 16 @ 8:00am Task 3: Late Deadline 
Programming Task 5: Trees  
Monday, June 17 @ 11:59pm Task 2: Final Deadline 

Tuesday, June 18 @ 8:00am Task 4: Late Deadline 

Tuesday June 18 
Binary Trees and Traversals  Slides 

Binary Search Trees (BSTs)  Slides 

Binary Tree Examples 
Programming Task 6: Files  
Thursday, June 20 @ 8:00am Task 5: Expected Deadline 

Thursday June 20 
Midterm Exam  First 1.5 hours of lecture 

Thursday June 20 
Files and Exceptions  Slides 

Testing With Files 

Saturday, June 22 @ 8:00am Task 6: Expected Deadline 

Saturday, June 22 @ 11:59pm Task 3: Final Deadline 

Sunday, June 23 @ 8:00am Task 5: Late Deadline 
Programming Task 7: Polymorphism  
Monday, June 24 @ 11:59pm Task 4: Final Deadline 

Tuesday, June 25 @ 8:00am Task 6: Late Deadline 

Tuesday June 25 
Polymorphism  Slides 

Polymorphism  Slides 

Polymorphism Example 
Programming Task 8: Graphs  
Thursday, June 27 @ 8:00am Task 7: Expected Deadline 

Thursday June 27 
Graphs  Slides 

Graph with BFS  Slides 

Graph Examples  Slides 

Saturday, June 29 @ 8:00am Task 8: Expected Deadline 

Saturday, June 29 @ 11:59pm Task 5: Final Deadline 

Sunday, June 30 @ 8:00am Task 7: Late Deadline 
Monday, July 1 @ 11:59pm Task 6: Final Deadline 

Tuesday, July 2 @ 8:00am Task 8: Late Deadline 

Tuesday July 2 
Final Exam  The entire 2.5 hours of lecture 

Saturday, July 6 @ 11:59pm Task 7: Final Deadline 

Monday, July 8 @ 11:59pm Task 8: Final Deadline 