Most 'really cool' things that I compose are just because I am really interested in writing what ever the program is. A famous quote is that good software is made when a developer would "scratch their own itch.". As for what I lack in technical knowledge then you can never read enough. Get books on subjects you are interested in and they will reference similar authors on the subject or branches off. As your programming experience grows so will your ability to just code the ideas that you have. You will learn patterns and methods to create some of the largest of software projects.