Increasingly many authors of textbooks are making their work free to read online. It happens in a few different ways. Sometimes a book goes out of print and its authors decide to host a PDF copy to keep the results of their labor alive. Other times the book was never intended for print and is published on the author’s website in HTML. Sometimes the author and publisher agree to a dual distribution model, where the print version is sold with traditional copyright and the digital version is released freely with a Creative Commons license like CC BY-NC-ND.

That kind of dual distribution is especially cool. It means prospective readers can audit a book before spending the money to buy it, then keep a physical copy at home and a reference copy on the computer they work from. More than once I’ve started a book on my laptop and finished it in hard copy, because books you hold are still my favorite way to read.

It also saves students money. I’ll always remember how frustrating it was to spend more than $100 on a chemistry textbook that was printed on looseleaf in three-ring binder, and knowing that had been a deliberate choice by the publisher to save on cost and minimize the textbook’s resale value. The book was also worse to read, since you had to be careful not to tear off the pages you turned.

I know my university cared less about the textbook than the textbook company’s online homework and quiz platform, which saved the TAs from having to manually grade the work of 500 students. The textbook was necessary but you were really buying the included website access code. This didn’t do much to dampen the insult: we still felt the school was complicit in scamming us.

Most of my professors assigned us textbook chapters to read before each lecture. This made their lectures more effective because they could focus on specific material or leave out bits of exposition. In theory it also meant fewer students would try to furiously transcribe the entire lecture in their notes. A free book increases the odds that students will do the reading, because by junior year many just stop buying the textbook.

During my math degree I built a personal library of free textbooks and other course materials from my school and others. We all learn differently, and often somebody else’s text would be really helpful. Whenever I found a good resource I saved it. Eventually my collection got big enough that I wondered if I could build a full curriculum out of it. The plan of study below mirrors what you’d see on a college website.

Fall Semester Spring Semester
Freshman Year
Calculus I Calculus II
Basic Electronics Programming in C
Web Development I Topology and Geometry
IT Fundamentals IT Fundamentals
Elective Elective
Sophmore Year
Calculus III Differential Equations
Finite Structures Graph Theory
Web Development II Data Structures
Linear Algebra Intro to Proofs
Elective Elective
Junior Year
Real Analysis Complex Analysis
Probability Theory Hypothesis Testing
Abstract Algebra Databases and SQL
Algorithms Theoretical Computer Science
Elective Elective
Senior Year
Number Theory Cryptography
Networking High Performance Computing
Data Analysis Machine Learning
Time Series Analysis Computational Geometry
Elective Elective

I took some creative liberties. This plan mirrors what I built for myself with my school’s applied mathematics and statistics major. It falls somewhere between the curriculums of traditional Mathematics, Statistics, and Computer Science majors, and is what an undergraduate program in computational mathematics could look like.

I made sure to account for prerequisites. Some classes like cryptography have big dependency trees. Others like graph theory and data structures are fun to take together. It’s also important to take algorithms and data structures before spring of junior year if you apply for software engineering internships.

This isn’t like an awesome list, which always tend to favor quantity over quality. My goal isn’t to give you every possible resource, just a small selection of good ones. I’ve read everything below enough to like it or use it as a reference. I hope this list saves someone the time it took me to discover them.

Freshman Year

Class Link #
Caculus I, II, and III Community Calculus 1
Paul's Online Notes 2
Topology and Geometry Topology Without Tears 3
Basic Electronics Lessons in Electric Circuits 4
The Essential Guide to Electronics in Shenzhen 5
Programming in C Beej's Guide to C Programming 6
Foundations of Computer Science 7
Web Development I WHATWG HTML Standard 8
Learn CSS Layout the Pedantic Way 9
Flexbox Froggy 10
Web Browser Engineering 11
IT Fundamentals The Architecture of Open Source Applications 12
Bash Notes for Professionals 13
Pro Git 14
Making Servers Work 15

#3 is one of the inspirations for this post and how I learned the basics of topology. #4 is how I taught myself enough about electronics to build my daylight alarm clock. #6 is a good introduction to programming in C. I prefer C over Java as a first programming language for reasons beyond the scope of this post. #10 is a cute game for learning CSS flexbox. #14 is how I learned Git when I got tired of looking up the right command to use. I discovered #15 when I started hosting websites with a VPS from DO and like it as a first guide to Linux servers.

Sophomore Year

Class Link #
Intro to Proofs A Gentle Introduction to the Art of Mathematics 1
Elements of Style for Proofs 2
A Mathematician’s Lament 3
Differential Equations Paul's Online Notes 4
Methods of Solving Ordinary Differential Equations 5
Linear Algebra Linear Algebra Done Right 6
Linear Algebra Abridged 7
Immersive Linear Algebra 8
Web Development II The JavaScript Language 9
Eloquent JavaScript 10
The TypeScript Handbook 11
Finite Structures An Introduction to Combinatorics and Graph Theory 12
Introduction to Combinatorics 13
Graph Theory Graph Theory: Penn State Math 485 Lecture Notes 14
Computer Science 163/265: Graph Algorithms 15
Data Structures Open Data Structures 16
GNU libavl 17
Exploring the Design Space of Binary Search Trees 18
NIST Blockchain Technology Overview 19

#1 is tied for my favorite textbook of all time. GAIM is what made the fundamentals click for me. #3 also changed how I look at math. It was validating to hear someone call it an art, because that’s the quality that drew me to math in the first place. #5 and #6 are both by Sheldon Axler: #6 is #5 minus the exercises. #9 is cheating because it isn’t free, but you can buy the three book series for $9. I learned JavaScript informally and used #9 to dive deeper when I wanted to understand the language better. It strikes a good balance between length and detail. Graph Theory was my favorite subject and #14 is what I use as a reference. #18 is a beautifully-typeset discussion of trees and #18 is by far the best resource I know to learn the fundamentals of blockchains.

Junior Year

Class Link #
Real Analysis Measure, Integration & Real Analysis 1
Elementary Real Analysis 2
NIST Digital Library of Mathematical Functions 3
Complex Analysis Multivariable and Complex Analysis 4
Probability Theory Probability and Stochastic Processes with Applications 5
Jane Street Probability & Markets Guide 6
Abstract Algebra Algebra: Abstract and Concrete 7
Beautiful Symmetry: A Coloring Book About Math 8
The Geometry of Reflection Groups 9
Algorithms Competitive Programmer’s Handbook 10
Advanced Data Structures and Algorithms 11
Algorithms 12
Route Planning in Road Networks 13
NIST Dictionary of Algorithms and Data Structures 14
Databases Foundations of Databases 15
Readings in Database Systems 16
Hypothesis Testing Testing Statistical Hypotheses 17
The Little Handbook of Statistical Practice 18
Theoretical Computer Science Elements of Programming 19
Transition Systems 20
Evolving Algebras 21
Practical Foundations of Mathematics 22

I own a physical copy of #2 and #12. I used #7 in college and really enjoyed it. #8 is very fun. #10 is a great resource for solving programming puzzles in C++. I think it’s the best way to start preparing for technical interviews and programming contests. #13 is a cool paper that explores a practical application of shortest-path algorithms. #20 and #21 are different ways to think about the building blocks of computer science.

Senior Year

Class Link #
Number Theory Elementary Number Theory 1
Data Analysis Advanced Data Analysis from an Elementary
Point of View
2
Computer Age Statistical Inference: Algorithms, Evidence and Data Science 3
High Performance Computing Programming Parallel Computers 4
MPI Tutorial 5
Networking Computer Networks: A Systems Approach 6
Beej's Guide to Network Programming 7
A TCP/IP Tutorial 8
Time Series Analysis STAT 720: Time Series Analysis 9
Computational Geometry CMSC 754: Computational Geometry 10
Basic Algorithms in Computational Geometry 11
Machine Learning Understanding Machine Learning: From Theory to Algorithms 12
The Little Book of Machine Learning 13
Practical Deep Learning for Coders 14
Foundations of Machine Learning 15
Cryptography Lecture Notes on Cryptography 16
Online Cryptography Course 17
An Overview of Cryptography 18

I spent a summer as a research assistant under a professor studying parallel simulated annealing. #4-5 were key to getting started. #6 is my other favorite textbook. Networking has a reputation for being a boring subject and the authors prove it isn’t. Computational Geometry was one of the more interesting classes I took in college and #10 was the assigned textbook. Stanford has used the same book in the past. #14 and #15 are cheating because they’re video series, not textbooks, but I used both to grok machine learning better. I didn’t get far in cryptography but recommend #16 to get your feet wet.

Academic websites are my favorite example of old-school web design. They’re simple, text-based, and easy to navigate. They’re also some of the most susceptible to link rot. Every year, excellent course websites disappear when the servers hosting them are retired. If the resources I provided for a class are gone, or you’re looking for a class that isn’t here, you can probably find it on Rice University’s OpenStax or the University of Minnesota’s Open Textbook Library.