I'd add to this though that once you get comfortable programming it doesn't hurt to bite of a LITTLE more than you can chew. Don't shy away from a challenge for fear you are not yet good enough. If you can fully comprehend the scope of the problem you want to tackle and can handle a little failure every now and then you should try to push yourself cause you don't grow with easy stuff.