Hey Richard,
There is nothing wrong with hack and slash / rapid prototyping it can make you very productive, with that being said you need to train yourself to spot potential issues with the code you write and know the impact it may have.
That should give you a long term to-do list, just remember premature optimisation is the root of all evil.
So what to do?
Pick challenging personal projects which cover broad areas that are just beyond your current level, for example: an account management system with a login and user profile front end.
That should cover database and class design, security, state management etc, also you may end up with a reusable system for your future game projects.
Read up on topics before tackling them to give yourself a degree of confidence that you are going in the right direction.
Object Oriented Programming Concepts (Overview)
Object Oriented Programming Concepts (In Detail)
S.O.L.I.D. Principles of Class Design (Overview)
Software Design Patterns (Overview)
A couple of "classic" books which are fairly language agnostic:
- Code Complete.
- Patterns of enterprise application architecture.
- The Pragmatic Programmer
- Refactoring: Improving the Design of Existing Code
Useful websites for finding answers to technical questions:
http://stackoverflow.com/
http://programmers.stackexchange.com/
Try picking up another programming language once you are confident, it will make you a more rounded programmer and will teach you something new that you can take with you in future.
Sorry this is a bit of scatter gun approach to answering your question, but hopefully you can find some useful information in there!
Jamie.