Lectures

This is an overview of the content covered in the lectures:

Date Topic Description Reading
01/14 01/16 01/23 01/28 Java and OO Basics We will cover what Java is (imperative, garbage-collected, object-oriented, VM-based, strictly typed) and cover basic concepts of the language such as variables, expressions, code blocks, control structures, and data types.
Slides:
Reading: Textbook chapters 1, 2, 3, 5, 6, 7, and 10

Notebooks:

01/30 02/04 02/06 Advanced OO Concepts, Data structures, and Collections We will learn about arrays and collection data structures and multiple inheritence (interfaces), abstract classes, nested classes, anonymous classes, and enumeration types.
Slides:
Reading: Textbook chapter 8, 9, and 14

Notebooks:

02/11 02/13 02/18 Exceptions and I/O We will learn about exception handling in Java and I/O operations. Reading: Textbook chapter 11

Notebooks:

02/20 02/25 Debugging, Logging, and Testing We learn how to use a debugger to debug code, how to utilize logging for debugging, and how to write test code.
Slides:

Notebooks:

02/27 Documentation We will learn about how to comment our code and automatically create documentation from these comments.
Slides:
Reading: Textbook Chapter 7.16

Notebooks:

03/06 03/11 Recursion We will learn about recursion. Reading: Textbook chapter 13

Notebooks:

03/13 03/25 03/27 Introduction to Algorithms: Searching and Sorting We will learn about algorithms using searching and sorting as an example.
Slides:

Notebooks:

04/01 04/03 Computational Complexity We will learn how to analyze the runtime complexity of an algorithm.
Slides:
Reading: Textbook Chapter 15
04/08 04/10 Reflection, Annotations, and Generics We will learn how to use reflection to inspect and manipulate objects of possibly unknown classes at runtime. Furthermore, we will see how to use generics to build generic implementations without sacrifizing type safety.

Notebooks:

04/15 04/17 Lambdas and the Stream API We will learn about lambda expressions that allow anonymous functions to be defined inline and how to use Java Streams to build dataflows that are evaluated lazily.

Notebooks:

04/22 04/24 Concurrent Programming We will explore the basics of threads and concurrent programming in Java.
Slides:

Notebooks:

04/29 05/01 Potpourri We will explore several advanced and tangential topics such as DevOps, Build tools, Virtualization, ClassLoaders, and so on.
Slides: