But all of us are not fortunate enough to find some interest that's completely all-consuming. Don't get me wrong, I'm passionate about progress, about improving the world. And I like programming. I'm just not naturally completely absorbed by it.
So let's hypothetically assume that motivation or dedication is not a concern, that it is fixed. If we assume that you would find a way to put in X amount of hours per week, how should we distribute that time?
It's debatable what a "good programmer" is, but let's say that you want to be as diverse as possible, while at the same time having as much technical depth as possible. A different approach might be to outline two plans - one for becoming the best generalist and another plan for becoming the best specialist.
Some constraints to bring it somewhat closer to reality:
- Some fairly advanced educational background, say a university degree in software development or matching competence
- Having little or no previous experience of open source collaboration and not knowing where one would start
- Keeping a day time job (40 hours per week) that is moderately challenging and doesn't bring that many external incentives to become a lot better (say, an average web developer position or similar) at the same time
- Not spending more than 12 hours per day on work and personal training combined
- Having one day off on weekends
- (This leaves us at 72 hours per week, of which 40 hours are at the day job)
What would your optimal plan be, if we can assume that those 72 hours will be spent optimally, for 10 years?