In playing around with my hobby projects in various object oriented languages, I have realized that creating good class structure and program architecture is both crucial and not straightforward to effectively develop a program, in particular a game.
I am a self-taught programmer with virtually no formal training, and I've only learned the things which seemed to be of immediate practical use, so I have never really looked into things such as design patterns, software architecture, code organization principles and the like. The resources I find are often limited in scope (most commonly it's a showcase of a single pattern) and/or quite technical (all the UML going over my head doesn't help).
Is there a good resource which explains the important concepts and basics of software engineering, where I can learn about things like when and how to use Components, what kind of class structures are appropriate to what tasks, how design patterns relate to each other and which are useful for what?