Older Is Wiser: Study Shows Software Developers’ Skills Improve Over Time
news.ncsu.edu
news.ncsu.edu
An individual at age 40 is generally more qualified than he or she was at age 25. However, absent of other context the fact that one individual is 25 and another is 40 has no bearing on the prediction of whether the one individual or the other is a better fit for a technical role. Go for the individual who can show adaptability and/or a history of compounding success in the areas that you need.
My anecdote:
I once had an argument with my former non-technical manager. She was arguing in favor of hiring a woman in her late 30s with two masters degrees to serve as a lead software architect. The degrees were in two subfields of physics, one theoretical, one applied. This would be the candidate's first position outside of academia. I participated in the candidate's entire interview process, and I recommended against hiring her for any position. She didn't have enough experience and she was awful at all of the technical portions of the interview process, especially her code. At the same time I was arguing that I should've been the lead, as this was a position the rest of the team had thrust me into and I was effective in the role. The manager's argument was that the candidate was more qualified. After some discussion, "more qualified" turned out to mean older (we both agreed the degrees weren't a strong indicator).
In the end, the candidate was hired for nearly twice my salary (apparently upper management likes letters after a candidate's name). She never fit the lead role, so the team never accepted her for it. Further, she was very ineffective as a developer (we were working in Java, her experience was in Matlab and R), so we either had to refactor a lot of her work or let it go to review and decline to accept it. Everything that went her way took months longer than necessary. In the end I think she wound up working in some type of higher-end sales/administrative capacity.
A team lead that can't code is like an Army officer that can't pass his physical tests or clean his rifle. He will not have the respect of the rank and file. A team lead (as opposed to a project manager) that can't code is doomed.
(Notice I don't mention language, a good programmer can be coding in something new within a week or maybe two and after a couple of months should be completely fluent.)
> a good programmer can be coding in something new within a week or maybe two and after a couple of months should be completely fluent.
It's a risky choice.
The project we were working on had very, very heavy emphasis on idiomatic Java. In this situation a good manager would need to recognize the deficit in the prospective lead and only ever accept the candidate if they have a rock-solid track record of success, if the team is proficient enough with the language that they can fill in the architect's gaps, and most importantly, if the team is on board.
Unless you have a very mature team that has bought into the leadership of this individual, deficit in language skills might be perceived as a deficit in overall skill, and the team will have difficulty accepting the new leadership.
[Edit: My very, very strong preference is to never hire leads. Hire team members, pay them what they're worth with frequent raises for good performance, and let the team decide who does what.]
Agreed. Learning a language is one thing. Learning its libraries is another; a stack a third; its idioms a fourth; its broad patterns a fifth. The J2EE part of my resume is an alphabet soup of supporting technologies. Rails is almost as bad, just with double entendres instead of acronyms. If you're learning the basics as you go, how are you going to make strategic, architect-level decisions? Did this potential hire ever encounter MVC in her work with Matlab/R?
I've been thrown into overdue projects in languages I hadn't used before, and have been able to start fixing bugs almost immediately... but "tweaking existing code" is a far cry from implementing new functionality, which in turn is far below making architectural decisions.
Languages exist in ecosystems that develop over years; knowing those ecosystems in depth takes a lot of time.
It is extremely arrogant for developers to believe the only thing of value a leader can bring to the table is coding chops. Compared to what it really takes, coding chops are immaterial.
Of course, all other qualities being equal, having the addition of technical skills on top of managerial skills is good, but I've had more non-technical bosses I'd choose to work for again than technical bosses.
My old boss was an amazing coder--dropped KLOCs like you wouldn't believe, very smart guy, and could debug damned near anything through sheer stubbornness. I respected his technical skill and learned a lot from him. :)
That said, leading a team is more than just being able to catch the ball when your subordinates drop--it's structuring things so that the balls are small enough and obvious enough that even a greenhorn can make useful progress, it's making a supportive environment and architecture that is able to be extended without your supervision.
You need to be more Tom West than Zed Shaw.
That being said, I think it cuts both ways. Both younger and older developers have advantages.
Older developers tend to see pitfalls and avoid them better. They tend to have a more diverse skill set, better organizational skills, and more knowledge of related domains outside programming (such as marketing, business, finance, etc.). Older developers are also less vulnerable to faddish thinking, choosing tools that they can ship with over the latest faddish language or technique. (And recognizing today's fads as yesterday's fads repackaged, which they often are.) Finally, older developers sometimes remember things that didn't work long ago but that might work today. Younger folks might not have a clue that certain things don't have to be the way they are, while an older person might be able to explain why a certain decision was made and then help them question whether it's still necessary today. A lot of innovation can be realized by searching through the discarded piles of yesteryear's ideas and asking, for each one, "are the reasons this was discarded still valid?"
Young developers have the advantage of fresh eyes. They don't carry the accumulated baggage of prior environments and old ways of doing things. They can more easily dump legacy cruft, embrace genuinely novel and interesting ways of doing things, etc. They also sometimes have more energy, having simpler lives and lacking things like kids and mortgages and personal accountants. I think it's easier for a young developer to focus laser-like on one thing for a long time.
I think the ideal team has both, and listens to both.
It's also possible for anyone, regardless of age, to take on either of these sets of characteristics. It's possible for younger programmers to take the time to scratch the surface of fads, or listen to the older ones and learn from them. It's also possible for older programmers to intentionally "forget what they have learned" and open themselves to the possibility that such-and-such isn't needed anymore, etc.
Edit: I also think it's important for teams to avoid the dark side of both. For older developers, it's the curmudgeon, or the developer so set in their ways they are not open to any new idea. For younger developers it's the cowboy who thinks they know more than they really know and will waste a lot of time reinventing wheels, chasing things already known not to work for provable reasons, etc.
But they don't necessarily understand the technology they're using. For example, teenagers these days are addicted to their cell phones, and texting is such an integral part of their social lives that taking away their cell is tantamount to locking them in a room for all the social isolation it causes.
They are expert users of technology, yet they don't necessarily understand the technology they use. As an example, if you give a teenager a URL for a page with information they need, instead of typing/copy-pasting it into the address bar, most will type 'google' into the address bar, put the URL into the search box, and click the first link.
Just being a highly proficient user doesn't make you an expert. Young folk are highly proficient users of technology, but they're not experts unless they've deliberately learned how the technology works.
Kids getting consoles and similar hermetically-sealed boxes depresses me.
If you're 20 with no family, no mortgage, etc. you sign up with Zuckerberg to 'change the world,' with little concern over whether it crashes and burns.
I think that equation artificially pumps up the pop culture relation between youth and doing great things at new startups (never mind the rarely told stories of failure and misery that can go with crashing and burning). Leading to a false conclusion that youth is superior at things like programming / engineering / innovation.
Fixed that for you.
The hackers that built Facebook would be perceived (by the public / media / whatever) to be better because of the halo that comes with their involvement in creating FB.
Your second point sounds purely anecdotal. My experience has shown just the opposite; older developers with families are much more committed because...well...they have families to support.
I try to at least be aware of what's going on around me. It's not always easy as there's a lot of new stuff every day, and when you finally get around to it, things change.
Most recently, I've been dabbling in NodeJS, as it's a good fit for one-off import scripts and backend systems. That allowed my to have a grunt script setup for the client parts of a new .Net project, where the backend is ASP.Net MVC ... I've seen the bundles out of the box in mvc, and feel that it's excessively painful.
By the same note, I can usually make a good judgement call as to when to plug my nose, and just make the patch work. Experience counts for a lot. And at the higher end the pay doesn't generally match your productivity... I'm a cog, but good enough at what I do that people tend to overlook my quirks regarding daily schedules.
For every prodigy I've seen (about 3 others in my career), I've seen a several dozen that were competent, not great, but get the job done, and several more dozen idiots who really should have a different career, and enough people that could be good, but can't break out of the same patterns they've used for over a decade to be more effective that I don't like thinking about it.
There are plenty of stereotypes, and plenty of exceptions. It's funny that SO is mentioned as the source in the article, as most of my best answers happen to come from me revisiting and updating older answers/questions with newer material. Beyond that it's pretty narrow as a focus, just tend to gear towards my interests.
Or at least as long he/she isn't distracted by the next shiny new thing.
http://chronicle.com/article/article-content/129773/
"And the more complaints about memory they had, the more we saw this extra activation." When all was said and done, those women did just as well on the test as the noncomplainers. "My guess is there could be something happening in the brain, and people are trying to compensate for it with these extra areas," Ms. Dumas says. "And they are doing it successfully."
(On a serious note, great exploration of the topic)
You think of young people as a fresher version of ourselves. Young
people don't know anything.
-- Don DraperOne day a young programmer flies into the office talking about the new MVC frameworks and how it would revolutionize how we write programs.
He was mystified when I explained how MVC works to him without even looking at what framework he was ranting about.
He asked how I knew? I told him it was invented at PARC in the 70's and I've used them starting in 1995 with the MFC C++ for document view. This was more of a reintroduction of an older methodology suited to web.
Older developers also get to see the linear progression of current technologies and how they arrived at current day implementation. What worked and what didn't work.
But it is quite different from web MVC that was popular with web frameworks like Struts.
I haven't looked at the more recent javascript frameworks, but my intuition tells me that they are probably going back to the original MVC pattern. (Observer pattern to notify views when model changes)
I've had as a low priority idea for a few years implementing a web MVC framework that is somewhat closer to the original inspiration - not because it makes sense for generating HTML (though it actually works quite well for that) - but because it would reduce the impedance mismatch with a client-side library using the original MVC pattern.
I have not actually done this for a number of reasons. The top one being that when you scratch an itch that you think someone else should have, it is much less fun and likely to work right than when you scratch your own itch. But it still bugs me that nobody has written one that works like I think it should...
As most developers in those days hadn't started with web apps it wasn't surprising that the term MVC was used - e.g. we were writing MVC C++ wrappers for simulations in 93/94 and Java MVC simulations in applets from '95.
But a 2000-2001 handrolled MVC framework does not qualify as "pre-Struts".
I was writing RDBMS in dBase, compiled with Clipper, on MS-DOS, in the early 1990's, when I was about 30 years of age. (I was the "old guy" 20 years ago)
Wow! The decades just keep passing by with increasing relevant speed.
I tell the younger guys that before IDE's and flat memory models were around, when you programmed, you went looking to buy three things.
1. Language/Compiler 2. Linker 3. Editor
And you will spend just as much time in the linker file (segmented memory back then) as you did coding.
The newer tools are just light years ahead of where they started back then. Its one area I will never look back at and wish it was still around.
Around 9 years ago...
Me: We can abstract most of that data access with a simple table oriented orm. Not all of it, but a good 80%.
Younger Developer: Nope, That is what record sets are for, it is right here in the Microsoft docs (pointing to the ado api)
...
5 years later, he had moved to a different company, and I received a phone call from him: Just called to say that now I understand what you wanted and how it is simpler.
Me: Then I failed to communicate properly. What could I have say that would have make you give it a chance?
Him: Nothing, I needed to learn it the hard way.
Experience teach.
A few months ago, working with very young dev. team.
Tech lead (late 20s): We need to do all using TDD, if it is not TDD we don't touch it.
Me: Agree, but TDD is one of several tools to DDD; the developer needs to understand what its building, not just that all checks are in green.
Tech Lead: The devs only need the proper test.
Now they drop the core calculations from the project because they couldn't understand them by just looking at the tests, I got task with that, and a salary increase. And some how the tech lead think it is unfair because he "gets" Git and Resharper much better than me.
Aaawww, the luxury of being young.
Pragmatism might correlate with experience, and experience is only gained with time (thus age), but I'd be careful about jumping to that conclusion. There's nothing beyond assumption (this article included) that says younger people are always, or even usually, less pragmatic.
[Edit: That said your tech lead is an idiot if he thinks he should be paid more for a better understanding of technologies tangential to his core goal while he has a weaker understanding of the goal itself.]
Pragmatism is a very high contributing facts. My personal experience has not show me IF pragmatism is better. Instead experience has show me WHAT is worth to be pragmatic about.
My observation is that experience leads to emotional maturity, which leads to better pragmatic choices. It is the fear to make mistakes, hence the industry coined "Fail fast". It is the ego boost of "I just learned this cool technology", as opposed to "If this is so cool, hasn't been invented before? How did it look like?" (Another post showed an example with MVC). It is the "I own the world" feeling that we all have as young adults. And there are some "bad" apples in the VC culture that can exploit that.
[And I don't think the tech lead is an idiot, he is where I was 18 years ago]
I like it when that happens. :-)
> And I don't think the tech lead is an idiot, he is where I was 18 years ago
I shouldn't have phrased it that way. The idea that you're more valuable than someone who can solve a core business problem when you can't is idiotic. He himself is probably not an idiot - we've all let our emotions get the better of us.
All developers make mistakes -- "I built this because I was worried about X but I should have been worried about Y." The problem is making the same mistakes over and over.
I think TypeScript is actually one of the more genuinely interesting developments recently--it's state of the art circa 1996 (Abadi and Cardelli's "A Theory of Objects.")
This is not really a dig at software development. There is, for example, very little in aerospace that has changed more than incrementally since the 1970's. But people have this perception of software development as this rapidly changing field where knowledge becomes obsolete in the course of a couple of years, when in reality the basic principles are really quite well-developed and mature. Keeping up with software development technology is mostly a matter of figuring out how people have gussied up old ideas with new syntax.
All of the interesting stuff now is domain specific. Algorithms for self-driving cars? Yeah, that's something that we didn't have 20 years ago.
Also the popularity of javascript in the geekdom is in my recollection fairly recent phenomenon. It became interesting only after ajax, before that it was a leper like php.
There is an annoying pathology at work though. During the 90's most experienced developers were incentivised to move into management or sales roles. Many of the management/sales roles these developers moved into have disappeared.
There is a population of older software developers who kept coding through the late 90's and early 00's who are almost invariably awesome.
There is also population of older developers who left day to day coding work and have seen their employment prospects diminish who are trying to get back into development. This is a more difficult population to work with.
I primarily work in the Energy sector and there is no definite bias towards hiring young.
I would suspect this generally also applies to other industries.
As I'm prone to saying, I cost as much as two junior programmers, but I can do things that two junior programmers can't do. And actually, cost is one of the problems older programmers have... senior == expensive. On the other hand, if you're in the industry for 20+ years and haven't found a way to make yourself and your work more valuable than what some drone straight out of college can do, but you expect to get paid more than said drone, you're asking to get sidelined.
The problem isn't the myth that older programmers are less flexible than younger ones. The problem is that so many older programmers haven't attended to their careers in a way to make themselves substantially more valuable than some pliant kid. It's not enough to do the kid's job better... you have to do things the kid CANNOT do.
Love it. I'm about the same place in my career, and I completely agree.
If only I had listened to my mother... But, noooo! I was almost 30, and my advanced age meant that I (thought that I) knew it all...
Here I am, almost 50, and I still don't know nearly as much as I thought I did.
Games happen to be pretty good as well because they let you wrap several different kinds of technologies together - the tricky part with games is really that they need great design much more than they need good engineering, and yet you can ignore this as a coder because you can always make your renderers and simulations more generalized and complex.
Don't undercut yourself; you provide much greater value than that. People outside of engineering don't have a really clear picture about the roles and positions, and the cost structure of running a development team.
I remember a conversation with one of the clients. He was trying to interview candidates for project manager position and asked me for its job description. I explained to him what the typical structure of a development team is and what roles different people play, like project manager, development manager, architect, team lead, front-end developer, back-end dev, dba, UI designer, qa, etc. Then I casually mentioned I'm doing all those for you in this project and you are actually saving a lot of money despite my high billing rate. He appreciated that.
I suspect that in Stack Overflow discussions which discourage lols and memes, older programmers are more likely to find an intrinsic value from participation and are likely to be better able to communicate their responses clearly (just by having more experience writing).
Joel Spolsky created a site he (as an over forty programmer) deemed constructive. Those sharing his general experience are more likely to share his views about what is constructive.
The same might be approximately true for HN (PG is about a year older than Joel Spolsky). But the less ruthless editing of HN may play a role.
I was surprised how little the young Sr Android developer at Google makes. They obviously hired him to pay him as little as possible as compared to an experienced lifelong developer. Google I guess doesn't care about bugs or experience seems like most tech companies they just want to keep pushing new releases to get you to buy and upgrade to them.
The Sr Android developer is constantly complaining about a lack of free time on his google+ page and has been taking a lot of leave. He's yet another young developer working obscene amounts of hours so Google doesn't have to pay for extra employees.
I meet great programmers all the time, but I never see them on job interview. The reason is because good developers do not apply directly to jobs. They find out about positions through their friends and move through their network, not through recruiters.
And it's the correct way to do things. You're never going to be able to learn who a person is, the whole person, from a resume and a battery of interviews. You'll learn who they have groomed themselves to look like, which won't be a real person.
The answer to all the problems with hiring--not enough female candidates, not enough skilled candidates, etc.--is all entirely due to the hirer not socializing enough with the types of people he or she wants for their position. If you don't know the people you want, then you won't find them.
In short, treat people like people, not equipment. The noun in HR is "resources" not "human".
So if I were to go by that then, I'm a bad programmer?
For all we know, people who are good at getting karma on Stack Overflow stay on the site simply because they're good at getting karma on Stack Overflow.
Edit: I'd love for this study to be meaningful, as I'm in my 30s. But it doesn't seem to be.
> They found that an individual’s reputation increases with age, at least into a user’s 40s.
I really hope that's some bad paraphrasing, because I take that to mean for user X at time T, rep(X, T1) <= rep(X, T2). Unless you're very actively malicious (for which you'll get banned) your reputation should never go down by a meaningful amount over time.
Whether this constitutes good science or not is not something I'll speak to, having only skimmed it. But certainly stackoverflow.com looks like good data for this kind of research to me. I'd hope they'd have done things like control for different fields, different activity times for the accounts, etc... But I don't know.
Better. And admittedly this is what I was hoping they meant - I was probably being a bit too pedantic.
I suspect high reputation on SO reflects (at best) either a developer's perceived confidence in her skills or her desire to share whatever knowledge she has! Perhaps the title should have been "older developers like teaching." Not as sexy, though.
I was working with about a hundred engineers on a huge code base in an
arcane language (CHILL).
I was able to learn Intel assembly to patch live systems, pretty good proprietary configuration management, and quite a bit about the Dilbert principle.At that time, I worked with Old guys who were great, and old guys who were less proficient than me. One of my friends who was 22, came in and ran a project.
The bottom line is, if you were adept when you started, you most likely get better with age, if you just apply yourself a bit.
I think when that happens a real hacker will stop hacking code and start to hacking something else. That being said, I am sure there are hackers that never get tired of learning new tricks.
There will always be some predisposition, as within most industries, to tend towards age discrimination in certain situations. However, my guess is that software will begin to look more like established engineering professions, demographic wise, as time goes on.
The only real doomsday issue I ever ran into with older programmers was an increasing unwillingness (in some) to add onto their stack. The good news is that after the third or fourth new language you pile on, the next one gets a lot easier. If you know C, a lisp variant (although I prefer an ML variant), and a decent scripting language (I learned perl first, but I sort of hate it), you're not likely to get surprised by much. The programming hivemind really can't process new ideas all that quickly, so you rapidly gain exposure to the core ideologies that form the foundation of the fancy 'new' trends. And then you're just learning some syntax and getting comfy with a new API. Unless you get lazy, shit really does get a lot easier. But with tech, the next wave is inevitably coming, and you're either on it or under it.
I think a person with that knowledge set might be surprised by this:
https://en.wikipedia.org/wiki/Constraint_programming
New programming paradigms emerge over time, and force us to rethink our approaches to solving problems. I think the key is not learning many languages, but learning many paradigms, and becoming skilled in the use of one paradigm before moving on to the next. Learning several languages with the same approach to programming is not as useful as learning several languages with completely different approaches.
To use an easy example: who do I want on my team, John Carmack (42), or some 19 year old kid that is working on his first engine (and is likely to stumble over a million landmines due to lack of experience)? Easy choice, I'll take the ridiculously vast experience and refined skillset.
Try building something like the latest id Tech engine or the Unreal Engine from scratch. Carmack could do it, a 19 year old kid writing his first engine could not.
Knowledge != skill
To me, all this study proves is that people who have spent more time on the earth have accumulated more information, on average. Which should be completely unsurprising.
Yes, hire an individule that is excited and willing to learn new things and keep up with this crazy industry the way others keep up with sports, politics, and whatnot ;)
Either that, or I just communicate better with people my age ;-)
It's not that these people think older programmers are incompetent. A few of them do, but mostly, it's just brutal age-grading of peoples' careers. If you're a 45-year-old non-manager (never mind that you might not want to be a manager) they're afraid to have you around their 22-year-old, Red Bull-drinking brogrammers-- especially if you've done a couple startups and you're still not rich. Then the VC-istani founders definitely don't want you around because you might indicate to them that billion-dollar exits don't happen just because you're a nice guy.