For those like me, and like many in the UK, whose maths education ended at 16, I can definitely recommend Khan Academy for learning or relearning pre-calc stuff. The videos are short, the exercises are well thought out and numerous, and importantly the UI is great.
I remember looking at the site a few (maybe five?) years ago and everything was a bit of a mess. They've really pulled it together since then. It's really great.
Phew, that's an overwhelming list. A less exhaustive alternative that I recommend is https://teachyourselfcs.com. It's tailored to those who never studied CS in undergrad, like myself.
I wouldn't say this list is exhaustive, more like a good start. It's missing some of the breadth that you are likely to find in a good CS program. I'm not seeing much in the way of OS, networking, undergraduate machine learning, robotics, software engineering, or mobile application development. Adding the above topics would make this list more comprehensive.
I don't really see Abstract Algebra as a super relevant topic for modern computer science. I agree on Linear Algebra and basic abstract algebra (like group theory, cyclic groups etc, stuff needed for understanding topics like RSA), but stuff like Galois theory and other advanced topics are just not relevant. They still teach you a different way to think about problems (which is good) but rather belong into a math curriculum than a CS one.
I've gotten a lot of use out of group theory and lattice theory, and particularly semigroups and semilattices. What most programmers don't realize is that design patterns (a la Gang of Four), when they aren't working around a language's quirks, are implementing some algebra.
You know, I don't have any. It's something that I've thought about writing about for years now, but haven't gotten around to doing, and I'm unaware of anything else written about it.
Galois (finite) fields are very much relevant in error correction codes and cryptography.
Any time you want to manipulate bytes (or words) as numbers which you can add/subtract and multiply/divide you end up learning about finite fields. In fact, doing CRC or even XOR sums you are already making the first step towards the topic.
A recent problem I needed a solution for: given n blocks of data of equal length generate all possible XOR sums of the blocks in-place (no additional memory). The answer is an irreducible polynomial of degree n with a primitive root over GF(2).
Most people aren't building crypto, though (at least they really shouldn't be).
And maybe the answer found the problem you're describing, not the other way around. You were taught to look for and solve problems a certain way, so problems appear with those characteristics.
Required courses in the curriculum require MOOCs, but they include a lot of the same book resources as further reading topics. The community is quite active and has been happy to answer questions in chat.
For a couple years, I went the self study route, using online resources coupled with text books. Eventually though, I ended up taking a few distant learning courses and found the accountability (i.e. deadlines, homework assignments, exams) helpful, keeping motivated. And now, I'm taking the online CS master's program from Georgia Tech, the OMSCS program. I'm actually only in my first semester and loving it!
Still, I appreciate and love all the online material (that's free!) but I tend to operate better when I can 1) Collaborate with other students (and professors) 2) Have deadlines
You can get pretty far online only, but the networking opportunities even in a non-top school are worth every penny.
It's interesting finding a new job only to have existing classmates be excited for you to be there. Rumors begin spreading that you get shit done even quicker.
Can you elaborate on your background a bit, please? How did you satisfy the prerequisites of the program without a formal CS degree? I thought about applying myself but other than MOOCs and professional experience, I don't have much to show on a transcript.
I'm working on a course much less bulky than this one. Basically mixing the first two semesters of CS at any university with your standard bootcamp curriculum. I have a theory that teaching each concept in multiple languages side by side will be far more effective than other methods.
Not the first one, but it's still not a frequent occurrence.
(So let's use this as a reminder that the same applies for SciHub and scientific papers, with extra suggestion to use SciHub anyway, as researchers were most likely paid already from tax money anyway.)
For those who didn’t learn CS formally and taking this guide seriously: it seems too heavy on math and completely missing in many important areas IMO. Like - no sections for OS or networking?
I like the fact that this is out there for people to do. As someone doing a degree I dont have the time for it now, but will definitely check in on it if I have some time off!
For example: https://www.khanacademy.org/math/algebra/