So I'm an undergrad doing B.Sc and I am majoring in Electrical Engineering. I am quite interested about computers but my coursework will never give enough (at least not as much as the computer majors). I want to though, learn about computers. I have pretty good idea about the hardware, but I'm not that good on the software part. I have patience, time and a lot of interest to learn about computers (yes, my main goal is to use image processing on the robots I am planning to make :-P). But I don't just want to implement stuff, I want to learn from the bottom working my way up to more advanced stuff. Recently I've been trying to implement USB communication with microcontrollers. I can practically program the microcontrollers myself, I don't don't understand anything on the PC side (libusb, USB drivers... huh?) . I did learn a little C programming on my freshman year, and I wasn't only good at it, I loved it. I got up to files and structures but that was about it. I have the very basic knowledge of OOP, but I'm not that much comfortable with it yet. So if anyone can tell me where I can start, it would be really really helpful. A list of what I should learn and on what order would be extremely appreciated. And I won't skip to the last bit either, I promise.