18.S191 | Fall 2020 | Undergraduate

# Introduction to Computational Thinking

## Course Materials

To complete the course, you will first need to install Julia and Pluto on your computer.

First-Time Setup: Install Julia & Pluto (HTML)

How to Install Julia & Pluto (YouTube)

Homework 0: Getting Up & Running

The videos linked below are also available in the form of a YouTube playlist.

All of the Pluto notebook files for lecture sessions and homework are also available on the original GitHub site developed for the course.

1. Images and Abstraction

Working with images in Julia

First taste of abstraction with arrays

Basics of arrays in Julia

TEDx talk: A programming language to heal the planet together

Images - intro (.jl)

2. Convolutions in Image Processing

Convolutions in image processing

Convolutions (.jl)

3. Dynamic Programming, Views, and GPUs

Seam carving

Arrays: Slices and views

Convolutions on GPUs

Image seam reminiscing

Convolutions in the real world

Arrays: Slices and views (.jl)

4. Seam Carving Live Coding Session

Seam carving live coding session

5. Structure and Dispatch

Structure

Defining new types

Functions and types: Multiple dispatch

Introduction to macros

Environments for programming with Julia

Defining types (.jl)

Intro to macros (.jl)

6. Understanding Structure in Data

Understanding structure in data

Structure in data (.jl)

7. Introspection and Covid Data Visualization

Introspection

Analysing Covid-19 data

Introduction to DataFrames

Functions are objects

Introspection (.jl)

Covid data (.jl)

Functions are objects (.jl)

8. Probability via Computation

Probability via computation

Probability (.jl)

9. Computational Thinking, Graphs Are Matrices, and The Expression Problem

Computational thinking illustrated

Graphs are matrices

Verbs and nouns in Julia

Birthday problem (.jl)

Graphs and matrices (.jl)

Verbs and nouns (.jl)

10. Graphs, Trees, and Spreading Disease

11. Epidemic Modeling and Documenting Code

Reflections on an epidemic video

Writing self-documenting code

Verbs and nouns II: Parametric types and abstract types

12. Macroscopic Models of Epidemic Dynamics

Macroscopic models of epidemic dynamics

Macroscopic SIR (.jl)

13. Graphs and Network Dynamics

Graphs and network dynamics

14. Raytracing, Your Own Parallelism, and Abstract Arrays

Raytracing in 2D

Parallel computing on your own machine

What is an array, really? Abstract arrays

What is an array? (.jl)

15. Billiard Models and Event-Driven Simulations

Billiard models and event-driven simulations

16. Raytracing in 3D

Raytracing in 3D

Resistors, equilibrium, and Poisson’s equation

17. Raytracing Live-Coding

[video not available]

18. Hierarchical Thinking, Greedy Algorithms, Jacobi’s Method, and Multigrid

Hierarchical thinking

Iterative numerical schemes for Poisson and Laplace

Multigrid

Iterative Laplace solver (.jl)

19. Floating-Point Arithmetic

Floating-point arithmetic

Floating-point arithmetic (.jl)

20. Introduction to Climate Modeling, Nonlinear Dynamics, and Stability

Introduction to climate modeling

Nonlinear dynamics: Stability and bifurcations

Energy balance model (.jl)

Multiple equilibria (.jl)

Nonlinear dynamics - bifurcations (.jl)

21. Nonlinear Climate Dynamics and Snowball Earth

Nonlinear climate dynamics and Snowball Earth

22. Diffusion Equation and Time and Space Evolution

The diffusion equation

Evolution in time and space: Advection and diffusion in 1D

Stencils and boundary conditions

Stencils and boundary conditions (.jl)

23. Heat Transfer by Ocean Currents

Ocean currents as two-dimensional advection diffusion

24. Ocean Modeling and Generic Programming

Building an ocean model from scratch

Fluid dynamics with Oceananigans.jl

Why you don’t game on supercomputers

Generic programming

Generic programming (.jl)

25. An Overview of Modern Climate Modeling

An overview of modern climate modeling

26. Discrete Fourier Transform

What is a discrete Fourier transform?

Closing remarks

Discrete Fourier transform (.jl)