I learned on my own. If I were to recommend anything to read it would be to find a good book on refactoring or dealing with legacy code.

I read design patterns books when i was younger but in retrospect that was a hindrance more than a help.