>> On what basis did you form that theory?
I've had the pleasure to work with a large number of programmers from different companies, backgrounds and training over a long period of time. I've seen this pattern repeated over and over, although as I say some people seem trapped in stage 1 or 2.
This is especially true for those who would rather spend a month coding something than spend $99 on a library to do the job. Conversely I saw a _lot_ of developers who saw only the end-goal (which typically meant getting paid) and would happily use whatever code they could get to get them to that goal quicker. I noticed that the ones who lived better, got paid more, were the ones that shipped, not the ones with "perfect code". [1]
>> I picked up programming as a child and have never wondered if I can do it, or cared if others knew I could do it, I have always been in step 3 programming to solve problems.
I too started young, and was self taught. I got through stage 1 pretty quickly, long before I'd even considered a career in this space. but certainly in the early days I was recreating things (games mostly) that were available at the time.
During University days I was lucky to rub shoulders with some very skilled others, and we constantly pushed each other to get better, be better, show something off, and so on. I went in there "knowing everything" and only by interacting with others did I find out that "all I could do was program." I didn't necessarily see it at the time, but the formal education part (the "science" part) really helped me along my career.
In my early work days I needed to prove my worth, demonstrate skills and so on. Once I was past that I became more productive - getting tasks done, not obsessing over every little naming detail. Build, release, iterate, perfect. Not build, perfect, perfect, iterate, never-release...
I would suggest (with no data obviously) that you went through stages 1 and 2 early, and perhaps quickly.
>> If anything I've regressed to step 1 20 years later after burnout, but that's another story
Perhaps it's burnout, or perhaps it's reflective of the limits you reached. As I learned new languages or moved into new spaces, I tended to repeat the stages, so perhaps you're just regrouping. I think we're always learning sometime new (hopefully) so sometimes it can feel like regression.
[1] Please don't read what I'm not saying here. Of course code matters, and like many I strive to produce the best code I can. But there's a balance. I use OpenSSL because despite the "ugliness" of some of that code, it's solid and it works, and I don't have time or energy to write something like that myself. I'm not advocating for using any old rubbish, I'm saying that quality libraries exist, and using them can often move a project quickly forward.