This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
See also the general topics below, especially data structures and algorithms.
-
Game Programming Patterns (free book on some design patterns possibly useful in games)
-
Invent Your Own Computer Games with Python, Making Games with Python & Pygame (free books)
-
- A simple high-level explanation
- Evolve Your Hierarchy (one of the earlier mainstream ECS papers)
-
Constructive Solid Geometry (CSG) -- boolean operations on meshes
-
Fast Inverse Square Root -- famous algorithm for calculating
1 / sqrt(x)
, used heavily for vector normalization (originally for lighting in Quake III Arena) -
Fix Your Timestep! (or, how to do timesteps right. Read it.)
-
Red Blob Games (good visual resource on algorithms like A*, hexagonal grids, etc.)
-
Catmull-Rom splines (splines that pass through all control points; good for games)
-
Game AI
- Behavior Trees
- Boids (flocking behavior)
-
(How to Write a (Lisp) Interpreter (in Python)) (follow-up: (An ((Even Better) Lisp) Interpreter (in Python)))
-
Modern Compiler Implementation in ML (commercial book; variants in C and Java are available, but aren't as good)
-
Compilers: Principles, Techniques, and Tools (aka The Dragon Book)
-
Write You A Haskell (currently unfinished)
-
Official LLVM Tutorial (implements a compiler for a tiny toy language called Kaleidoscope); Haskell and OCaml versions also available.
-
Optimization
- Constant Folding (basic optimization by statically evaluating constants)
- Automatic Vectorization -- automatically convert scalar code to vectorized (SIMD) code
- Deforestation
- Dead Code Elimination (via control flow analysis)
-
Talks
- Growing A Language (by Guy Steele Jr. of Scheme fame, on the challenges of designing languages that can scale)
- Reverse Compilation Techniques (Cristina Cifuentes' rather in-depth thesis on decompilation)
- decomp
- Pratt parsers
- PEG grammars, Packrat parsers
- Top-Down operator precedence parsing
- Earley parsers
- Shunting-yard algorithm for easy infix expression parsing (infix to tree/prefix/postfix)
- Reverse Polish Notation
- Monadic Parsing in Haskell
- Introduction to Algorithms (also known as CLRS, a famous algorithms book)
- Big O in Plain English
- Boyer–Moore–Horspool algorithm (fast substring search, used notably in
grep
) - Knuth-Morris-Pratt Algorithm
- Burrows–Wheeler transform (decreases entropy in data reversibly, used notably in
bzip2
) - Huffman coding (tree for generating optimal prefix codes, used a lot in compression)
- Bucket Sort, Tree Sort, Radix Sort
- Pathfinding / Graph Searching
- Depth First Search, Breadth First Search (basic graph traversal algorithms)
- Dijkstra's Algorithm (general shortest-path pathfinding / graph traversal)
- A* (Dijkstra's algorithm with heuristics, very commonly used)
- D* Lite
- Jump Point Search
- Kruskal's Algorithm
- Prim's Algorithm
- Topological sorting (for ordering nodes in a graph based on dependents)
- Neural Networks and Deep Learning (free book)
- Creating A Genetic Algorithm For Beginners
- Bloom Filter
- van Laarhoven lenses (see the Haskell section on
lens
) - Purely Functional Data Structures (commercial book; extended from freely available thesis)
- Free Monads
- Spatial partitioning
- Quadtrees (2D), Octrees (3D)
- Bounding Volume Hierarchies
- Binary Space Partitioning (BSP)
- Tries
- Interval trees / Segment trees
- Blockchain 101 (a good video tutorial and demonstration of blockchains)
- Distributed Hash Table (self-explanatory; notably used in BitTorrent)
- Regular-Expressions.info (tutorial and reference)
- refiddle, regex101, regexpal (online regex testers)
- Implementing Regular Expressions
- Regular Expression Matching Can Be Simple And Fast in particular is well worth a read
- What Every Computer Scientist Should Know About Floating-Point Arithmetic HTML reprint / PDF
- http://0.30000000000000004.com
- http://floating-point-gui.de
- How To Write a Computer Emulator (older Emulation FAQ)
- GameBoy Emulation in JavaScript (a tutorial)
- Statically Recompiling NES Games into Native Executables with LLVM and Go (an attempt at statically recompiling NES binaries)
- NixOS (see also Nix, its more portable package manager) -- an OS built around Nix, a referentially transparent package manager. Allows you to build an entire OS setup around a single config file, with multiple profiles and no package dependency hell.
- MenuetOS -- fairly modern OS written in x86_64 assembly
- MINIX -- the teaching OS
- Harvard architecture, Modified Harvard architecture
- Stack machines (useful in programming language VMs or concatenative languages)
- Register machines
- Delay slots
- Branch Prediction
- x86 Assembly Wikibook
- x86 Instruction Set Reference
- [xchg rax,rax] -- interesting/clever x86_64 snippets
- SPIM (MIPS simulator; unfortunately no macros/pseudo-instructions)
- MARS (another MIPS simulator, more featureful but requires Java)
- Automate the Boring Stuff with Python (free book)
- Documentation
- GUIs
- Qt
- Tkinter
- GUIs
- Eloquent Javascript (free book)
- You Don't Know JS (series of free books)
- this
- Fetch API
- Typed Arrays for manipulating binary data / compact native arrays
- Web Storage, IndexedDB -- offline in-browser databases
- TextEncoder/TextDecoder APIs for text codecs
- asm.js -- a subset of JavaScript (statically type inferrable, no GC) targetted at efficient machine translation/compilation
- Web Assembly -- a text (S-expression based) and binary IR with goals similar to asm.js
- SIMD.js
- Emscripten, Cheerp -- C/C++/LLVM to JavaScript/asm.js/webasm compilers
- Ramda -- a library for functional programming in JavaScript; includes lenses, immutable data structures, and is generally much better than lodash.
- Learn You a Haskell for Great Good! (free book)
- Haskell Programming from First Principles (free book)
- Real World Haskell (free book)
- Introduction to Haskell
- Documentation for Prelude
- Stack (Package manager with stable package tree snapshots and sandboxing)
- Lenses
- lens library
- History of Lenses
- Lenses in Pictures (nice visual explanation)
- Functors, Applicatives, And Monads In Pictures (visual explanation of functors/applicative functors/monads)
- A History of Haskell: Being Lazy With Class (a history of Haskell)
- Philip Wadler's monad papers
- See the Purely Functional Data Structures and Free Monads sections in Data Structures above
- Recursive Functions of Symbolic Expressions and Their Computation by Machine (seminal LISP paper by McCarthy)
- Structure and Interpretation of Computer Programs (also known as The Wizard Book)
- Lambda Papers
- Racket Guide
- Realm of Racket (commercial book)
- Learn You Some Erlang for Great Good! (free book)
- Documentation
- Real World OCaml (free book)
- Documentation
- OPAM (Package Manager)
- Rust By Example (free book)
- Manual
- Documentation
- docs.rs (Third-party package documentation)
- git - the simple guide (simple intro to git)
- Pro Git (free book)
- Oh shit, git! (for when you inevitably mess up)
- Dark Patterns (sets of subversive and potentially malicious design patterns)
- Motherfucking Website -> Better Motherfucking Website -> Best Motherfucking Website
- How To Ask Questions The Smart Way
- On The Cruelty Of Really Teaching Computing Science (famous Dijkstra essay)
- Grace Hopper on Letterman
- The Cathedral and the Bazaar (free book/essay by Eric Raymond)
- The Jargon File