I loved this post by Chris Coyier, on the merits of practice.
You also can’t learn web development overnight. The path is full of frustrations. It takes time to know what you don’t know. It takes time to build up your barrier-busting reflexes. It takes time to understand what is connected to what. It takes time to know when to reach for tools, where you can be most productive, where your talents can be applied.
The tricks to improve more quickly are similar: vary the context. Read. Listen to talks. Code something small. Peck away at coding something big. Look at other people’s code. Try to figure out what’s happening on your favorite websites.
Other than this section, he uses the analogy of learning music, and how what seems impossible at first becomes possible. This is really a great read if you’re in need of some encouragement.