That said, while I appreciate your sentiment, I know in my heart that the author is right. All of my friends from college have moved out of programming. Many have left the industry completely -- and we're not even that old! The bottom line is that there's little or no cost advantage to hiring an older coder, when I have t-shirts that are older than the most popular development environments.
Every once in a while, some young geek chimes into these conversations with the observation that one needs only "keep up with technology" to stay relevant in the industry. But even ignoring the fact that "keeping up" is usually easier said than done, the economics just don't work out. My friends who went to medical school are finishing their residencies and starting in private practice; my friends who went to law school are making partner. In most industries, you're just beginning your career when you're in your early 30s. In software, you're already old enough to be a conversation topic.
It is like being overqualified for a job: You have all the skills needed yet your motivation and personality is questioned.
I realize that good companies recognize talent, and that überhackers with brand name projects behind them will always be in demand, but sadly the world is made up of different realities.
Even the "keep up with technology" people know in their hearts that these articles are correct. Everyone knows programmers have a half-life, they just are in disagreement about when it kicks in. Nearly everyone would be surprised to discover a 60 year old programmer who was still gainfully employed. 50 is really pushing it, 40 is pushing it, and 35 is starting to push it. In contrast, nobody would think it was weird to see a 40, 50 or even 60 year old doctor or lawyer.
That's half the story, but it's a big part of it.
The other half is that it's an area with gradual drift out & little drift in.
That half needs some explaining but it seems like more of a young man's game then it is. It's easy to get behind. If you're out for 2 years, it's daunting to get back in. The opposite is true for some domain (like medicine). You get very little drift in to the field (more programmers become HR people or sales people then the other way around). It's a first career, not a second.
My point, I suppose, is that your experience must still count for something within certain domains. Right? Or am I wrong on that, too?
I think you'll find that in industries where safety & reliability is critical, experience is always a great benefit for the applicant.
I wonder how much this is to do with the relative newness of programming as a profession. Medicine and law have had a very long time to develop systems to train the young, then identify and reward the knowledgable and talented. Perhaps in a few decades 20-something and 30-something programmers will be regarded in much the same way as their law and medicine practising counterparts.
Also, programmers who have been working for >30 years (who started before the mid-late 70s) didn't have the option of learning to program at home, on a PC. PCs caused the number of new, but not potentially good, programmers entering the job market to spike.
A dot com crash and several cube jobs later, those same folk are living in better homes and driving luxury suvs while I am pondering how I can escape the hell that is a modern day software cubicle job....Guess the joke really is on us.
The other thing about new technologies in general, and Rails in particular, is that 2 or 3 years of experience doesn't really mean much because the evolution is so fast. There's lots of Rails lore out there on the web which is completely out of date, and if you're not willing and able to dive into the code yourself and design your own experiments you're going to make completely incorrect decisions about how to design your app and write your code.
1. The "geezer" with 10 years of C++ probably wants a lot more money than the guy straight out of college. If the company both needs that expertise and can afford the premium then they will definitely go with him, but if money is an issue they may be happy to take the younger guy for lower pay.
2. The guy with 10 years of C++ may be more qualified than the hiring manager. If the manager is focused on the needs of the company of course this is no issue, but if that manager is some middle management person in a large organization who is worried more about his little fiefdom then the company as a whole, he is likely to avoid any candidate that might overshadow him.
I was a fresh graduate once. I remember my productivity less as "60% of that of a twenty-year veteran" and more as "It is a miracle that they allowed me into the room for a purpose other than to empty wastebaskets, to say nothing of permitting my code in shipping products".
My product's code, particularly the parts of it which were laid down earliest, is so bad in some points that I wouldn't pollute a repository with it if I were rewriting today. Oh, God, the print logic. I can quote one line out of that file by memory:
// Abandon all hope ye who enter here.
I know a developer who was learning two new programming languages and started writing serious production code within three weeks of starting his first job post graduation. He took over maintenance of a complex application and rewrote it in a new language. He managed to double his salary 18 months into the job. There risk in hiring someone unproven, but you can buy that down quickly.
One of the better examples of this is helping to debug someones program. Now I frequently hear, I was trying to do X, it almost works, but it's also doing Y, and I will say ok you made a mistake in this area. It's not just understanding code, but also understanding the typical mistakes we make. Tracing down an off by 1 error is something everyone learns, but they don't teach it in school.
The first 100K lines or so are easy and somebody with talent who is fresh out of school is going to get to the finish line at least as fast as a 10 year veteran. The real test is the next 100K lines of code which the experienced designer is going to breeze through while the novice is about to learn an important lesson: Writing large programs is much harder than writing small ones.
In a higher level language you get a lot of good design for free. For example nobody has to worry about GoTo-spaghetti-code any longer.
Plus there's experience with the toolchain. Experience with the codebase. Knowing how to play "the game" of meetings and reports.
Suppose you pay a fresh college grad 50k. 70% more is 85k. But 70% less than 85k is 25.5k.
So you would definitely pay the experienced guy 70% more.
I think about it this way: I am supremely confident that I could know all I need to know about Ruby/Rails to do just about anything within a few months of working on an honest-to-god project. I'm equally confident I wouldn't know a fraction of C++ in that time. As our tools continue to become higher-level and more acutely focused, they become easier and easier to grok. The learning curve of a language with C++'s history vs. a new-shit-on-the-block web framework? Forget about it. You can write a blog in 10 minutes, remember? ;)