If you’re interested in joining or starting a project at Exohood Labs, we have links to resources on coding, math and science.
Table of contents
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
- Deep Learning by Ian Goodfellow, Yoshua Bengio and Aaron Courville
- Deep Learning Interviews Second Edition by Shlomo Kashani
- Dive into Deep Learning Compiler
- 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
Computer Games AI
- Game AI Pro by Steve Rabin
- Programming Starcraft AI by Peter Kis
Algorithms
- Algorithms by Jeff Erickson
- Algorithms for Optimization by Mykel J. Kochenderfer and Tim A. Wheeler
- Algorithms for Modern Hardware by Sergey Slotin
- The Arcane Algorithm Archive
- Competitive Programming Algorithms
- 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
Command line and tools
- Curl Cookbook
- 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
Compilers and Interpreters
- 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
- Part 1: Introduction, selecting a language, and doing some planning
- Part 2: A lexer
- Part 3: A parser
- Part 4: Testing
- Part 5: A code generator
- Part 6: Input and output
- Part 7: Arrays
- Part 8: Strings, forward references, and conclusion
- Make A Language – A series about making a programming language called Eldiro using the Rust programming language.
Computer Graphics
- 3D Game Shaders For Beginners
- 3D Math Primer for Graphics and Game Development by Fletcher Dunn and Ian Parberry
- A Primer on Bézier Curves
- Computer Graphics from Scratch by Gabriel Gambetta
- Curves and Surfaces by Bartosz Ciechanowski
- GPU Gems Books Series
- GPU Gems
- GPU Gems 2
- GPU Gems 3
- 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 Computer Graphics From Scratch
- Learn OpenGL by Joey de Vries
- Probability Theory for Physically Based Rendering by Jacco Bikker
- Part 1
- Part 2
- The Book of Shaders by Patricio Gonzalez Vivo and Jen Lowe
- Vulkan Guide
- Vulkan Tutorial by Alexander Overvoorde
- WebGL2 Fundamentals
Ray Tracing
- How to build a BVH by Jacco Bikker
- NVIDIA Vulkan Ray Tracing Tutorials
- 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
- Vulkan Raytracing Tutorials
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
- Computer Network Tutorials
- 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
- Practical Cryptography for Developers by Svetlin Nakov
Databases
- The Theory of Relational Databases by David Maier
Design Patterns
- 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
- The Architecture of Open Source Applications
Distributed systems
- Testing Distributed Systems – Curated list of resources on testing distributed systems by Andrey Satarin.
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
- Reverse engineering the rendering of The Witcher 3
- Scroll Back: The Theory and Practice of Cameras in Side-Scrollers by Itay Keren
GUI Programming
Hardware
- Modern Microprocessors: A 90-Minute Guide! by Jason Robert Carey Patterson
- Processor Design: An Introduction
Logical Games
- Hex: A Strategy Guide by Matthew Seymour
Math
- A Gentle Introduction to Tensors by Boaz Porat
- A Programmer’s Introduction to Mathematics by Jeremy Kun
- An Infinitely Large Napkin by Evan Chen
- Approved Textbooks of the American Institute of Mathematics
- Book of Proof, Third Edition by Richard Hammack
- Books by Dr. Kenneth Kuttler
- Calculus Made Easy by Silvanus P. Thompson
- Euclid’s Elements
- Paul’s Online Math Notes by Paul Dawkins
Algebra
- Algebra: An Elementary Text-Book by George Chrystal
- 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
- 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
- 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
Theoretical Computer Science
- Foundations of Computer Science by Alfred V. Aho and Jeffrey D. Ullman
- Introduction to Theoretical Computer Science by Boaz Barak
Multithreading and Concurrency
- 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
- 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
- The Linux Documentation Project
- Writing a Simple Operating System — from Scratch by Nick Blundell
- Writing an OS in Rust by Philipp Oppermann
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
- The Feynman Lectures on Physics
Programming languages
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!
- Part 0 – Setup and First Steps
- Part 1 – Metaprogramming in Flat Assembler
- Part 2 – We’re Writing a Virtual Machine
- Part 3 – Arithmetic and Logic
- NASM Tutorial
Basic
C
- Coroutines in C by Simon Tatham
- How Does a C Debugger Work?
- The Lost Art of Structure Packing by Eric S. Raymond
- Unicode programming, with examples by Joe Nelson
C++
- Awesome Modern C++
- Beginner’s Guide to Linkers by David Drysdale
- Hacking C++
- 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
- Microsoft C++ language documentation
- Performance Analysis and Tunning on Modern CPUs by Denis Bakhvalov
Clojure
- Clojure Concurrency Tutorial by Eric Normand
- Clojure for the Brave and True by Daniel Higginbotham
Common Lisp
- Practical Common Lisp by Peter Seibel
- The Common Lisp Cookbook
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 You a Haskell for Great Good! by Miran Lipovača
- Monday Morning Haskell
- Real World Haskell by Bryan O’Sullivan, Don Stewart, and John Goerzen
JavaScript
- Eloquent JavaScript by Marijn Haverbeke
- The Modern JavaScript Tutorial by Ilya Kantor
Nim
- Computer Programming with the Nim Programming Language by Dr. Stefan Salewski
OCaml
- Real World OCaml by Yaron Minsky, Anil Madhavapeddy and Jason Hickey
Pascal
- Modern Object Pascal Introduction for Programmers by Michalis Kamburelis
Pyret
Python
- Automate the Boring Stuff with Python by Al Sweigart
- Composing Programs by John DeNero
- Learn Python the Right Way
- Scientific Visualization: Python + Matplotlib by Nicolas Rougier
Racket
- Beautiful Racket by Matthew Butterick
- How to Design Programs, Second Edition by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi
Regular expressions
- Implementing Regular Expressions by Russ Cox
- Learn RegEx step by step, from zero to advanced
- RegexOne
- Regular-Expressions.info by Jan Goyvaerts
- Rex Eats Regular Expressions for Breakfast
Rust
- A Gentle Introduction to Rust by Steve Donovan
- Exploring ways to make async Rust easier by Carl Lerche
- Rust Language Cheat Sheet
- Things you can’t do in Rust (and what to do instead)
Scheme
- Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Jay Sussman with Julie Sussman
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
- The Lost Ways of Programming: Commodore 64 BASIC by Tomas Petricek
- Z80 User’s Manual
Reverse engineering
- Reverse Engineering for Beginners by Dennis Yurichev
- Reversing for dummies – x86 assembly and C code by Sami Alaoui
- Linux Reverse Engineering CTFs for Beginners
Robotics
- Modern Robotics: Mechanics, Planning, and Control by Kevin M. Lynch and Frank C. Park
- Underactuated Robotics by Russ Tedrake
Text editors
- Build Your Own Text Editor
- Learn Vim (the Smart Way) by Igor Irianto
- The Vi/Ex Editor by Walter Alan Zintz
- Vim Reference Guide by Sundeep Agarwal
Version control tools
- Git from the Bottom Up by John Wiegley
- Learn the workings of Git, not just the commands by Andre Fachat
Emulators and Virtual Machines
- Write your Own Virtual Machine
- Writing NES emulator in Rust by Rafael Bagmanov
Web programming
- Intro to Web Dev
- FastCGI — The Forgotten Treasure by Peter Simons and Ralph Babel
Other
- Beej’s Guides
- Computer Science from the Bottom Up by Ian Wienand
- How These Things Work – a book about abstraction
- Memory Management Reference
- Teach Yourself Computer Science
- 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.