Computer Science Resources
While studying Computer Science, I have accumulated resources on important fields in the form of books, papers, video recordings of the lectures, blog posts and podcasts. I used them as references (e.g. whenever I encountered a task in the corresponding field) and studied parts of them but (because I studied Physics and Mathematics at the university, not Computer Science) never had a chance to study them in depth. Bookmarks, book names and vague recollections of State-of-The-Art knowledge references were scattered across my Goodreads, YouTube, Notion lists until I decided to compile a single list and go through the resources one by one. I thought enumerating those and getting a complete list of great work might also be useful to the others. Since studying those is a serious work, it might take years to carefully study the subjects presented in the collection but all those topics are extremely exciting and certainly worth investing time into for anyone doing Software Engineering.
Unlike other lists with CS resources, mine does not focus on a particular feature of listed readings (e.g. being free, as in ossu/computer-science curriculum), nor does it try being a "complete" curriculum. I have divided the collection into two parts:
- The Fundamentals (the list below) is the "short" list of "classic" resources get I get recommended the most by wonderful engineers I have a chance to talk to. It focuses on the most important strategic concepts in the field and strives to give a good overview of the basics one needs to master to work in that field.
- Further Reading contains more links to short blog posts, articles from the internet, more specific resources. This list contains more of the resources I found myself while browsing the internet and found useful at some point.
This collection is also inspired by (and to some degree based on) erikgrinaker/readings.
Algorithms and Data Structures
-
📖 Introduction to Algorithms ("CLRS" — Cormen, Leiserson, Rivest, Stein, 2001) -
📖 The Algorithm Design Manual (Skienna, 2020) -
📖 The Art of Computer Programming by Donald Knuth -
🔗 CP-Algorithms — a translation of e-maxx (a Russian resource on Competitive Programming algorithms)
Distributed Systems
-
🎥 MIT Distribtued Systems (2020) -
🎥 Distributed Systems lecture series from Cambridge (shorter videos with the core concepts, 2020) -
📖 Distributed Systems: Principles and Paradigms (Tanenbaum, 2006) -
📄 The Anatomy of a Large-Scale Hypertextual Web Search Engine ("The Google Paper", Brin, Page, 1998) -
📄 The Google Filesystem (2003) -
📄 MapReduce: Simplified Data Processing on Large Clusters (Jeffrey Dean and Sanjay Ghemawat, 2004) -
📄 The Chubby lock service for loosely-coupled distributed systems (2006) -
📄 Dremel: Interactive Analysis of Web-Scale Datasets (2010) -
📄 The Byzantine Generals Problem (Lamport et al., 1982) -
📄 The Part-Time Parliament ("The Paxos Paper", Lamport et al., 1998) -
📄 In Search of an Understandable Consensus Algorithm ("The Raft Paper", 2014)-
🔗 raft.gitghub.io
-
Databases
-
🎥 CMU's YouTube Channel- Andy Pavlo's Intro to Database Systems, (2019, lectures + assignments)
- Andy Pavlo's Advanced Database Systems (2020, lectures + assignments)
- Quarantine Database Talks (2020)
- Vaccination Database Talks (2021)
- Vaccination Database Talks: Second Dose (2021)
-
📖 Designing Data Intensive Applications (2015) -
📖 Architecture of a Database System (2017) -
📖 Readings in Database Systems ("The Red Book") -
📄 A Case for Redundant Arrays of Inexpensive Disks (RAID) (Patterson, 1988) -
📄 Bigtable: A Distributed Storage System for Structured Data ("The Bigtable Paper", 2006) -
📄 Spanner: Google's Globally-Distributed Database ("The Spanner Paper", 2012) -
📄 F1: A Distributed SQL Database That Scales ("The F1 paper", 2013)
Programming Languages
C++
-
📖 Effective C++ series by Scott Meyers -
📖 The C++ Programming Language (Stroustrup, 2013)
Functional Programming
-
📖 Learn You a Haskell For Great Good (2011) -
📖 Category Theory for Programmers (2018)
Rust
-
📖 The Rust Programming Language — the official Rust introduction book
Go
-
📖 The Go Programming Language (2015)
Systems Programming (Operating Systems, Low-Level Primitives, Hardware)
-
🎥 Onur Mutlu lectures- Digital Design and Computer Architecture ("How Computers Work from the ground up", ETH Zurich 2020)
- Computer Architecture lectures (ETH Zurich 2019)
- Computer Architecture lectures at (CMU 2015)
-
📖 Computer Architecture (Hennessy and Patterson, 2006) -
📖 Modern Operating Systems by Tanenbaum (2001) -
📖 The Elements of Computing Systems: Building a Modern Computer from First Principles ("From NAND to Tetris") -
📖 Reverse Engineering for Beginners -
📖 The Little Book of Semaphores -
📖 The UNIX Programming Environment by Kernighan, Rob Pike
Compilers
-
📖 Compilers: Principles, Techniques, and Tools ("The Dragon Book") by Aho, Sethi, Ullman (1986) -
📖 Crafting Interpreters (2021) -
📖 Structure and Interpretation of Computer Programs ("SICP", 1996)
Networking
-
🎥 Introduction to Computer Networking (2019) -
📖 The Protocols (TCP/IP Illustrated) (1993)
Machine Learning
-
🎥 Natural Language Processing (Chris Manning at Stanford, 2019) -
📖 Artificial Intelligence: A Modern Approach (Russel, Norvig, 4th Edition 2021) -
📖 Reinforcement Learning, an Introduction (Richard Sutton, 2018) -
📖 Deep Learning (Ian Goodfellow, Yoshua Bengio, 2016) -
📖 Probabilistic Machine Learning: An Introduction (Murphy, expected 2022) -
📖 Probabilistic Machine Learning: Advanced Topics (Murphy, expected 2022) -
📖 Introduction to Information Retrieval (Chris Manning, 2008)
Distributed Systems
-
🎥 MIT Distribtued Systems (2020) -
🎥 Distributed Systems lecture series from Cambridge (shorter videos with the core concepts, 2020) -
📖 Distributed Systems: Principles and Paradigms (Tanenbaum, 2006) -
📄 The Byzantine Generals Problem (Lamport et al., 1982) -
📄 The Part-Time Parliament ("The Paxos Paper", Lamport et al., 1998) -
📄 Brewer's conjecture and the feasibility of consistent, available, partition-tolerant web services ("The CAP Theorem" proof, 2002) -
📄 In Search of an Understandable Consensus Algorithm ("The Raft Paper", 2014)-
🔗 raft.gitghub.io
-
-
📄 The Google Filesystem (2003) -
📄 MapReduce: Simplified Data Processing on Large Clusters (Jeffrey Dean and Sanjay Ghemawat, 2004) -
📄 The Anatomy of a Large-Scale Hypertextual Web Search Engine
Miscellaneous
-
🎥 Performance Engineering of Software Systems (MIT, 2018) -
📖 Concrete Mathematics: A Foundation for Computer Science (Graham, Knuth, Patashnik, 1994) -
📖 Code Complete (2004) -
📖 Clean Code: A Handbook of Agile Software Craftsmanship (2008) -
📖 Domain-Driven Design (2003) -
📖 Test-Driven Development (2002) -
📖 Quantum Computing for the Very Curious (2019) -
📖 The Pragmatic Programmer (2019)