Introduction
This is a book list for amateur programmers - and also professional ones - who want to learn the fundamental theories on CS. Only the best of free textbooks and lecture notes are collected. They are introductory, accessible, entertaining and with beautiful typography.
A good guide can be found here. A (way) more comprehensive list of textbooks that are freely available online can be found here.
Math
Calculus by Gilbert Strang
Gilbert Strang wrote the famous Introduction to Linear Algebra. Though the calculus book is less famous, it is also an excellent text with sophisticated insights.
Seeing Theory: A Visual Introduction to Probability and Statistics
Notes on Discrete Mathematics
This is the most humorous lecture notes I have ever read.
Theory of Computation
Introduction to Theoretical Computer Science (still WIP)
Data Structures and Algorithms
Open Data Structures
Algorithms by Jeff Erickson
Programming Languages and Compilers
Structure and Interpretation of Computer Programs
This prestigious text is freely available online. Here is a better good looking one, and an interactive one.