I've been doing professional software development for 10 years but his explanations finally made some very basic things click like they haven't ever before.
The issues in compiler construction and optimization are orthogonal to those observed in designing programming languages, type systems, theorem provers etc.
Systems will be a better idea, or its own category.
For those that dont know: Maarten van Steen worked directly with Andy Tanenbaum and IMO he was one of the best if not the best teachers at my uni.
There are many other universities on it as well that I normally don't see. It would be amazing to see if more people have recommendations from lesser known online courses.
Being on GitHub, this is probably a problem that could resolve itself with some PRs.
I am still afraid of calculus..
The type of math you need for CS should not be too difficult after you get some intuition in programming.
In combinatorics, for example, you just need a clear head to think through the cases, just as you would do when writing a program.
* Discrete Mathematics
* Linear Algebra
* Number Theory
* Introductory Real Analysis or "Calculus 1"
* Probability Theory
This will prepare you to be a general purpose CS professional. Further specialization will likely require some additional high level topics used in your field.
Discrete Maths / Combinatorics : Probably everywhere.
Linear Algebra : Machine Learning, Computer Graphics, Computational Geometry, etc.
Number Theory : Cryptography.
'Calculus 1' : Useful to know for 'maturity', you will likely not use it unless you implement numerical algorithm libraries.
Probability / Statistics : Heavily in Machine Learning and related fields, in small doses everywhere else just because you need to be able to create useful observations and presentations.
I would add another branch:
Logic : If you work with programming languages or verification.
Also, for PLT level stuff, I would say being gifted just makes grasping theory easier, but it's hardly essential.