Fall 2023
Section 2

Fixed-Size Data

Data Modeling

Sigh, So Sorry :(

Code

Instructions to Process Data

String Templates

What are Functions?

Conditional Code

Expressions and Statements

Type-Driven Function Shape/Templates

Higher-Order Functions (HOFs): Taking in and Producting Functions

Design

Designing Programs with Functions and Data

Type-Driven Testing

Designing Interactive Programs (without reactConsole)

Designing Interactive Console Programs with reactConsole: Overview

Designing Interactive Console Programs with reactConsole: Doubling

Designing Interactive Console Programs with reactConsole: Valid Number

Designing Interactive Console Programs with reactConsole: Madlib

Arbitrarily-Sized Data

Introduction to Sequences

Common Abstractions

Integer Ranges and Progressions

Strings Revisited

Lists

Files

Introduction to Files with the Khoury Library

Programming Paradigms

Overview

Methods of Representing and Iterating Over Lists

List Representations (Conceptually)

Representing a Linked List in Kotlin

Using a for-loop to Iterate Over Sequences

Type-Driven Recursion on Lists

Methods of Iteration for Problem-Solving

Conditional Looping

Divide-and-Conquer via Recursion

Creating Abstractions

The Process of Abstraction

Abstracting Types

Effective Coding with Abstractions

Representing Small Functions Effectively

Object-Oriented Programming

Ideas and Terms

Example Class with Member Functions

Interfaces

Inheritance

Data Classes ala Inheritance

Sealed Classes and Nullable Types ala Inheritance

Mutation

Ideas, Terms, Best Practices

Effective Design

Best Practices: Abstractions and Recursion

The Accumulator Design Pattern

Fold via the Lens of the Accumulator Pattern