One article that particularly intrigued me was the one relating to programming 'stages'.
In it, the author (Chris Hargrove), describes how he believes that there are specific moments throughout a programmers career where they fundamentally alter their understanding (of programming) at a conceptual level.
"I could tell I had grown as a programmer between the time I joined [Raven] and the time I left, but I couldn't really explain how. At some time during my experience there, something in my head "clicked" that I couldn't describe. I was talking to a friend sometime afterward (who was also an employee there at the time), and he could relate to the feeling, which he'd had at one point as well. He could only describe it as "finding your code style". Although that term didn't quite grasp what I was thinking, it did make me wonder. Sometime afterward I began thinking about this "stages of a programmer" thing, and talked about it with a couple of my current coworkers here. Then I realized that the "click" I felt was me hitting one of those stages, and I started thinking about the other stages I've inadvertantly hit over the past few years... and which ones still remain."
The stages that he outlines are as follows:
Stage 1 - Fundamental. A programmer's first exposure to programming, learning basic logical and structural concepts, and so forth. Here one is capable of writing programs to solve certain problems, such as those assigned in school or with similar complexity. Programmers at this stage often don't have any real "drive" to program, but do so out of necessity or supplemental desires (i.e. it'll help them find a job).
Stage 2 - Exploratory. A large stage beginning with a realization that there are more possibilities in programming than once thought, usually marking the start of a programmer's motivational drive. Programmers here begin learning a wide variety of programming topics, languages, and paradigms, often in a random and self-taught order based on current interest and any information accessible.
Stage 3 - Concrete. A second "exploratory" stage where the programmer becomes comfortable with his/her current knowledge and methods of acquiring new information. Research mechanisms become more disciplined, and the programmer finds themself answering more questions amongst peers than asking them.
Stage 4 - Analytical. The programmer begins focusing less on implementation details of specific topics and more on problem analysis, including self-analysis of one's coding conventions and design methodologies. Large-scale construction issues become dominant over smaller-scale programming problems, which can now be solved as needed.
Stage 5 - Holistic. Programmers at this stage attempt to see projects from all angles, before and during construction. Software engineering decisions become disciplined, and a project's implementation becomes a mere manifestation of its design, not the controlling force. Construction details and related problems are increasingly seen before they happen, with the programmer capable of focusing on multiple levels of a design simultaneously.
Stage 6 - Dynamic. The programmer ceases to consider project design as the primary programming factor, and begins to focus on design of a design itself, turning the concept of a project into a completely abstract conceptual entity.
Stage 7 - ???
Now, normally I'm not one for psychological mumbo jumbo. But the idea presented by Chris really struck a chord with me. I can really relate to some of the 'key moments' he described. For example (although not really a stage) think back to when you first truly grasped OOP, and began to be able to leverage it in designs and patterns.
So, my questions are these:
1) Which stage do you feel you fall under?
2) Do you think the model is wrong? Prepose additional stages or retractions.
3) Do you think the whole idea is wrong? And that developers cannot by 'pigeon holed'
4) Can you remember any 'clicks' that you have noticed?
I reckon I'm at stage 4. Looking at stage 5 :-)