Foundational knowledge for programmers
Foundational knowledge is very different from basic knowledge : if you're a newcomer in the field, it may not be the shortest path to become "job-ready"... but what you'll learn here will last your life long !

Feel free to contribute if you know some great resources that fits the definition above.
Computer Science
General
Programming Language Theory
- Software Foundations in Coq by B. Pierce (website)
- Programming Language Foundations in Agda by P. Wadler
(book)
(repo)
Category Theory
Type Theory
Proof Theory
Misc
Programming paradigms
General
Functional
- Erik Meijer: Functional Programming
(video)
Imperative
- Programming from the ground up by Jonathan Bartlett
(book)
Actor Model
- Hewitt, Meijer and Szyperski: The Actor Model (everything you wanted to know...
(video)
Software Architecture
General
Distributed Systems Design
- Time, Clocks, and the Ordering of Events in a Distributed System
(article)
- The TLA+ Video Course by Leslie Lamport
(course)
Computer Architecture
- Computer Architecture (ETH Zürich)
(video playlist)
- Programming from the ground up by Jonathan Bartlett
(book)
Algorithms & Data structures
- Analysis of Algorithms by Steven Skiena
(video playlist)
- Purely Functional Data Structures by Chris Okasaki
(book)
- The Algorithm Design Manual
(💲 book)
Data Science
Linear Algebra
Discrete Mathematics
- Notes on Discrete Mathematics (Yale)
(pdf)
Calculus
- Introduction to Calculus
(pdf)
Machine Learning and Deep Learning
- Mathematics of Machine Learning (MIT)
(pdf)
- The Matrix Calculus You Need For Deep Learning (University of San Francisco)
(pdf)
- Deep Reinforcement Learning (Berkeley)
(video playlist)
- Convolutional Neural Networks for Visual Recognition (Stanford)
(video playlist)
- Natural Language Processing with Deep Learning (Stanford)
(video playlist)
Networking
Cryptography