I think it's more of a spiral, where you get to stage 5-7 in one area, find out there's a whole new world you never knew about, then end up back at stage 1 in that new, broader world.<p>I wrote my first computer program, a text-adventure game in BASIC, when I was 10 (stage 2). Learned Pascal and C as a pre-teen and played around a bunch on a VAX in 8th grade (3). Started working on a MUD in 9th as I moved to a new school (4). Found out it was too hard, gave it up, and took up electric guitar instead (not quite 5).<p>Then when I graduated from high school, I got my first real programming job (stage 1 & 2). And found out I could write GUI programs in Swing and Java just like the professionals (3). Ended up doing the GUI for the beta version of our product - except the company never shipped it, and ended up going out of business six months later (4). I blamed the failure on a lack of engineering process, so I started learning all I could about design patterns and XP and rigorous engineering processes (5).<p>Then in college, I found out about Lisp and functional programming (1). Many of the problems in that previous startup were because of too many bugs, so it had an immediate appeal to me (5 & 1). I wrote my first little programs in Haskell and Scheme (2), then started learning everything I could about compiler & interpreter implementation and wrote a little tutorial about how to implement Scheme in Haskell (3). Then I tried making my own programming language (4), which went nowhere, except I knew that (5) was not the answer. I'd like to think I've skipped to (6), though given that the programming language is still going nowhere, I'm not so sure about that.
Summarised in code by this oldie-but-goodie: <a href="http://www.gnu.org/fun/jokes/helloworld.html" rel="nofollow">http://www.gnu.org/fun/jokes/helloworld.html</a>
The first stage of being a programmer is having heard of programmers but not being one yourself? In that case, I'm a first stage surgeon, concert pianist, and fighter pilot.
It's the stage 5 programmers that scare me the most. They're the ones who want to rewrite everything from scratch because the current codebase doesn't contain enough patterns and it wasn't built using "proper" methodologies.
I think I've been stuck at '4' for the last 20 years or so :)<p>But seriously, the cycle is endless, there are always new depths of understanding waiting to be found and every couple of years you sort of go back to square #1, learn a new paradigm, only to find out after much hard work that the new is the same as the old only in different clothing.
I'm not sure where i am in this.
I recently discoverd that my solutions started to be too complete, too much complexity analysis, too much enduser friendlyness.
And that a 10 line POS script could do the same, if only the users would know how to code.