Eventually I plan on going back to a real University and getting a CS degree
Here's a shortcut to going to a real university. Go to the courses' websites, read the lectures and do the homeworks. If you can find a course where lectures have been recorded (video, or even audio), so much the better. Chances are you'll find this approach easier to follow and stick with than working through a book. These lectures have been specifically designed to feed students knowledge in 45-90 minute chunks, and assignments have been designed to reinforce the lectures contents without overwhelming the students. I'm partial to CMU CS course structure, which basically is:
1. Intro to programming (basic Java/C++ course: principles and syntax)
2. Intro to Data Structures and Algorithms (some theory, mostly programming in imperative languages -- C++ or Java)
3. Advanced Data Structures and Algorithms (more theory, but mostly programming in functional languages -- ML)
4. Systems level programming (systems concepts -- memory, cache, page tables, etc; programming -- C and assembly)
5. Algorithms (CS theory, almost no coding)
I think you can safely skip 1 and 4, and even 3, to get CS fundamentals that would carry you far in enterprise-level programming world.
Here are materials you could start using immediately:
Here's a shortcut to going to a real university. Go to the courses' websites, read the lectures and do the homeworks. If you can find a course where lectures have been recorded (video, or even audio), so much the better. Chances are you'll find this approach easier to follow and stick with than working through a book. These lectures have been specifically designed to feed students knowledge in 45-90 minute chunks, and assignments have been designed to reinforce the lectures contents without overwhelming the students. I'm partial to CMU CS course structure, which basically is:
1. Intro to programming (basic Java/C++ course: principles and syntax)
2. Intro to Data Structures and Algorithms (some theory, mostly programming in imperative languages -- C++ or Java)
3. Advanced Data Structures and Algorithms (more theory, but mostly programming in functional languages -- ML)
4. Systems level programming (systems concepts -- memory, cache, page tables, etc; programming -- C and assembly)
5. Algorithms (CS theory, almost no coding)
I think you can safely skip 1 and 4, and even 3, to get CS fundamentals that would carry you far in enterprise-level programming world.
Here are materials you could start using immediately:
Data/Algo 1:
lectures: http://www.andrew.cmu.edu/course/15-200/s06/index/lecture_in...
assignments: http://www.andrew.cmu.edu/course/15-211/hw.html
Data/Algo 2:
lectures: http://www.cs.cmu.edu/~me/212/schedule.html
assignments: http://www.cs.cmu.edu/~me/212/assignments.html
Algorithms
assignments, tests and lectures: http://www.cs.cmu.edu/afs/cs/academic/class/15451-s10/www/
And finally trying to memorise all those linux commands I ALWAYS forget.
Make a Linux box your primary computer at home (if you aren't allowed to do it at work). You'll be surprised how quickly you'll memorize them.