Prabhakar Ragde's flâneries

This page collects some recent longform pedagogical writing that I hope will be of interest. The word "flânerie" simply means "stroll", but I use it to evoke the German cultural critic Walter Benjamin (1892-1940), who elevated wandering through sophisticated urban environments to an art form. Freed from the pressures of the credit system, course material can become a voluntary pleasure, a guided walk through an interesting quarter. The works below are shorter and more informal than a textbook, but longer and more polished than a typical blog post. I'm happy to take suggestions for improvement.

Currently available:

Scroll down for brief descriptions, or click through for full materials.

Wishful thinking: Functional Lexing And Parsing. Not even a description on this one.

A Functional Introduction to Computer Science (FICS)

An introduction to CS for those who have never programmed before, or who have done some programming in imperative languages, based on my offerings of the courses CS 145, CS 146, and Math 642. These courses were originally designed for students with mathematical aptitude and enthusiasm for the subject. Programming examples and exercises use the Racket teaching languages, as well as full Racket.

The lost preludes of FICS

I used to start CS 145 (an "advanced" first course in CS, last taught by me in 2014) with a lecture using Haskell as functional pseudocode. In 2020 I reimagined that lecture using Agda. This material is not properly part of FICS, but you may find it amusing.

Contents:

Teach Yourself Racket (TYR)

A rapid introduction to the basics of programming in full Racket, intended for mature programmers.

Contents:

If You Must Learn C (IYMLC)

An introduction to C from a Racket perspective, based on optional material from my course CS 146. Not as passionate or inventive as other material here, but I tried to do a decent job. Somewhat shorter than TYR.

Contents:

Functional Data Structures (FDS)

A modern reimagining of data structures focussing on immutability and persistence, based on my offerings of the course CS 240E, and aimed at those who have done some programming in imperative or functional languages (such as covered in TYR or FICS). Programming examples and exercises use the OCaml language.

Contents:

Logic And Computation Intertwined (LACI)

An introduction to logic and program verification for computer scientists via intuitionistic type theory, based on my offerings of the course CS 245E. The reader will write the majority of the code for a very small proof assistant, Proust, before we move to introductions to the much more full-featured Agda and Coq software systems. Required background: some experience in programming in imperative or functional languages (such as covered in TYR or FICS). Programming examples and exercises use full Racket. There are also some exercises in Agda and Coq.

Contents:

Functional Lexing And Parsing (FLAP)

A planned collection of ideas I've scattered into various courses over the years, along the lines of the works above, and including material from my offering of CS 842 in fall 2012.

A Functional Introduction to Modular Synthesis (FIMS)

Unlike the above technical works on computer science, this is about Eurorack synthesizer modules used for the creation of music and interesting sounds.

Though the subject matter is different from the works above, this is very much in the same spirit, in that it is aimed at the relative beginner, and focusses on a small but rich universe. After a brief introduction, the second chapter looks at a single module, introducing concepts through an explanation of its parts and what can be done with it through self-patching. The third chapter brings in more ideas through an examination of modules currently resident in my rack.

The Sound of Math (TSOM)

This short flanerie explores the mathematics behind some techniques in audio synthesis, using free software that simulates Eurorack. It is aimed at university students in their first year of study.

Cheriton School of Computer Science, University of Waterloo, Waterloo, Ontario, Canada N2L 3G1
plragde at uwaterloo.ca