This is all good, but also just stuff that gets you from a neophyte to a competent programmer. What about the part where you want to get from the competent programmer level to the John Carmack, Peter Norvig and Oleg Kiselyov level?
You could ask them. But someone got to that level first, how did they do that?
Let’s suppose my goal is to become so cool that I could code StarCraft 3 during a weekend… without all the textures and levels and music and movies; just with some sample data, so my minions can later provide the rest. This would make me rather happy. :D
I could just spend one weekend doing my best, which obviously would not be enough. Then I could reflect on what was wrong. What was really slowing me down. I could try to research a solution for that (there is always a high prior probability that someone else already did it), or try to solve the problem myself. If I found I was missing some specific skill, I would focus on improving that skill.
The next test weekend, I could start again from the very beginning—more precisely, I would not reuse the specific code that I wrote the previous weekend; however, if in meantime I have prepared some useful library for myself, I would use that. The idea is that I am not unnecessarily handicapping myself; I am just assuming that what I did previously was wrong, so I am not going to build on my mistakes, but to do it right. Also, by always starting again I could get some feedback on whether this weekend I was really more effective than the previous one.
This is all good, but also just stuff that gets you from a neophyte to a competent programmer. What about the part where you want to get from the competent programmer level to the John Carmack, Peter Norvig and Oleg Kiselyov level?
You could ask them. But someone got to that level first, how did they do that?
Let’s suppose my goal is to become so cool that I could code StarCraft 3 during a weekend… without all the textures and levels and music and movies; just with some sample data, so my minions can later provide the rest. This would make me rather happy. :D
I could just spend one weekend doing my best, which obviously would not be enough. Then I could reflect on what was wrong. What was really slowing me down. I could try to research a solution for that (there is always a high prior probability that someone else already did it), or try to solve the problem myself. If I found I was missing some specific skill, I would focus on improving that skill.
The next test weekend, I could start again from the very beginning—more precisely, I would not reuse the specific code that I wrote the previous weekend; however, if in meantime I have prepared some useful library for myself, I would use that. The idea is that I am not unnecessarily handicapping myself; I am just assuming that what I did previously was wrong, so I am not going to build on my mistakes, but to do it right. Also, by always starting again I could get some feedback on whether this weekend I was really more effective than the previous one.