1. Algorithms & Data Structures <- The biggest one
2. Baremetal Hardware. ASM, goes into the design of a physical cpu with ALUs, etc. Sometimes you make your own basic CPU. I suggest using a course with ARM ASM, simpler than x86 ASM.
3. Operating Systems & Multithreading Theory. You usually do a bunch of C language work here. Maybe combine it with a project on an ardunio or similar.
4. Discrete Mathematics
5. Databases
6. (Optional) Compilers. Write your own compiler, do this after the ASM course.
7. (Optional) Artificial Intelligence. Learn cool things such as machine learning. AI can be very statistical at times, so I suggest adding a Statistics & Probability course to supplement. Statistics is used a lot in business, so it's useful to know for life in general.
8. (Optional) Computer Graphics, using OpenGL!
On top of that I suggest you learn a functional language like Clojure or Haskell. Or both of them. Also learn a language where you have to do memory management and deal with pointers (like C, C++, Objective-C) if you don't include it in your Operating Systems course. After that you can basically do anything in software. Any new language and platform will be just covering concepts you already understand at that point, so you'll be able to learn them extremely quickly.