I have been working in software industry for 9 years now, the first four as a
sysadmin and the last 5 as a software developer. I have been very lucky
to work remotely, first in Italy and now in Thailand, for an awesome company
(Cycle Computing). I am stereotypical of many modern developers in that I am
very knowledgeable about the tools I use but weak in CS fundamentals. I know
that these fundamentals aren't essential to working in this field but IMO they
make a huge difference in what kinds of problems you can solve and how well you
can solve them.<p>I want to embark on a very specific self-study course to acquire these
fundamentals. The irony here is that I actually have a B.A. in
Computer Science. I changed my major to CS midway through my junior year of
university and took all of my CS courses in a mad rush before my university
scholarship ended. I enjoyed these courses but my retention (and grades) were
fairly poor.<p>I have looked at online master's degrees for CS and by and large they don't
address my weak fundamentals and they are also quite expensive. I am currently
looking at MOOC courses.<p>These appear to be the most essential courses:<p>* Computer Architecture<p>* Algorithms and Data Structures - this could be even 2 or 3 separate courses<p>* Probability and Stats for Engineering<p>optional:<p>- Cryptography<p>- Compilers<p>- Computer Networks<p>- Operating Systems<p>- Machine Learning/AI<p>Which courses do you think would help me best achieve my goals? Also, I would
very much appreciate your recommendations for the online courses that best
address them. The prioritization of these courses is pretty critical because I
will have at most 15 hours a week for self-study.<p>Thanks in advance for your help!