* Foundations of Computer Science - http://infolab.stanford.edu/~ullman/focs.html
* Specifying Software: A Hands-On Introduction - https://www.amazon.com/Specifying-Software-Hands-Introductio... The name is a misnomer. See the ToC. This is actually a practical introduction to CS theory.
Classic Computer Science Problems in Python
You can do it for free (or pay to get academic credit). I haven't yet managed to start the course.
- Linear algebra (fischer's book)
- analysis (koenigsberger's book)
- discrete maths (zorich's books)
- probability theory (all of stats - wassermann)
- parallel programming (A minicourse on multithreaded
programming Charles E. Leiserson, Harald Prokop.)
- algorithms and datastructures (Widmayer's book)
- systems (Computer Systems: A Programmer's Perspective" (3rd Edition) by R. Bryant and D. O'Hallaro)
- network (Computer Networking: A Top-Down Approach, James F. Kurose and Keith W. Ross)
- numerical methods
- data modeling and dbs
- formal methods and functional programming (Miran Lipovača. Learn you a Haskell for great good!)
(eth zurich's bachelors)
All the books are one google search away.
If you want to prove protocols correct, sure, but for someone wanting to move from knowing something about programming to something more, this is not one of the first (20) steps I would recommend.
So, here are a few reasons that recommend learning TLA+:
* If you already know how to program, you can learn it pretty quickly; almost certainly in less than a month. Just use TLC as a highly responsive yet infinitely patient teaching assistant.
* Once you learn TLA+, you’ll not only find it easier to think about systems and algorithms, but you’ll also have more opportunities to practice since you just need pencil and paper. I find myself doodling in TLA+. I'll even go so far as to say that TLA+ has a Tetris Effect.
* This is probably true of most esoteric technologies, but since TLA+ is pretty obscure, the community is still in that sweet spot that is the intersection of smart and friendly. Lamport answers questions in the mailing list.
* Just my opinion, but TLA+ (or something very much like it) is part of the future of CS pedagogy.