What would be the best plan for becoming the best programmer you can possibly be? Most blog posts or articles I find when I google this question basically say that you have to be passionate, and you have to write a lot of code, but that's basically it.<p>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.<p>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?<p>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.<p>Some constraints to bring it somewhat closer to reality:<p>- Some fairly advanced educational background, say a university degree in software development or matching competence<p>- Having little or no previous experience of open source collaboration and not knowing where one would start<p>- 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<p>- Not spending more than 12 hours per day on work and personal training combined<p>- Having one day off on weekends<p>- (This leaves us at 72 hours per week, of which 40 hours are at the day job)<p>What would your optimal plan be, if we can assume that those 72 hours will be spent optimally, for 10 years?