Potential /g/ cs canon, by anon, copy and pasted by another anon:
Not a great list. Lots of redundancy, and many of those textbooks do only a few things right. Some a great though. It's another /sci/ meme list. Here's a better core list, which I'll supplement with an electives list:
math primer
calc 1-3 from your favorite calc book or Early transcendentals
Probability theory from Ross, Rozanov, or Jaynes
intro CS and programming
pick an easy language like python, use MIT OCW or something similar and follow through, and try and automate simple tasks by breaking them down into simpler things you can handle.
use SICP if you want to go classic, great text
data structures
CLRS first 3 chapters, MIT OCW class, teacher webpages
intro proofs
polya
first 3 chapters of concrete mathematics by Knuth
linear algebra by Hoffman and kunze (important!)
algorithms (core)
later chapters of CLRS, MIT OCW Demaine's in both core and advanced algos
architecture
Berkeley has some good comp architecture webpages, use computer systems: a programmer's perspective as referetemsnce but focus on projects and class slides
systems
continue from above, Stanford is also a good resource
OS design
use Stanford's pintOS as a standard to recreate
operating systems: 3 easy pieces is a great and free reference for design ethos
language theory
programming language pragmatics
Pierce's types and programming languages book
compiler (design)
the dragon book
engineering a compiler
(cont)
Theory electives
math
lmao at this point, you could substitute most of upper div math for relevance. But here are a few important ones:
Artin's algebra up to Galois theory
Stanley or Van-List and Wilson for combinatorics (looks easy but insanely hard)
Diestel or Bollobas for graph theory
Enderton's logic for an easier intro, Shoenfield for something more hardcore
I'd recommend doing something like Abbot's Understanding analysis or baby Rudin if you're serious about theory - the basic forms of reasoning about analytic structures shows up more than you'd imagine. But the same could be said about anything if you care about theory - Erickson himself studies topology in CS.
If you care at all about graphics, use CMU and Stanford webpages alongside Milnor if you're brave.
randomized algorithms
http://wwwusers.di.uniroma1.it/~ale/Papers/master.pdf is a fucking amazing resource. You will eventually want to learn measure theory if you want to do ML or learn probability proper
For algorithms: Motwani's book is classic
really just go to cstheory stackexcahnge and look for posts about bandits, juntas, or randomized algos to get good references
ML theory
This is where all that linear algebra and real analysis above pays off
https://cs.nyu.edu/~mohri/mlbook/
http://www.cs.cornell.edu/courses/cs6783/2015fa/
Use Ben-David and Schwartz's book if you aren't too hot on the sources above
category theory
Tackle this ONLY when you have done at least algebra first. For a gentle introduction:
https://unglueit-files.s3.amazonaws.com/ebf/e90890f0a6ea420c9825657d6f3a851d.pdf
For the classic, heavy introduction, use MacClane's book.
(cont)
(cont)
languages, compilers, and types
http://www.paultaylor.eu/stable/Proofs+Types.html
Gallier's logic book has great chapters in the latter half about proof systems
https://github.com/HoTT/book/wiki/Nightly-Builds
What other than the HoTT book lmao, if you want to learn type theory. Warning: you should eventually be comfortable with algebraic topology.
optimization theory
The blue convex optimization book is amazing
Learning about semidefinite programs and conic programming is important in that field.
quantum computing
Where to fucking begin lol? Neilsen and Chung is a good introduction, and Kitaev's book is really good, but every topic in quantum computing is its own topic. Watrous's Quantum Information book is fucking amazing too, if dry
Systems
Lmao I don't know that much about advanced systems that fits into a formal prerequisite structure. I'm admittedly not as strong here as I ought to be. What you should do though is:
- I personally think no CS education is complete without at least 3 semester of intro physics, up to basic circuits, intro electrodynamics, etc. this is up to taste
- learn properly about signals. You should learn more about waveforms, wavelets, etc., in their analog setting of course. There are many EE books on that, but I think coming as a CS student, you'll have a great entry from "Digital Signal Processing: A Computer Science Perspective." It's an absolutely wonderful text that dips you into EE topics from CS.
- learn about parallelization. Hromkovic's book is decent, and there's good EE literature about this too
- there are great EECS webpages about embedded programming and similar topics, be sure to understand DLD and signal processing first, alongside some more complicated circuit tricks!
- honestly I hated every distributed systems and algorithms book I started, so just use teacher webpages
(cont)
(cont)
- get more comfortable with cache schemes and FPGAs. I'm not kidding, 70% of systems research is either adding a new cache in a clever way, virtualizing memory differently, or using an FPGA cleverly. And it werks - nvidia and AMD both regularly use research from this area in their technology.
ML implementation
there are lots of easy resources on this, and lots of libraries that exist. I'd say focus on core ML from the theory and understanding popular models - the combo of knowing them and why they work is more invaluable than you think.
graphics
really it comes down to following what the CMU and Stanford graphics curricula are doing. Their differential geometry and implementation heavy courses are pretty good on the topic. The math is really what sets this topic apart, since for graphics, you have to be both good at cleverly using differential geometry and classic algorithms as well as actually implementing them at the low level.
robotics
http://www.inventus.org/posterous/file/2012/04/8971919-mls94-complete.pdf
Nothing can really replace practical work with robotics though, so be sure to get a lot of that alongside this book, which is a great intro.
Also, going back to theory
analytic combinatorics
this is a wonderful higher level book in analysis of algorithms, but you better be very comfortable with real analysis, at least some complex analysis, enumerative combinatorics, etc. it's a super powerful tool (you can analyze everything from problems in chemistry to physics to EE to theoretical CS using the theory) but it's a heavy bar to entry.
I left out stuff about formal verification, HCI, some ML, software development, etc., but all in all, this is my attempt at a tryhard list at a proper CS education that's suited to make either a qualified, proper engineer who deserves that title, or a qualified researcher in whatever topic in CS they please.
For the bare minimum, I suggest doing only up to the first algos section.