Tips for Self-Learning Programming
I'm often baffled by why it is that Programming is one of the very few (perhaps only) academic disciplines or technical proficiencies where learning without the assistance of another, more expert, human being is not only accepted, but encouraged.  I expect it's because we're a young discipline and there are enough people around who did teach themselves and aren't critical about whether they might have done better with a teacher.  While it's certainly possible to learn programming on one's own, that approach is fraught with the same problems that learning advanced maths, physics or martial arts on one's own would be: you're apt to  miss (or never even encounter) foundational ideas and techniques, develop idiosyncratic or even inappropriate approaches, be unfamiliar with key theory, etc.  My experience with several generations of programmers is that the self-taught can be excellent programmers, but they also tend to not play well with others, have difficulty integrating their code into larger projects, and sometimes wander off into territory (and algorithms) a more formally trained person would know to avoid.  They also have a lamentable tendency to reinvent the wheel, and to be unable to effectively argue for or against a particular approach on the basis of objective criteria.  So, while it's possible you're the Computer Science equivalent of Ramanujan, it's much more likely you're not.