This is a list of links to different freely available learning resources about computer programming, math, and science.
- AI
- Algorithms
- Command Line and Tools
- Compilers and Interpreters
- Computer Graphics
- Computer Networks and Network Programming
- Cryptography
- Databases
- Design Patterns
- Game Programming
- GUI Programming
- Hardware
- Math
- Multithreading and Concurrency
- Operating Systems
- Physics
- Programming Languages
- Retrocomputing
- Reverse engineering
- Robotics
- Text editors
- Version control tools
- Virtual machines
- Web programming
- Other
-
A Course in Machine Learning by Hal Daumé III
-
Deep Learning by Ian Goodfellow, Yoshua Bengio and Aaron Courville
-
Machine Learning Engineering Book by Andriy Burkov
-
Mathematics for Machine Learning by Marc Peter Deisenroth, A. Aldo Faisal, and Cheng Soon Ong
-
The Hundred Page Machine Learning Book by Andriy Burkov
-
Game AI Pro by Steve Rabin
-
Programming Starcraft AI by Peter Kis
-
Algorithms by Jeff Erickson
-
Exact String Matching Algorithms by Christian Charras and Thierry Lecroq
-
Principles of Algorithmic Problem Solving by Johan Sannemo
-
Problem Solving with Algorithms and Data Structures using Python by Brad Miller and David Ranum
-
Curl Exercises by Julia Evans
-
How I'm still not using GUIs: A guide to the terminal by Lucas Fernandes da Costa
-
The Linux Command Handbook by Flavio Copes
-
Build Your Own Lisp by Daniel Holden
-
Crafting Interpreters by Robert Nystrom
-
Creating the Bolt Compiler by Mukul Rathi
-
How Clang Compiles a Function by John Regehr
-
How LLVM Optimizes a Function by John Regehr
-
Let's Build a Compiler by Jack Crenshaw
-
Let's Write a Compiler by Brian Robert Callahan
-
Make A Language - A series about making a programming language called Eldiro using the Rust programming language.
-
Computer Graphics from Scratch by Gabriel Gambetta
-
GPU Performance for Game Artists by Keith O’Conor
-
I Am Graphics And So Can You - a series of blog posts about implementing a Vulkan renderer for Doom 3 by Dustin H. Land
-
Learn OpenGL by Joey de Vries
-
Probability Theory for Physically Based Rendering by Jacco Bikker
-
Ray Tracing Gems by Eric Haines and Tomas Akenine-Möller
-
Ray Tracing Gems II by Adam Marrs, Peter Shirley, and Ingo Wald
-
Ray Tracing in One Weekend: The Book Series by Peter Shirley
-
The Book of Shaders by Patricio Gonzalez Vivo and Jen Lowe
-
Vulkan Tutorial by Alexander Overvoorde
-
An Introduction to Computer Networks by Peter L. Dordal
-
Computer Networks: A Systems Approach by Larry Peterson and Bruce Davie
-
HTTP2 Explained by Daniel Stenberg
-
HTTP/3 explained by Daniel Stenberg
-
Networking 101 by Internal Pointers
- Practical Cryptography for Developers by Svetlin Nakov
- The Theory of Relational Databases by David Maier
-
Data-Oriented Design by Richard Fabian
-
Design Patterns & Refactoring SourceMaking
-
From design patterns to category theory by Mark Seemann
-
Game Programming Patterns by Robert Nystrom
-
Modern Microprocessors: A 90-Minute Guide! by Jason Robert Carey Patterson
-
A Gentle Introduction to Tensors by Boaz Porat
-
A Programmer's Introduction to Mathematics by Jeremy Kun
-
Book of Proof, Third Edition by Richard Hammack
-
Category Theory for Programmers by Bartosz Milewski
-
Immersive Linear Algebra by J. Ström, K. Åström, and T. Akenine-Möller
-
Interactive Linear Algebra by Dan Margalit and Joseph Rabinoff
-
Paul's Online Math Notes by Paul Dawkins
-
Seeing Theory - a book about statistics with interactive visualizations by Daniel Kunin, Jingru Guo, Tyler Dae Devlin, and Daniel Xiang
- POSIX Threads Programming by Blaise Barney
-
Making our own executable packer by Amos
-
Systems Programming: Lecture Notes by Jian Huang
-
Writing an OS in Rust by Philipp Oppermann
-
A free introduction to quantum computing and quantum mechanics by Andy Matuschak and Michael Nielsen
-
Structure and Interpretation of Classical Mechanics, Second Edition by Gerald Jay Sussman and Jack Wisdom
-
Let's Learn x86-64 Assembly!
-
Coroutines in C by Simon Tatham
-
Unicode programming, with examples by Joe Nelson
-
C++20 Coroutines: sketching a minimal async framework by Jeremy Ong
-
C++20 Concepts: The Definitive Guide by Rajat Jain
-
C++ exceptions under the hood by Nicolás Brailovsky
-
Performance Analysis and Tunning on Modern CPUs by Denis Bakhvalov
-
Clojure Concurrency Tutorial by Eric Normand
-
Clojure for the Brave and True by Daniel Higginbotham
- Practical Common Lisp by Peter Seibel
- Learn You Some Erlang for great good! by Fred Hebert
- Practical Go Lessons by Maximilien Andile
-
Learn You a Haskell for Great Good! by Miran Lipovača
-
Real World Haskell by Bryan O'Sullivan, Don Stewart, and John Goerzen
- Modern Object Pascal Introduction for Programmers by Michalis Kamburelis
-
Automate the Boring Stuff with Python by Al Sweigart
-
Composing Programs by John DeNero
- How to Design Programs, Second Edition by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi
-
Regular-Expressions.info by Jan Goyvaerts
-
A Gentle Introduction to Rust by Steve Donovan
-
Exploring ways to make async Rust easier by Carl Lerche
- Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Jay Sussman with Julie Sussman
-
How to Write ZX Spectrum Games by Jonathan Cauldwell
-
First Steps in Z80 Assembly Language by Darryl Sloan
-
Learn Multiplatform Assembly Programming by ChibiAkumas
-
The Lost Ways of Programming: Commodore 64 BASIC by Tomas Petricek
-
Reverse Engineering for Beginners by Dennis Yurichev
-
Reversing for dummies - x86 assembly and C code by Sami Alaoui
-
Modern Robotics: Mechanics, Planning, and Control by Kevin M. Lynch and Frank C. Park
-
Underactuated Robotics by Russ Tedrake
-
Learn Vim (the Smart Way) by Igor Irianto
-
The Vi/Ex Editor by Walter Alan Zintz
- Git from the Bottom Up by John Wiegley
-
FastCGI — The Forgotten Treasure by Peter Simons and Ralph Babel
-
Computer Science from the Bottom Up by Ian Wienand
-
How These Things Work - a book about abstraction
-
The Nature of Code a book about how can we capture the unpredictable evolutionary and emergent properties of nature in software by Daniel Shiffman
-
The Scientist and Engineer's Guide to Digital Signal Processing by Steven W. Smith, Ph.D.