+1
It will take at least 5 years to be any good. It will take at least 10 years to be skilled. It will take a lifetime to be a master.
Think of them as challenges and opportunities to improve yourself. Always try to do something that is more complicated and harder than what you have done ever before. Set the next goal always a little higher than your current level, so that it’s possible to reach it with much effort, but not so high that it would demotivate you. And even if you fail, you will have learned something and will do better next time.
For example, I have now been programming for about 9 years. The first 2 years I was just putting some code together without really understanding programming. At that point, the most complicated thing I did was a console Java application which logged into Planetarion, parsed a web page from there showing the status of my planet, and logged into another web site and sent an SMS message through it if my planet had incoming enemies. But when I wanted to write a v2.0 of that with more features, I did not have the skills to design programs larger than a thousand lines of code. I learned those skills only after entering university.
I had my first commercial project on my second year at university, after having programmed some 4 years, and thinking back then, it was pure luck that the project succeeded. I had no requirements gathering, user interface design and project management skills, and the code was so messy that I rewrote 80% of it some six months later (and now, 5 years later, I’m once again redesigning and rewriting it all).
After some 5 years of programming, including a couple of medium sized projects (over 10k LOC), I really started to have a feel of being good at programming and knowing what I was doing. Then I got some regular part-time job of writing Java EE applications. I hadn’t developed any Java EE applications when I entered, so it took a couple of weeks to learn the basics. After having worked there 1½ years and getting lots of programming practice, I could feel my skills reaching a new level (then I had been programming for about 7 years).
Now that I’ve been programming for 9 years, I try to get even bigger challenges, which would help me to rise to a new level. My current hobby project is an application server/distributed database, which is without doubt the most complicated thing I’ve done this far. I don’t know the details of how it will turn out to be - thinking about complicated issues such as high availability, scalability, failover and recovery - but I’m quite confident that I’ll manage to solve the issues somehow step by step (given enough time, motivation and not too many other distractions). No pain, no gain.

