|Perl: the Markov chain saw|
Getting to be good at something requires focus, patience and continuous improvement.
For writing code, that's a good mental state: you've already spent some time thinking about the problem and have now come up with a solution that you're going to implement. Start to write the code slowly, thinking about the 'big picture' as you do each piece. Review often, and stop when you've got a chunk done, save the file and perhaps run some early tests, then code some more and test some more. Above all, put everything into that piece of code -- don't leave error checking, useful comments or nice variable names for later. Put all that stuff in now, not At Some Convenient Point In The Indistinct Future That May Never Come.
Everyone's got a different way of focussing -- I like to have a cup of coffee to hand and my iPod pumping tunage into my brain via headphones. My step-son does a lot of homework on a clipboard while lying in bed with IRC open and the TV on. I'd find that too much distraction, but I'll go with Whatever Works For Him.
Patience comes with experience -- as someone who's been driving since I was 16, I learn this every day. Faster isn't necessarily better -- although it can be fun. :)
For me, continuous improvement (at Perl, anyway) comes from being a member of Perlmonks, and staying in touch with what's going on with the community and the language. It's possible to develop in Perl without taking part in the community, but that strikes me as a task made much harder than it needs to be.
The happiest man is one who never works a day in his life -- because his occupation is something he enjoys, and he would do it for free. So if you get real satisfaction in writing code and chasing down bugs, then you're in the right profession.
And in the immortal words of our founder, "Have the appropriate amount of fun."