I'd suggest a slightly different approach, being one of those who came to field non-professionally -- learn the same fundamentals a school would require of a CS student:
Logic
Finite Mathematics
Operating system design -- not the MS "Windows XXX" kind, but the real nuts and bolts stuff
The list could go on, but you begin to see that you're "re-loading" your problem-solving toolkit with some different basic items. These will help you approach programming problems differently.