Recommended Reading
This list extends the Stepanov series with the canon that the principle “algorithms arise from algebraic structure” belongs to. Entries marked ✦ are the works I would hand someone starting out; the rest is depth.
The sections mirror the series’ two layers: first Stepanov’s own writings (the primary source), then the functional-algebra-of-programming lineage, then the practical C++ machinery that implements generic programming in modern form, then the type-theoretic and category-theoretic substrate.
The Stepanov Canon
Read these in this order.
- From Mathematics to Generic Programming by Stepanov, Rose (2015)
[book]✦. The accessible entry point: starts with integer arithmetic and GCD, ends with groups, rings, and STL design. The book to read first. - Elements of Programming by Stepanov, McJones (2009)
[book]✦. The rigorous axiomatic reference. Dense but definitive. - Notes on Programming by Stepanov (2007)
[notes]. The unpolished version of the same material, with his raw reasoning visible. Free PDF. stepanovpapers.com. - Efficient Programming with Components (A9 Lectures) by Stepanov
[course]. The video series covering the same material for watching. YouTube.
Algebra of Programming
The functional lineage: reasoning about programs as equational manipulations of algebraic structures.
- Algebra of Programming by Bird, de Moor (1997)
[book]✦. The canonical treatment of program derivation by equational reasoning over algebraic data types. Out of print but the free draft circulates. - Purely Functional Data Structures by Okasaki (1998)
[book]✦. Algebraic specifications as data-structure designs. The thesis (free) is also worth reading. - Pearls of Functional Algorithm Design by Bird (2010)
[book]. Worked examples of equational reasoning applied to specific problems. - The Essence of Functional Programming by Wadler (1992)
[paper]✦. Monads as the algebraic structure under effectful computation. POPL.
Modern C++ Generic Programming
The practical machinery that implements Stepanov’s ideas in a language.
- C++ Templates: The Complete Guide by Vandevoorde, Josuttis, Gregor (2017, 2nd ed.)
[book]✦. The reference for template metaprogramming, concepts, and the compile-time side of generic code. - Effective Modern C++ by Meyers (2014)
[book]✦. Why the modern language looks the way it does. Required for anyone writing C++ since C++11. - A Tour of C++ by Stroustrup (2022, 3rd ed.)
[book]. The language designer’s short-and-readable overview of modern features. - C++20: The Complete Guide by Josuttis (2022)
[book]. The concepts mechanism that finally made Stepanov’s style first-class. - Range-v3 by Niebler
[software]. The library that inspired C++20 ranges; generic-programming-as-pipelines done rigorously.
Type Theory and Category Theory
The theoretical backdrop: type systems as algebraic structures, programs as arrows.
- Types and Programming Languages by Pierce (2002)
[book]✦. The canonical type-theory text. Dense but essential if you want to argue formally about type-driven design. - Practical Foundations for Programming Languages by Harper (2016, 2nd ed.)
[book]. Harper’s modern alternative to Pierce. Covers more ground. - Category Theory for Programmers by Milewski (2019)
[book]✦. The free-online introduction many programmers start with. Builds intuition for functor, natural transformation, adjunction. - Basic Category Theory for Computer Scientists by Pierce (1991)
[book]. Shorter, older, more formal than Milewski. - Conceptual Mathematics by Lawvere, Schanuel (1991, 2nd ed. 2009)
[book]. If you want to learn category theory from first principles without programming framing.
How this list is opinionated
The thread: algebraic structure is compressed information, algorithms exploit that compression, and generic programming is the practice of writing code against the minimal structure an algorithm requires. Works that illuminate that thread are in.
Excluded on purpose: most of the C++ ecosystem (build systems, libraries, frameworks: they are adjacent, not central), the Haskell pedagogy that focuses on laziness rather than algebra, and the dependent-types literature (a different book, though overlapping at the edges).
If you read three things first, read Stepanov-Rose 2015, Bird-de Moor 1997, and Pierce’s TAPL chapters 1-13. Those three together justify every move the series makes.