Lately I feel like learning new ideas about programming has become form of procrastination. It's easier for me to learn a new framework, language, paradigm, field, algorithm, etc, than to sit down and stay dedicated to finishing a large project. It's very easy to justify the time spent learning because it feels productive -- and it potentially is. Every time I learn something new, my horizons expand just a bit and I become a more capable programmer.
Now I'm at a stage where I know a ton but I can't stop learning. When I try to start a project I get so caught up learning new things that I often never start! Even worse, I sometimes get half-way through a project, then discover a much better way to approach the project, and start from scratch again.
Learning is only productive if you do something with the knowledge, and at this rate, I'm going to die as the most knowledgeable programmer in the world with nothing to show for it. I hate having the skills but lacking the dedication. I want to become a person who says, "I have done that", rather than, "I can do that".
My question is, how do you convince yourself to bite the bullet and just work on something, even when you realize that there's things you don't know? How do you manage the balance between gaining knowledge and producing results?