It occurred to me recently that the programmers who are visible to the world are probably actually in the minority. The guys you see and hear making a noise generally fall into two categories.
The first group is a small group who, for a wide range of reasons, tend to be quite vocal. These reasons include a desire to make a difference, ego in spades, an interest in pushing a certain approach, tool, platform or package, and any number of other reasons for putting themselves out there.
The second group, who constitute a majority, tend to be idiots. By and large if someone is posting in a technical forum their contribution can only be measured with an electron microscope. On a brief tangential note, my favourite example of this is a few thousand word long post describing in detail how Oracle stores and manipulates date-time values, followed a post by a very well known (and respected) Oracle developer along the lines of "put that crack pipe away and find a job you're up to". In general the people with the answers do not have time to engage in hour long online tag-you're-it exchanges because, well, gee, they're busy figuring the answers out. Sometimes I think the Internet only has the answers by virture of the sheer volume of stuff (i.e. crap) out there. Monkeys, typewriters, you get the picture.
But I digress. This post is not about the Unhelpfuls that lurk on newsgroups and technical discussion forums. It's about programmers, and it's about programming (the career rather than the technical activity).
If you spend any time reading about jobs in IT and about programmers and programming languages and tools and platforms and ... you get the idea ... then you'd probably come away with the impression that programmers are constantly changing jobs, and languages, and platforms and wow there's so much going on, must ... learn ... it ... all.
I don't think that's an accurate picture. Not even slightly. I think if you could sit down and collect some accurate figures you'd find that the majority of programmers are "lifers". They're the 90% of the iceberg sitting below the waterline. Admittedly, the term lifer is probably not entirely accurate. Gone are the days where people joined a company at 18 and worked until they received a gold-plated watched and a handshake at 65. Actually, even that's not strictly true. Computer programming as a career hasn't really been around long enough for anyone to have traveled that road. But you get the idea. So when I use the term lifer what I really mean is long-term, say 10 or more years.
Someone once told me that the average length of time a programmer spends in a given job is 18 months. Or it might have been 30 months. Either way not very long. At the time I thought it was backed by cold hard facts (well, no, what I actually thought was something like "hold crap Batman, I'd better get a move on!"). I no longer believe that's the case.
There's definitely a large subset of programmers who move on to new opportunities reasonably quickly. But I think the vast majority tend to stick around for much longer. It certainly explains the number of interview candidates that seem to have focused on one language/platform to the exclusion of all others. On the face of it it makes sense. If you're in one place doing one thing then to get ahead you'd better do it well. Better than anyone else if possible. It scares me to think that I might end up on the kind of uni-directional track but I'm quite prepared to accept that I'm just one kind of person who views it as stagnation and that one man's stagnation is another man's perfection of a craft. I'm not here to preach that all programmer's should play with a new language, or tool, or platform as often as they can (even though I believe they should). I'm just sharing an observation (or perhaps perception is more accurate).
I suspect that most programmers spend 10 or more years focused on one job. As part of this they tend to be pretty single-minded about the tools they use. This is a perfectly acceptable way to conduct a career. It's a pragmatic approach to programming as a career. And if you're more interested in solving practical problems then it may not interest you to get bogged down in a better way to do things, or whether or not the platform, language, tools or even approach you're using are the best.
Personally I believe the real advances are made when things are challenged and people start asking meta-questions. These people are on the other end of the spectrum and I can understand why they'd tend to "job-hop". It's the career equivalent of the guy who solves the meaty core of a problem but has little or no interest in tying up the loose ends that differentiate a prototype from a complete solution. I'm a little that way and sometimes I have to force myself to sit down and polish off the rough edges.
And as in all things these are but extremes on either end of a continuum. Nothing is ever absolute. I suspect I sit closer to the latter end of the spectrum (the end overrun by job-hoppers) than the former, but I tend to approach things more pragmatically than most people I would put down that end so if you ran it as a scale from 1 (lifer) to 10 (job-hopper) I'd probably peg myself somewhere between 6.5 and 7.5. And it would fluctuate. Daily. Wildly. Just to keep you on your toes.
I think it's important to realise that this continuum exists. At the very least you need to recognize that you need to be looking for a "like-mindedness" before you can, well, start looking for it. It goes some way to explaining why one pair of programmers will get on so well while another pair find they have nothing in common.