Being self taught, one of the major revelations I had was that the more I tried to teach myself, the more I realized I knew just a FRACTION of what it took to become a good developer. In the beginning when I thought I understood what i was doing, writing oop programs, when in fact I was writing procedural code with objects scattered around it. Regular Expressions were (to me) among the arcane arts known by masters, engines were something to be licensed from those same masters, and I didn't even hear the words "design pattern" until I'd been trying to work professionally for over a year. Many of the things I know today, I wouldn't have even known to ask/research/learn about back then, because I couldn't conceive of its existence. Heck, I'll probably be saying that forever! To quote a friend of mine: "I cannot grasp the depth of my own ignorance."
However, while doing the 'self taught' thing, I have seen other threads like this recommending the staple books like the Petzold book for windows programming, the O'Reilly series, the Stroustrup book for C++, and the "Head First Design Patterns" book. However since i still have google up when doing the vast majority of my coding, I've actually found that more and more I've been bookmarking blogs by developers more experienced and skilled than myself. Moreso than most books, the blogs I keep bookmarked tend to have prefaces at the beginning of each article explaining exactly what programming obstacle the blogger had encountered, thus providing a concrete application for the code to follow in that article.