Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Self taught programmer, now wanting to learn more about CS theory
77 points by _u5xo on Nov 12, 2019 | hide | past | favorite | 18 comments
Please show me the best free / online courses to allow me to gain a further understanding of CS theory and other closely related theory (Maths, cryptography, etc). If this has been asked before or something similar please link. Thanks.

Two books (get used copies for cheap);

* 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.

Pretty cool that the authors on the Foundations of Computer Science make the chapter PDF's available free since it is no longer in production. Just skimming through parts of it, definitely seems like a good learning resource.

This is one of the best resources in the context of the questions.

My current favorites:


Grokking Algorithms

Classic Computer Science Problems in Python

+1 for Grokking Algorithms!

This was recommended to me:


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.

I'm really enjoying Types and Programming Languages right now. Imagine that rather than explaining typing using metaphors (a useful activity), people started at a much lower level and built up from there. That's this book!


TLA+. This will make you a better programmer.


TLA+ and similar tools are certainly interesting but hardly something I could recommend as an early step to take for someone wanting to learn more about CS.

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.

I get what you mean, but it’s worth remembering that TLA+ is a language that is designed foremost for thinking about CS stuff, and at the end of the day, it’s “just” an improved notation for mathematics (particularly the kind of math that’s relevant for describing systems). In fact, Lamport didn’t even believe it was possible for TLA+ to practically run on a computer when he invented it (someone else did TLC).

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[1].

* 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.

[1] https://en.wikipedia.org/wiki/Tetris_effect

I really enjoyed this one too!

How to Design Programs


It's more like an opposite - learn programming for CS people :)

go to edx.org and take cs50 from Harvard University

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact