Programming, Math, Science
This is a list of links to different freely available learning resources about computer programming, math, and science.
Table of contents
- AI
- Algorithms
- Biology
- Command Line and Tools
- Compilers and Interpreters
- Computer Graphics
- Computer Networks and Network Programming
- Cryptography
- Databases
- Design Patterns
- Distributed Systems
- Electronics
- Emulators and Virtual Machines
- Game Programming
- GUI Programming
- Hardware
- Logical Games
- Math
- Multithreading and Concurrency
- Operating Systems
- Photography
- Physics
- Programming Languages
- Retrocomputing
- Reverse engineering
- Robotics
- Text editors
- Unicode
- Version control tools
- Web programming
- Other
- Other lists
AI
Machine Learning
-
A Course in Machine Learning by Hal Daumé III
-
Algorithms for Decision Making by Mykel J. Kochenderfer, Tim A. Wheeler, and Kyle H. Wray
-
An Introduction to Statistical Learning by Gareth James, Daniela Witten, Trevor Hastie, Rob Tibshirani
-
Data-Driven Science and Engineering: Machine Learning, Dynamical Systems, and Control by Steven L. Brunton and J. Nathan Kutz [pdf]
-
Deep Learning by Ian Goodfellow, Yoshua Bengio and Aaron Courville
-
Deep Learning Interviews Second Edition by Shlomo Kashani
-
Foundations of Data Science by Avrim Blum, John Hopcroft, and Ravindran Kannan
-
Information Theory, Inference, and Learning Algorithms by David MacKay
-
Machine Learning Engineering Book by Andriy Burkov
-
Mathematics for Machine Learning by Marc Peter Deisenroth, A. Aldo Faisal, and Cheng Soon Ong
-
Neural Networks: Zero to Hero - A course by Andrej Karpathy
-
Physics-based Deep Learning by N. Thuerey, P. Holl, M. Mueller, P. Schnell, F. Trost, K. Um
-
Probabilistic Machine Learning: An Introduction by Kevin Patrick Murphy
-
Probabilistic Machine Learning: Advanced Topics by Kevin Patrick Murphy
-
The Hundred Page Machine Learning Book by Andriy Burkov
-
The Little Book of Deep Learning by François Fleuret
Computer Games AI
-
Game AI Pro by Steve Rabin
-
Programming Starcraft AI by Peter Kis
Algorithms
-
Algorithms by Jeff Erickson
-
Algorithms and Data Structures by Kurt Mehlhorn and Peter Sanders [pdf]
-
Algorithms for Optimization by Mykel J. Kochenderfer and Tim A. Wheeler
-
Algorithms for Modern Hardware by Sergey Slotin
-
Clever Algorithms: Nature-Inspired Programming Recipes by Jason Brownlee
-
Competitive Programmer's Handbook by Antti Laaksonen
-
Exact String Matching Algorithms by Christian Charras and Thierry Lecroq
-
Introduction to Algorithms: A Creative Approach by Udi Manber [pdf]
-
Introduction to High Performance Scientific Computing by Victor Eijkhout with Edmond Chow and Robert van de Geijn
-
Planning Algorithms by Steven M. LaValle
-
Principles of Algorithmic Problem Solving by Johan Sannemo
-
Problem Solving with Algorithms and Data Structures using Python by Brad Miller and David Ranum
-
Purely Functional Data Structures by Chris Okasaki
-
Sequential and Parallel Data Structures and Algorithms: The Basic Toolbox by Peter Sanders, Kurt Mehlhorn, Martin Dietzfelbinger, and Roman Dementiev
Biology
-
The Algorithmic Beauty of Plants by Przemyslaw Prusinkiewicz and Aristid Lindenmayer [pdf]
Command line and tools
-
Driving Compilers by Fabien Sanglard
-
Getting started with tmux by ittavern
-
How I'm still not using GUIs: A guide to the terminal by Lucas Fernandes da Costa
Curl
-
Curl Exercises by Julia Evans
Linux command line
-
Effective Shell by Dave Kerr
-
Linux command line for you and me by Kushal Das
-
The Linux Command Handbook by Flavio Copes
-
The Linux Command Line by William Shotts
Compilers and Interpreters
-
Build Your Own Lisp by Daniel Holden
-
Crafting Interpreters by Robert Nystrom
-
Creating the Bolt Compiler by Mukul Rathi
-
Essentials of Compilation: An Incremental Approach by Geremy G. Siek
-
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
-
3D Math Primer for Graphics and Game Development by Fletcher Dunn and Ian Parberry
-
A Gentle Introduction to D3D12 by Alex Tardif
-
A trip through the Graphics Pipeline by Fabian Giesen
-
Computer Graphics from Scratch by Gabriel Gambetta
-
Curves and Surfaces by Bartosz Ciechanowski
-
A fast and precise triangle rasterizer by Kristoffer Dyrkorn
-
GPU Gems Books Series
-
GPU Performance for Game Artists by Keith O’Conor
-
Learn OpenGL by Joey de Vries
-
Learn WebGPU by Elie Michel
-
Learning Modern 3D Graphics Programming by Jason L. McKesson
-
Matrix Compendium by Łukasz Izdebski - The main purpose of this article is to gather information in the field of transformation in computer graphics and put it in one place.
-
OGLdev: Modern OpenGL tutorials by Etay Meiri
-
Optimizing Software Occlusion Culling by Fabian Giesen
-
Order Independent Transparency by Kostas Anagnostou
-
Probability Theory for Physically Based Rendering by Jacco Bikker
Demoscene
- The making of Immersion
Ray Tracing
-
Getting Started With DirectX Raytracing by Seppe Dekeyser
-
How to build a BVH by Jacco Bikker
-
Introduction of the Raytracing Technology
-
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
Shaders
-
A Beginner's Guide to Coding Graphics Shaders by Omar Shehata
-
Shaders For People Who Don't Know How To Shader by Manuela Malasaña
-
The Book of Shaders by Patricio Gonzalez Vivo and Jen Lowe
Vulkan
-
I Am Graphics And So Can You - a series of blog posts about implementing a Vulkan renderer for Doom 3 by Dustin H. Land
-
Vulkan Tutorial by Alexander Overvoorde
-
Vulkan Tutorial (Rust) by Kyle Mayes
Computer Networks and Network Programming
-
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
Cryptography
-
A Graduate Course in Applied Cryptography by Dan Boneh and Victor Shoup
-
Cryptography: An Introduction (3rd Edition) by Nigel Smart [pdf]
-
Practical Cryptography for Developers by Svetlin Nakov
Databases
-
Build Your Own Database From Scratch by James Smith
-
Build Your Own Redis with C/C++ by James Smith
-
MySQL for Developers by Aaron Francis
-
PostgreSQL 14 Internals by Egor Rogov
-
The Theory of Relational Databases by David Maier
Design Patterns
-
Data-Oriented Design by Richard Fabian
-
Design Patterns & Refactoring SourceMaking
-
Handles are the better pointers by Andre Weissflog
-
From design patterns to category theory by Mark Seemann
-
Game Programming Patterns by Robert Nystrom
Distributed systems
-
Distributed systems for fun and profit by Mikito Takada
-
Notes on Theory of Distributed Systems by James Aspnes [pdf]
-
Patterns of Distributed Systems by Unmesh Joshi
-
Testing Distributed Systems - Curated list of resources on testing distributed systems by Andrey Satarin.
Electronics
Emulators and Virtual Machines
-
5 Days To Virtualization: A Series On Hypervisor Development by Daax Rynd, Aidan Khoury and Nick Peterson
-
GameBoy Emulation in JavaScript by Imran Nazar
-
Roll your own JavaScript runtime by Bartek Iwańczuk
-
Writing NES emulator in Rust by Rafael Bagmanov
Game Programming
-
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
-
Roguelike Tutorial - In Rust by Herbert Wolverson
-
Scroll Back: The Theory and Practice of Cameras in Side-Scrollers by Itay Keren
-
Write a First Person Game in 2KB With Rust by Grant Handy
GUI Programming
-
Minimal Cross-Platform Graphics by Serge Zaitsev
-
X Window System Basics by Jasper St. Pierre
Hardware
-
Architecture of Consoles by Rodrigo Copetti
-
Modern Microprocessors: A 90-Minute Guide! by Jason Robert Carey Patterson
-
What Every Programmer Should Know About Memory by Ulrich Drepper [pdf]
Logical Games
-
Hex: A Strategy Guide by Matthew Seymour
-
The World's Fastest Scrabble Program by Andrew W. Appel and Guy J. Jacobson [pdf]
Math
-
A Gentle Introduction to Tensors by Boaz Porat
-
A Programmer's Introduction to Mathematics by Jeremy Kun
-
An Infinite Descent into Pure Mathematics by Clive Newstead
-
An Infinitely Large Napkin by Evan Chen [pdf]
-
Book of Proof, Third Edition by Richard Hammack
-
Everything You Always Wanted To Know About Mathematics by Brendan W. Sullivan with Professor John Mackey [pdf]
-
Introduction to Homotopy Type Theory by Egbert Rijke
-
Paul's Online Math Notes by Paul Dawkins
-
Topology Without Tears by Sidney A. Morris
Algebra
-
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
-
Linear Algebra Done Wrong by Sergei Treil
Calculus
-
Introduction to Calculus by Paul Lutus [pdf]
Category Theory
-
Category Theory for Programmers by Bartosz Milewski
-
Category Theory Illustrated by Boris Marinov
-
Category Theory: Lecture Notes and Online Books - collection by Peter Smith
Probability and Statistics
-
Bayes Rules! An Introduction to Applied Bayesian Modeling by Alicia A. Johnson, Miles Q. Ott, Mine Dogucu
-
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
-
Probability 101, the intuition behind martingales and solving problems with them
-
Probability and Statistics Cookbook by Matthias Vallentin
-
Seeing Theory - a book about statistics with interactive visualizations by Daniel Kunin, Jingru Guo, Tyler Dae Devlin, and Daniel Xiang
-
Statistics Handbook by Carlo Occhiena
Theoretical Computer Science
-
Busy Beavers! - An interactive intro to Computability Theory by Jim Fisher
-
Elements of Programming by Alexander Stepanov and Paul McJones
-
Foundations of Computer Science by Alfred V. Aho and Jeffrey D. Ullman
-
Software Foundations - A broad introduction to the mathematical underpinnings of reliable software.
Multithreading and Concurrency
-
A C++17 Thread Pool for High-Performance Scientific Computing by Barak Shoshany
-
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
Operating Systems
-
A Journey in Creating an Operating System Kernel by Mohammed Q. Hussain
-
Advanced Linux Programming by Mark Mitchell, Jeffrey Oldham, and Alex Samuel
-
Linux Insides by 0xAD
-
Making a RISC-V Operating System using Rust by Stephen Marz
-
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
-
The Linux Kernel Module Programming Guide by Peter Jay Salzman, Michael Burian, Ori Pomerantz, Bob Mottram, Jim Huang
-
Writing a Simple Operating System — from Scratch by Nick Blundell
-
Writing an OS in Rust by Philipp Oppermann
Photography
- Photography for geeks by Michal Zalewski
Physics
-
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
Programming languages
- Introduction to the Theory of Programming Languages by Bertrand Meyer
Assembly
-
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!
-
RISC-V Assembly Programming by Prof. Edson Borin
-
Some Assembly Required: An approachable introduction to assembly
Basic
C
-
Coroutines in C by Simon Tatham
-
Demystifying bitwise operations, a gentle C tutorial by Andrei Ciobanu
-
Object-Oriented Programming with ANSI-C by Axel-Tobias Schreiner [pdf]
-
The Lost Art of Structure Packing by Eric S. Raymond
-
Writing a Simple Garbage Collector in C by Matthew Plant
C++
-
Beginner's Guide to Linkers by David Drysdale
-
C++ exceptions under the hood by Nicolás Brailovsky
-
C++20 Coroutines: sketching a minimal async framework by Jeremy Ong
-
C++20 Concepts: The Definitive Guide by Rajat Jain
-
Performance Analysis and Tunning on Modern CPUs by Denis Bakhvalov
D
- Programming in D by Ali Çehreli
Erlang
- Learn You Some Erlang for great good! by Fred Hebert
Go
-
Network Programming with Go by Jan Newmarch
-
Practical Go Lessons by Maximilien Andile
Haskell
-
Learn Haskell by building a blog generator Gil Mizrahi
-
Learn You a Haskell for Great Good! by Miran Lipovača
-
Real World Haskell by Bryan O'Sullivan, Don Stewart, and John Goerzen
Java
- How to Design Classes by Matthias Felleisen, Matthew Flatt, Robert Bruce Findler, Kathryn E. Gray, Shriram Krishnamurthi and Viera K. Proulx [pdf]
JavaScript
-
Eloquent JavaScript by Marijn Haverbeke
-
Speaking JavaScript: An In-Depth Guide for Programmers by Dr. Axel Rauschmayer
-
Structure and Interpretation of Computer Programs — JavaScript Edition by
- Harold Abelson and Gerald Jay Sussman with Julie Sussman — original authors
- Martin Henz and Tobias Wrigstad with Julie Sussman — adapters to JavaScript
- Samuel Fang — designer and developer of this Interactive SICP JS edition
-
The Modern JavaScript Tutorial by Ilya Kantor
Lean
- Functional Programming in Lean by David Thrane Christiansen
Lisp dialects
Clojure
-
Babashka Babooka: Write Command-Line Clojure by Daniel Higginbotham
-
Clojure Concurrency Tutorial by Eric Normand
-
Clojure for the Brave and True by Daniel Higginbotham
Common Lisp
-
Learn Lisp The Hard Way by "the Phoeron" Colin J.E. Lupton
-
Practical Common Lisp by Peter Seibel
-
Successful Lisp: How to Understand and Use Common Lisp by David B. Lamkins
-
Typed Lisp, A Primer by Musa Al-hassy
Racket
-
A Functional Introduction To Computer Science by Prabhakar Ragde
-
Beautiful Racket by Matthew Butterick
-
How to Design Programs, Second Edition by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi
-
Programming Languages: Application and Interpretation by Shriram Krishnamurthi
Scheme
- Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Jay Sussman with Julie Sussman
Nim
- Computer Programming with the Nim Programming Language by Dr. Stefan Salewski
OCaml
-
OCaml Programming: Correct + Efficient + Beautiful by Michael R. Clarkson
-
Real World OCaml by Yaron Minsky, Anil Madhavapeddy and Jason Hickey
Pascal
- Modern Object Pascal Introduction for Programmers by Michalis Kamburelis
Prolog
- The Power of Prolog by Markus Triska
Pyret
-
Programming and Programming Languages by Shriram Krishnamurthi, Benjamin S. Lerner, Joe Gibbs Politz, Kathi Fisler
-
A Data-Centric Introduction to Computing by Kathi Fisler, Shriram Krishnamurthi, Benjamin S. Lerner, Joe Gibbs Politz
Python
-
30 Days Of Python by Asabeneh
-
Automate the Boring Stuff with Python by Al Sweigart
-
Composing Programs by John DeNero
-
Data Structures and Information Retrieval in Python by Allen B. Downey
-
From Python to Numpy by Nicolas P. Rougier
-
NumPy Illustrated: The Visual Guide to NumPy by Lev Maximov
-
Pandas Illustrated: The Definitive Visual Guide to Pandas by Lev Maximov
-
Practical Python Programming by David Beazley
-
Python Asyncio: The Complete Guide by Jason Brownlee
-
Python Design Patterns by Brandon Rhodes
-
Python for Data Analysis, 3rd edition by Wes McKinney
-
Scientific Visualization: Python + Matplotlib by Nicolas Rougier
-
Think Python, 2nd Edition by Allen B. Downey
Regular expressions
-
Implementing Regular Expressions by Russ Cox
-
Regular-Expressions.info by Jan Goyvaerts
Ruby
-
Building Games with DragonRuby by Brett Chalupa
Rust
-
A Gentle Introduction to Rust by Steve Donovan
-
Beginner's guide to Error Handling in Rust by Shesh Babu
-
Clear explanation of Rust’s module system by Shesh Babu
-
Effective Rust by David Drysdale
-
Exploring ways to make async Rust easier by Carl Lerche
-
Rust Atomics and Locks: Low-Level Concurrency in Practice by Mara Bos
Smalltalk
- Smalltalk Resources - A list of free smalltalk books.
Retrocomputing
-
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
-
MEGA65 Welcome Guide by Dan Sanderson
-
Michael Abrash’s Graphics Programming Black Book, Special Edition by Michael Abrash
-
Sinclair ZX Spectrum BASIC programming by Steven Vicker
-
The Lost Ways of Programming: Commodore 64 BASIC by Tomas Petricek
-
ZX Spectrum Next: Assembly Developer Guide by Tomaz Kragelj
Books by Fabien Sanglard
-
The Book of CP-System [pdf]
Reverse engineering
-
Applied Reverse Engineering Series by Daax Rynd, Aidan Khoury and Nick Peterson
-
Reverse Engineering for Beginners by Dennis Yurichev
-
Reversing for dummies - x86 assembly and C code by Sami Alaoui
Robotics
-
Introduction to Autonomous Robots by Nikolaus Correll, Bradley Hayes, Christoffer Heckman, and Alessandro Roncone
-
Modern Robotics: Mechanics, Planning, and Control by Kevin M. Lynch and Frank C. Park
-
Underactuated Robotics by Russ Tedrake
Text editors
Emacs
- Use GNU Emacs: The Plain Text Computing Environment by Keith Waclena
Vim
-
Interactive Vim Tutorial by Henrik Huttunen
-
Learn Vim (the Smart Way) by Igor Irianto
-
The Vi/Ex Editor by Walter Alan Zintz
-
Vim from the ground up by Matthieu Cneude
-
Vim Reference Guide by Sundeep Agarwal
Unicode
-
Programming with Unicode by Victor Stinner
-
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets by Joel Spolsky
-
Unicode programming, with examples by Joe Nelson
Version control tools
-
Git from the Bottom Up by John Wiegley
-
Learn the workings of Git, not just the commands by Andre Fachat
Web programming
-
A book about using Node.js by Mikito Takada
-
FastCGI — The Forgotten Treasure by Peter Simons and Ralph Babel
-
Learn CSS Layout the pedantic way by Mikito Takada
-
Single page apps in depth by Mikito Takada
-
The Flask Mega-Tutorial by Miguel Grinberg
Other
-
Computer Science from the Bottom Up by Ian Wienand
-
Explained from First Principles by Kaspar Etter
-
How These Things Work - a book about abstraction
-
The Computer Science Book by Tom Johnson
-
The Fundamentals of Control Theory by Brian Douglas
-
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.
Other lists
-
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.