This page covers *what* we teach at ScalaBridge London. The teaching page covers how we teach.

Our curriculum is ordered into five levels, each of which roughly corresponds to six sessions of work. At the completion of the five levels you should know enough to be an advanced beginner / intermediate Scala developer.

Our text is Creative Scala. The curriculum below is annotated with chapters from Creative Scala where available.

## Level One

### Setup

- Get setup with a development environment. This is currently (March 2020) Visual Studio Code.
*Do not*follow the setup in Creative Scala. It is out of date. Instead follow our preparation steps.

### Expressions, Types, and Values

- Creative Scala Chapter 2
- Literals
- Expressions have types and produce values
- Compound expressions
- All values are objects
- Method call syntax
- dot notation
- parameters

### Workflow

- Creative Scala Chapter 4
- Starting and stopping
`sbt`

- Wrapping code in
`object`

- Compiling code
- Running code and using
`App`

- Experimenting in the console
`sbt`

Workflow

### Names and Substitution

- Creative Scala Chapter 5
- Giving names to values
- Motivation

- Using names
- Names abstract over expressions

- The substitution model of evaluation
- Order of evaluation
- Local reasoning

### Art: Computing with Images

- Creative Scala Chapter 3
- Doodle basics

### Methods

- Creative Scala Chapter 6
- Motivation
- Method declaration syntax
- Method call semantics
- In terms of substitution

- Methods generalize expressions

### Structural Recursion over the Natural Numbers

- Creative Scala Chapter 7
- Motivation
- Do something a variable number of times

- The natural numbers
- Recursive definition

- Structural recursion pattern
- Structure of code follows structure of definition
- Solve the cases

- Reasoning about code
- Operational reasoning: substitution
- Denotational reasoning: what is the base case, what is the one-step recursive case?

### Art: Structure in Recursion

- Creative Scala Chapter 8
- Fractals

## Level Two

### Functions

- Creative Scala Chapter 9
- Functions as values
- Abstracting over expressions with functions
- Parametric equations of curves
- Function composition
- Composition for parametric equations

### Art: Animations

- Animations as images displayed over time instead of space
- Animation using reactors (or transducers?)
- Structural recursion “unrolled” into a reactor

- Parametric equations as reactors

### Lists

- Paths as lists of path elements
- Polygons as paths
- Structural recursion over lists
`map`

for transforming lists- Animating polygons

### Custom Data

- Case classes as logical ands
- Animations using custom data
- Simple physics. Bouncing ball.
- Multiple parametric equations

### FlatMap

- Changing length of a list to add and remove particles in a particle system
- flatMap using structural recursion
- flatMap as changing the length of a List
- Responding to mouse events
- Particle systems. Ripples. etc.

### Project: Puzzle Game

- Tile matching video game

## Level Three

### Algebraic Data Types and Structural Recursion 1: Ands and Ors

- Modelling data in terms of ands and ors; sealed traits and final case classes
- Non-recursive data
*NOTE*Keep examples concrete

- Structural recursion (w/o recursion!)
- Pattern matching (familiar by now)
- Polymorphism
- Abstract methods

- State machines. FSM animations. E.g. exploding fireworks or interacting FSMs? FSMs for modelling interaction?

### Algebraic Data Types and Structural Recursion 2: Recursion

- The recursion rule
- Recursive data
- Transforming recursive data
- Grammars and l-systems

### Functions and Generic Types

- Generic types
- Containers
- Functions to work with generic types
- kd-tree? Faster intersection tests?

### Standard Library Types

- Option, Either, Map
- map, flatMap
- find, exists

### Map and FlatMap

- We’ve already seen map, but review
- flatMap
- L-Systems again?

### Fold

- fold as an abstraction of structural recursion

## Level Four

### Type Classes and Implicits

- Implicit parameters
- Implicit values

### Type Classes in Cats

- Monoid
- Monad
- Applicative / Semigroupal

### Probability Monad?

- Generative art w/ randomisation

## Level Five

### Case Studies

- Implement something chosen between the students and the mentor. E.g. something web based or a programming language.