Older programmers are more knowledgeable, but harder to find
itworld.com
itworld.com
Over the years I found myself presented with two possible upwardly mobile career paths.
1) Stay programming: every year or two increment the Roman numeral after my title until that got old, then start appending senior, principle or whatever to it: Programmer, Programmer II, Programmer III, Programmer IV, Programmer V, Senior Programmer, Principle Programmer, Principle Senior Programmer, etc.
Along the way I expected to learn the deep magic of the innermost workings of these beguiling machines, to use them to bend the course of rivers of electrons to my will.
2) Start managing programmers: Somewhere around Programmer III, turn into a "Lead", then a "Manager", then a "Director", "then a Managing Director", then a "VP", then an "President" then a "CTO".
Testing the waters for this career path showed me that it had little to do with the technical stuff I was really interested in, and more to do with mind-numbing bureaucracy and paper pushing. I stuck with option 1 for a few years. It didn't last, I ended up in option 2.
In my experience there are things that conspire against older programmers:
- The management trackers emphasized that they only had to learn their job and learn it once, with refreshers every few years. Being a programmer for your career means non-stop, life-long learning. This sounded awesome when I was in my early 20s. It sucks when I got to my 30s. Spending all night learning yet another framework for pushing bits out a network interface in some language almost exactly like the last 8 languages I learned but with slightly different libraries instead of going out and experiencing life, or just chilling in front of the TV sucked hard. My friends on the management track seemed to have unbelievable amounts of free-time. They constantly wanted to chat about the latest TV show they watched, went to the Gym 4 times a week, trained for marathons (dedicating hours each day), took cooking classes, spent weekends out doing stuff...all at the same time while I was stuck at home reading up on something. My free-time was stuck at about 30 minutes a day, and all I wanted to do was turn off the world for that half hour. Looking forward, there seemed no escape from this 7-day grind.
- People think that anything that has electricity flowing through it is something that you'll be an expert at. Before long the number of completely different disciplines that you're expected to have some level of mastery is at is bewildering. From telecom systems to embedded controllers to dozens of complex third party libraries each requiring a Master's level understanding of some non-software discipline like tax law or physics. Having the same discussion for the tenth time a week, every week, that just because you're a decent programmer, doesn't mean you have the domain expertise in everybody else's domain. You end up feeling like, and often end up doing, everybody else's work in every other department.
- The money in the management track can be much better. Even if the base salary at the same level isn't as good, you get opportunities for bonuses, commission etc. In some companies you get travel opportunities and other perks that are awesome as well. Travelling a week a month, with your company footing three meals a day, saves you lots of money.
- Your boss, who went management track, gets the credit from senior management track for your work. If he's cool he'll pass it down. One guy I worked for took that credit in the form of a fat bonus and bought himself a 40' boat. We got an email attachment showing us a picture of the boat he bought with our work. A late addition to the team, who was brought in to build the presentation slides our boss used during delivery of the software got a small bonus and a promotion. Collectively our team put in 7 day weeks and 12 hour days for a couple months and got squat. That sucks going through it one time, now imagine that happens every few years for the entirety of your career.
- If you end up in a company where software isn't the main focus of the company, but a cost center. You feel like, and are often treated like, a janitor. Sure you're a highly paid, highly educated janitor with multiple degrees and an IQ that's at least the double of the room temperature in whatever room you're in. But some new kid fresh out of his undergrad at Harvard Business school will get hired into his first job as your boss and will want to leave his "thumbprint" on his team by making sure all the "clutter in the development pen is cleaned up". He'll be introduced to you as a super sharp new hire who speaks 3 languages (you'll later find out not all that well). He'll need you to reset his network password every two weeks because he can't remember it, it's the only password he has to remember anywhere in his life. And of course, when he fucks up, and some project plan he wrote up wasn't correct, you get blamed since you're more "senior" than him and should have been mentoring him in the copious free time you have between deadlines.
- It just simply gets harder to learn new stuff the older you get. It sounded stupid to me when I was 20 and could pick up a new language in a week of off-work study. I'm not even all that old yet and I can feel the gears in my brain grinding to a halt. I finally understand the old greybeards stuck writing COBOL for 30 years.
- Along with that, the young kids come out of school knowing a lot more that's relevant to today's environment then you did. Your self directed study may not cover lots of what they take for granted. I'm blown away by what new grads are coming out of school knowing. You end up playing a game of catch up, only as the game goes on, the hill you're running on gets steeper and you become less able to run anyway.
I've met lots of old programmers outside of the field. Running bakeries, renting scuba gear, selling cars, fixing motorcycles.
Tired of all this, and not wanting to go management track at that time, I did a 10 year stint in another career.
While doing that I ended up at a startup, in a non-programmer job. A few years later and some attrition from the top, I found myself helping out with programming again, then helping out with sales, then with management until I finally found myself running it. During all this, I realized that the boring bureaucratic bits were still boring, but that was only a small piece of what was involved on that track. There's actually quite a bit of enjoyable intellectual challenge involved in running all the bits and pieces of a company. And it was true, after learning the basics of each piece, you really don't have to study more.
Sure you have to read a lot, but it's more like keeping on top of what the latest car models are instead of having to learn all about a new mode of transport and how that works. It's car and driver instead of mechanical engineering.
The main difference though is that it can be really stressful on the management track if you care about it. There's an incredible amount riding on your ability to organize a group of people to get something done, and you are responsible for their paychecks and keeping them fed. You learn quickly how limited your powers are, and how much you have to depend on the willingness of your employees to do good work.
It's hard to say what anybody should do. But this is what I ended up doing. In many ways I'm jealous of the old greybeards because in many ways they're living the dream I always had. At least I think it's important to not make the same mistakes my managers made with me.
But it really annoys me how much of professional programming skill is what I call Temporary Technical Trivia instead of Cumulative Competence. It drives me crazy that the fact that I've learned ten times as much about programming as a young hotshot just out of school doesn't give me a huge, obvious advantage. I've walked fifty miles over harsh terrain to get to this point on the trail, this kid was just dropped off by his mother, and now here we are walking side by side.
The 100x programmer is a myth. You don't have time to get that good before the game restarts. The 10x programmer, if real, may have to choose between continuing to work on things fewer and fewer people care about or restarting again and again as a 1x programmer on new projects. The feeling that all of your hard work isn't adding up to much gets to most people after a while. And yet, I love it too much to stop....
For those interested in mere datum points ... , 62 here and still joyously hacking.
It's been a blast so far, starting with punch cards and Burroughs JCL of the late 60s "high priesthood" machine-tending, through minicomputers, the internet, microcomputers, the web, the sudden ubiquity of personal computing devices. My love of sci-fi dates from the mid-60s and I'm still hugely buzzed to find myself living in the future that I used to read about; it's an absolutely fascinating time and a real privilege be working in the field.
Just last night I was using my laptop to watch a youtube video of a TV programme on dark matter (that's still a personal "wow" on so many levels). The programme mentioned that it was in the 1920s that Hubble first postulated the existence of galaxies other than the Milky Way. The contrast between "Hey, those fuzzy patches of light could be galaxies" to "and here we have a map of the dark matter in the observable universe" is almost as mind-boggling as the sheer speed of the advancement; less than 100 years, one person's lifetime.
It's now quite obvious to me (that's all I want to claim) that this period in human history is having a profoundly formative effect on the progress of the species and, should we collectively survive the immense challenges currently facing us, will be a subject of special interest to future historians. - so yeah, ageing can give you a greater facility for intuiting a wider view.
The fields of programming, computer science, software engineering are still young and (as a cognitivist interested in the cognitive psychology of programmers and programming), ISTM that we have a long way to go before we can develop reliably predictive models of programmers / programming and the related issues of: learning, ageing, skill acquisition and retention, organisational principles, etc., etc. - ageing does allow you to experience the same problems being identified over and over again, without any really effective solutions being devised. I spent nearly a decade as a cube-monkey in Hubris-Pachyderm labs between the mid-80s / mid-90s and during that time the problem of the "technical ladder" remained unsolved by our highly-paid senior management, much to their discredit. I note with some disappointment that the issue apparently remains generally unsolved today, that's 30 years of successive cohorts of senior management across the industry who have proved unequal to the task, sigh.
In my personal experience, the fields seem just as vulnerable to fads and fashion as any other formal/semi-formal endeavour. I'm given to understand (by a vastly more knowledgeable colleague) that DeMarco (the bane of my programming life in the 80s) has now recanted on structured analysis. I'm still contemplating the amount of damage inflicted on programmers by that movement, so you might forgive me for having a slightly jaundiced attitude towards contemporary ideas (can't even call them "theories") about pair programming, agile methodology, etc. But I mustn't get started on the subject of propellor-heads making uninformed, uneducated pronouncements on what are essentially topics in the domain of cognitive psychology, that way lies isolation. I've learned to keep my head down and avoid rocking the boat 'cos it gets right up other people's noses, I've found. I realised that all I really have to do is just wait. Eventually, reality will force them to acknowledge the error of their ways. The trouble is, a decade, two decades later, they've forgotten the entire conversation <spit>. If you live and breathe R&D in this field, you need to get used to the fact that your perceptions of how it's going to play out in 10 years time will just prompt laughter and disbelief in others, get used to being viewed forever as the loony in the corner.
FWIW, I'm still happy learning new languages and new ways of working but I'm increasingly picky about what I spend my time on, having wasted so much of it previously on sussing out half-assed but nevertheless seductive notions (e.g. VRML, to pick one at random). I can, and sometimes still do, spend ludicrous amounts of contiguous, hyper-concentrated time on things (up 3 days&nights) because if I choose my subject carefully, I can get through two weeks familiarisation in three working days. But that's my problem, I'm a generalist and this stuff takes effort for me and there's so much of it and there's so much hype that it's become quite difficult not to throw out entire nurseries of infants along with the bathwater. On the plus side, keeping mentally fit is thought to improve one's cognitive reserve [1].
In my case, the peripherals are starting to show distinct signs of wear but the CPU and RAM do seem still adequately rated for the task. Anyway, it's indoor work with no heavy lifting and, as a child of the 50s, I know that's a big plus - but YMMV.
This stood out to me as one of the most beautiful things I've read on hacker news to date, and I completely agree. Thank you!
Designing software systems is hard because it constantly asks you to choose. And in program design, just as in life, choice is hard.
Good, seasoned designers know what choices will lead to a good design. For a beginner, each design choice opens a door to the unknown. The experienced designer is like a good chess player: She can see more moves ahead. This takes time to learn. Maybe this is the reason why programming genius may show at an early age, whereas software design genius tends to take more time to ripen.
The temptation is always there to do the same work that is comfortable, and it can be hard to resist.
Since you mentioned Perl -- it is an old hobby (and present job; hired/paid as a senior, feels like a junior with the new stuff), I'll use that as an example.
Perl is a totally different world now, compared to just a decade ago. Testing took over completely, about then. The testing support is really good. (See CPAN + Perl testers; please copy that in other environments.)
The use of the language ("Modern Perl") is totally different -- see e.g. (not only Moose and the language extensions but the ability to create them!) http://search.cpan.org/~flora/MooseX-Declare-0.35/lib/MooseX...
Many of the work domains (e.g. web development) are also very different.
And so on.
(AFAIK, it is similar in most other scripting languages.)
If you think a bit about it it's fairly obvious. Programming is a relatively new profession that has been booming for the last decade or two. 30 years ago when a 45 year old programmer would have thought about what to do with his life programming would only be an option for the few. Theresimply weren't that many people that chose a profession as programmers, so naturally there aren't that many old programmers around since there weren't that ,any to begin with.
But you know what they say - great minds think alike :-)
The early 80's were filled with heady optimism. It was obvious that computers were the future; that they were the next "plastics".
So while it's not surprising that there aren't lots of 55-60 year old programmers, there should be lots of 40-50 year old ones.
I think a better explanation for their lack would be the downturns experienced in the early 90s and the big internet crash of ~2002. A lot of people shifted into different fields in that time.
Even more so is just attrition. It takes a lot of effort to stay current; for many it would have been just easier to switch into management.
I believe the current lack of programmers and number of openings is bigger than the values around that time
- Older programmers generally don't care or are not aware of stackOverflow and modern technologies in general. That would explain their rarity on SO.
- Given the first point, it takes an older programmer an unusual dedication for his craft and curiosity to get interested in SO and new technologies. So this sample of old programmers really is some sort of "elite" of old programmers. Hence the impression that they are better.
This is the problem when using proxies for populations: the accuracy of the conclusions are upper bounded by the accuracy of the proxy. In this particular case, the only reasonable conclusions that can be drawn from the study are:
- Old programmers are rare on SO. - Old programmers on SO tend to be more knowledgeable than young programmers on SO.
Why nobody acknowledges that there weren't all that many computer programmers thirty years ago relative to today?
It's not necessarily "up", although it can be - it's a different job. At companies with a strong engineering culture, there is the opportunity to move up while staying in an individual contributor role. I don't think we should use this kind of language, because it implies that careers are a one-track road, and if you don't move into management you're in a dead end. At functional companies this is not true.
http://www.quora.com/Engineering-Ladders
Although, admittedly there seem to be fewer engineers than managers above a certain rank (anecdotal, I have no numbers). I would be interested to hear theories about why this is. Perhaps it is a natural reflection of the same age distribution discussed in this article? I.e., there are fewer older/highly skilled programmers, but not fewer older people skilled in management and leadership.
The fact that there are few older programmers is also not very surprising. This is still a pretty young industry and historically, the demand for programmers has been pretty low. Also, until very recently (the last 10-15 years), advancing in one's career meant moving away from technical into managerial roles.
I would argue it is only obvious if you are not young. I knew it all when I was young. It was only after looking back on myself from an older age that I actually realized how much more I had learned.
So he doesn't even bother to respond.
It's not hard to extrapolate to a time when all the people making the developer hiring decisions think like this, and you see the writing on the wall, and try something else.
The software industry is relatively young. How many people started as programmers 30 years ago? much much less than 10 years ago or last year. In the mid-90s, the software boom started and the number of youngsters that became programmers (like myself) increased drastically. So while it might be true that some programmers get promoted or retire, the reason that there is such a small percentage of older programmers is simply, ummm, that there are so many young programmers coming every year.
Old is always relative of course - The mid-90s will be the new mid-00s.
I'm in my late 30s and have spent the last few years transitioning more into product management. I'm still coding sometimes, but less and less. In fact, I am pleased that a lot of my coding has gone back to being recreational (outside of work).
I'm reaching a point in my career where I feel that my skills and knowledge are put to better use helping other junior programmers do their work better, rather than doing the work myself.
Besides, no matter how much experience and knowledge I have, there will always be a 20 year old who is willing to work twice as many hours for half the pay, and they will eventually get to more or less the same result I would. Why would I want to compete against that?
I'd rather be that 20 year old's boss or advisor, and help him/her work smarter and learn faster..
And my clients and employers seem to agree..
If I want risky projects that might be spectacular failures, I'll do them in my spare time -- I really don't want those in front of the people signing my pay cheques...
I would think that the same is true with career management, especially after you 30 something and have a family to worry about.
But to be honest, the amount of age discrimination in our industry has me really scared about getting older.
I've been programming for > 20 years, and I still love what I'm doing. A big part of that is being able to create new things every day. Fred Brooks wrote very eloquently about "The Joys of the Craft" in the book "The Mythical Man-Month". My comments/take on it: http://henrikwarne.com/2012/06/02/why-i-love-coding/
Sorry... we don't understand what you do enough to warrant paying you 2x-3x what we pay the grads and we pay grads more than other starters. Pay the programmer more than execs or non-tech with big degrees?
There are also a bunch of folks that ride out the tech that they rode in on when they started. PHP? Classic ASP? COBOL? If you don't love to learn and adapt in both tech and culture, you won't know what the cool kids know nor will you fit well with their group to tell stories about pointers and punch cards.
At 40, those kids of yours are just getting better and better and you might be feeling guilty about missing out on parts of those first years. You might have also done the math on how much of your surplus value you, as developer, are pouring into the sales guys' gas guzzler... You are there when something fails. You are there cashing the checks that the sales people write beyond scope, budget, and/or time. You see that gals' work-life balance compared to yours and say, f-it.
Also, as the guy notes... StackOverflow is a self-selecting group. Which of these highly-paid, older programmers are trying to build up virtual street cred or answering surveys?
Damn. What am I doing here, now? Gotta go.
Management I do see though; I know some (including myself) who came back but most stay there for whatever reason.
You don't see a ton of 55 year-old developers because they'd have been going to school in the late eighties, before most colleges had CS departments, and well before it was apparent that there would be permanent demand for an enormous fleet of us.
Research into the nature of the SO population and its relation to the programmer population at large needs to be conducted, in order to support inferences to the programmer population. Further investigation is needed of how SO measures, such as user reputation and question scores translate in to programming knowledge and ability. Research on the relationship between age and knowledge on SO should be related to the existing literatures on aging and on the development of expertise.[1]
I would also be interested in the average retirement age for Software Engineers, meaning people still doing the job when they retire. I'm betting very few of them actually wait until their 60s.
Maybe they're not interested? Maybe they're all really consulting and doing well? I don't have enough data.
Personally, I'm going to keep programming for a living as long as I can. It's fun (except for the death marches, which I've made a conscious decision to avoid).
Actually I spent most of my life as "the young guy" in the office. It's pretty sweet being the wise aged veteran and nobody questioning whether I should be there or not.