This post is dedicated to everyone who's insecure about their programming skill. This post is my attempt to make you less scared and more awesome.
Being awesome is learning, adapting and gaining new skills. I won't make any claims about what's the best way to learn anything - but a great way to learn programming; is to have a hobby project. Something you make either because you need it, because you want it, just because it's cool, or because you want to learn something new. The great thing about learning programming is that unlike wood chop class or cooking, you can't destroy anything. And there is no resources to be wasted.
For me, it was mainly because I needed it. A few years back (two?) I started coding on an application to automate downloads from websites. When I simply couldn't find one that did it the way I wanted it to, I realized "hey, I can probably do this on my own" and started hacking away. Of course, I didn't know anything about network programming, multi threading, synchronization, modular development or anything fancy like that. All I had was my basics, some swing and regular expressions. If you even can say you -know- them. A more correct expression would be: I can make simple stuff that does what I want it to.
This is what the software looks today and have been looking for quite some time now. I have this bad habit of starting a project and then stop when it does about half of what I want it to do. However this is by far my most finished piece of software (which tells you a lot about how bad this habit really is). I plan on releasing it (open source) as soon as I fix the few known bugs that are in it. But that's a topic for another day.
The first you want to start with is what you already know. Know how to code the required physics simulations? Great! Can you make a useable gui? Sweet! Able to make an animation show on the screen? Awesome! Getting started and seeing some pixels telling you it works is the most important motivator. That's probably why graphical programming feels so much more rewarding than "background stuff" like networking and such. In this project, I started with a simple gui, there was a file chooser and a download button.
Second you start expanding into one direction which gives some results, capture a website and print it to the console, try to extract some URLs from it, separate the images from the sites. Put them into lists, that sort of stuff. Babies learn to walk one step at a time. This doesn't have to be much different.
Keep going like this until it does what you want. Duckduckgo is your friend. If something seems too big, break it down into smaller parts. When you realize there are multiple steps before you get to that RTS game or web server application, it gets much easier to handle. Remember the phrase "Divide and conquer"? That's precisely what it is. Google terms that sound relative not to what you want to accomplish, but what you want to do right now. The smallest possible sentence that symbolizes a meaningful step. Repeat.
"Keep it simple, Stupid!" is a good mantra once you get a little further into it. Don't lose yourself in trying to make everything perfect or overly complicated. Rome wasn't built in a day and I promise you none of the architects there knew how it was gonna be done. And for the love of god don't write code you barely understand. You'll thank yourself for every comment and properly named variable you leave behind the next time you take a look at it. Trust me.
The program will be completed and you will have learned a lot. You'll start thinking about stuff you never imagined yourself pondering. You'll want to improve yourself even more, and at greater rates. And you will become truly awesome.
EDIT: Rephrased the part about starting with what you already know to make gui programming seem less important. Remeber to only code at least what you might need. And preferably only what you actually need.