I found this interesting question on Quora ( http://www.quora.com/Computer-Programmers/What-skills-do-self-taught-programmers-commonly-lack ).
I, personally, am a self-taught programmer. I've no background for formal CS Studies at University. I've no knowledge about Algorithms, Data Structures and Design Patterns, Compilers etc.
I always feel there's a need to know such topics to become better a better programmer. If so, how can I pursue such topics ? Do I have to go back to University and attend a CS degree ? Or take online courses (and which?) Where do I start ?
Read those. After that? Stop worrying about it. You're not inferior to a CS Major, nor are you less capable. Whatever it is you want to work on, start working on it and don't stop. Reading about algorithms and data structures and design patterns is all great, and can help you a lot- but remember, it's pointless to try and prove you're the equal to someone who has a piece of paper. Instead, make things. Make the best things. Work for a company that inspires you. Work on problems that interest you.
You'll learn what you need to along the way. You're feeling imposter syndrome, and let me tell you- you're not doing yourself any favors pushing yourself to feel that way. Learning is great, but do it for a specific purpose, not to attain some status.