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
- Distributed Systems
- Game Programming
- GUI Programming
- Hardware
- Logical Games
- Math
- Multithreading and Concurrency
- Operating Systems
- Physics
- Programming Languages
- Retrocomputing
- Reverse engineering
- Robotics
- Text editors
- Version control tools
- Emulators and Virtual Machines
- Web programming
- Other
- Other lists
-
A Course in Machine Learning by Hal Daumé III
-
Algorithms for Decision Making by Mykel J. Kochenderfer, Tim A. Wheeler, and Kyle H. Wray
-
Deep Learning by Ian Goodfellow, Yoshua Bengio and Aaron Courville
-
Deep Learning Interviews Second Edition by Shlomo Kashani
-
Machine Learning Engineering Book by Andriy Burkov
-
Mathematics for Machine Learning by Marc Peter Deisenroth, A. Aldo Faisal, and Cheng Soon Ong
-
Physics-based Deep Learning by N. Thuerey, P. Holl, M. Mueller, P. Schnell, F. Trost, K. Um
-
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
-
Algorithms for Optimization by Mykel J. Kochenderfer and Tim A. Wheeler
-
Algorithms for Modern Hardware by Sergey Slotin
-
Competitive Programmer's Handbook by Antti Laaksonen
-
Exact String Matching Algorithms by Christian Charras and Thierry Lecroq
-
Introduction to High Performance Scientific Computing by Victor Eijkhout with Edmond Chow and Robert van de Geijn
-
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.
-
3D Math Primer for Graphics and Game Development by Fletcher Dunn and Ian Parberry
-
Computer Graphics from Scratch by Gabriel Gambetta
-
Curves and Surfaces by Bartosz Ciechanowski
-
GPU Gems Books Series
-
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
-
The Book of Shaders by Patricio Gonzalez Vivo and Jen Lowe
-
Vulkan Tutorial by Alexander Overvoorde
-
How to build a BVH by Jacco Bikker
-
Physically Based Rendering: From Theory To Implementation by Matt Pharr, Wenzel Jakob, and Greg Humphreys
-
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
-
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
-
REST Servers in Go by Ely Bendersky
-
A Graduate Course in Applied Cryptography by Dan Boneh and Victor Shoup
-
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
- Testing Distributed Systems - Curated list of resources on testing distributed systems by Andrey Satarin.
-
2D Game Development: From Zero To Hero by Daniele Penazzo
-
Gentle Introduction to Realtime Fluid Simulation for Programmers and Technical Artists by Shahriar Shahrabi
-
Retro Rampage a tutorial series in which you will learn how to build a Wolfenstein-like game from scratch, in Swift by Nick Lockwood
-
Scroll Back: The Theory and Practice of Cameras in Side-Scrollers by Itay Keren
-
Modern Microprocessors: A 90-Minute Guide! by Jason Robert Carey Patterson
- Hex: A Strategy Guide by Matthew Seymour
-
A Gentle Introduction to Tensors by Boaz Porat
-
A Programmer's Introduction to Mathematics by Jeremy Kun
-
An Infinitely Large Napkin by Evan Chen
-
Book of Proof, Third Edition by Richard Hammack
-
Paul's Online Math Notes by Paul Dawkins
-
Immersive Linear Algebra by J. Ström, K. Åström, and T. Akenine-Möller
-
Interactive Linear Algebra by Dan Margalit and Joseph Rabinoff
-
Intermediate Algebra by Saylor Academy
-
Category Theory for Programmers by Bartosz Milewski
-
Category Theory Illustrated by Boris Marinov
-
Category Theory: Lecture Notes and Online Books - collection by Peter Smith
-
Digital textbook on probability and statistics by Marco Taboga
-
Introduction to Probability for Data Science by Stanley H. Chan
-
Markov Chains for programmers by Ricardo M. Czekster
-
Seeing Theory - a book about statistics with interactive visualizations by Daniel Kunin, Jingru Guo, Tyler Dae Devlin, and Daniel Xiang
-
Is Parallel Programming Hard, And, If So, What Can You Do About It? by Paul E. McKenney
-
POSIX Threads Programming by Blaise Barney
-
The Little Book of Semaphores by Allen B. Downey
-
Linux Insides by 0xAD
-
Making our own executable packer by Amos
-
Operating Systems: Three Easy Pieces by Remzi H Arpaci-Dusseau and Andrea C Arpaci-Dusseau
-
Systems Programming: Lecture Notes by Jian Huang
-
Writing a Simple Operating System — from Scratch by Nick Blundell
-
Writing an OS in Rust by Philipp Oppermann
-
A free introduction to quantum computing and quantum mechanics by Andy Matuschak and Michael Nielsen
-
Motion Mountain by Christoph Schiller - A free physics textbook in 5 volumes.
-
Relativity: A Modern Primer by Kevin Han
-
Structure and Interpretation of Classical Mechanics, Second Edition by Gerald Jay Sussman and Jack Wisdom
-
A fundamental introduction to x86 assembly programming by Nayuki
-
Learn Assembly Language - NASM x86 assembly language tutorial on Linux.
-
Let's Learn x86-64 Assembly!
-
Coroutines in C by Simon Tatham
-
The Lost Art of Structure Packing by Eric S. Raymond
-
Unicode programming, with examples by Joe Nelson
-
Beginner's Guide to Linkers by David Drysdale
-
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
- Programming in D by Ali Çehreli
- Learn You Some Erlang for great good! by Fred Hebert
-
Network Programming with Go by Jan Newmarch
-
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
-
Eloquent JavaScript by Marijn Haverbeke
-
The Modern JavaScript Tutorial by Ilya Kantor
- Computer Programming with the Nim Programming Language by Dr. Stefan Salewski
- Real World OCaml by Yaron Minsky, Anil Madhavapeddy and Jason Hickey
- Modern Object Pascal Introduction for Programmers by Michalis Kamburelis
-
Automate the Boring Stuff with Python by Al Sweigart
-
Composing Programs by John DeNero
-
Scientific Visualization: Python + Matplotlib by Nicolas Rougier
-
Beautiful Racket by Matthew Butterick
-
How to Design Programs, Second Edition by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi
-
Implementing Regular Expressions by Russ Cox
-
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
-
An Afterlife User's Guide to the C64 by Gregorio Naçu
-
Famicom Party: Making NES Games in Assembly by Kevin Zurawel
-
First Steps in Z80 Assembly Language by Darryl Sloan
-
How to Write ZX Spectrum Games by Jonathan Cauldwell
-
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
-
Vim Reference Guide by Sundeep Agarwal
-
Git from the Bottom Up by John Wiegley
-
Learn the workings of Git, not just the commands by Andre Fachat
-
Writing NES emulator in Rust by Rafael Bagmanov
-
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.
-
Electronic References by Colin S. Gordon - a loosely-categorized collection of links to CS textbooks in a variety of areas that are freely available online.