I’d recommend CS 61a/b/c from UC Berkeley. I think it’s available online as well. The reason I like these three courses is that they cover the three key aspects of computing — programming, data structures, and machine structures. I find that the last part is often left out because we “abstract” away low level features of computers, but learning even the basics of page tables, caches, instruction sets, timing, etc. is extremely critical to a complete understanding of what’s going on.