Is software development really a dead-end job after age 35-40?
quora.com
quora.com
The fundamental rule of career progression in the technology industry is to position yourself as a domain expert in something more specific than "programming".
It's very difficult to "own" "programming" in a way where you can use scarcity to drive integer multiple increases of the median salary. It is not as difficult to "own" distributed systems, sensor fusion, software security, or OS kernels.
As a general rule, the people getting outlandish half-mil-a-year offers from big tech companies are domain experts, and the people on Twitter shocked and upset that they're never seeing these offers are either (a) generalists or (b) people who have chosen to specialize on the craft of programming, rather than a domain to which programming can be applied.
That's not a value judgement! There are a lot of ways in which refining a true engineering discipline for assembling software is harder than kernel development or fast computer vision processing. It's just a statement about supply and demand, and about ease of demonstrating value.
Also I've noticed a lot of sub-fields like computer vision or self driving cars where there's a great deal of nerd interest but very little actual employment.
In fact, I have a feeling that computer programming is the stick that's holding the entire STEM tent up---if not for programming as a consolation prize you'd have a whole lot of physics and chemical engineers making lattes at starbucks---and further that web development is the stick that's holding the programming tent up.
I just used to say I am a computer vision expert, because in the ton of things I can do, this is a relevant domain.
Recently, advances in deep learning made half of the computer vision field obsolete. I just read some cutting edge DL papers, linked that to the things I know, and now I am a deep learning integrator.
I was taught in engineering school that my craft is learning and problems solving. I sell it as knowledge and expertise but the truth is that I am constantly learning in the domain I sell as my specialty, which is what everyone who is decent at anything actually does.
I'm strongly convinced that the less (nerd) sexy a field is, the more money there is in it for a good programmer.
The crappy programmer working conditions in the gaming industry is one example supporting this theory.
I swear, I repeat this comment in almost every news article posted about how "We need more STEM graduates" and "The STEM job market is super hot right now".
Yeah, programming is. I know so many graduates of a BS in math, physics, chemistry, biology, ecology that just couldn't find satisfactory employment. They either got a second, mostly unrelated degree (in management or something more industrial) or are working at a mostly unrelated job.
Even in traditional engineering disciplines, while it's easier to get at least OK employment the demand just doesn't seem that strong compared to CS. I have many friends that graduated with civil, mechanical, or chemical engineering degrees (in at least one case, an MS) who are vastly overqualified for their lab tech or drafter positions.
I have a strong background in mech engineering and robotics. Yet, for the two years I worked in that domain, I never had a single recruiter contact me out of the blue. Now, my mostly amateur computer skills somehow landed me a "tech" (read: IT) job. In the 2 months since I've changed my current title on linkedin, I've had 3 recruiters contact me.
I think this goes back to being an expert in a "domain". Being able to apply programming to that domain is far more valuable.
That is part of the reason for the high pay. There is always risk associated with specialization. You can't become an expert without specializing in something, but if you specialize in the wrong thing your effort may not be rewarded.
That might be the reason people demand higher pay, but it wouldn't be the reason why companies pay the higher pay. They pay it because there's a scarcity of people, and/or because they get some multipled value back. No company cares if I've specialized in the 'wrong thing' - they just won't hire me.
It's the classic example of complaining that there are no jobs, while the industry complains that there aren't enough talented people. I get a few recruiters pinging me weekly and I'm not looking to move jobs - their story is always that there is a huge demand for good people.
I think the CV job market is unlikely to get much better, at least in terms of numbers of positions available. On the other hand, it's a stable job market that isn't going anywhere. The pay is already above average and it's not likely to go down because of the experience required. There's no shortage of applications and it's not dependent on a particular language, toolset or hardware. Virtually every big factory in the world employs some kind of machine vision system, for instance. And pretty much every computer vision deployment has to be modified for the application.
There are much easier ways to make money though. If you want to be a wealthy programmer, get on the web/app development train and accept that you might need to pivot every couple of years.
I'm not sure every programmer should start with trying to specialize in a domain. But definitely, at some point, you're reaching diminishing returns for getting better at programming.
Put another way: Getting better at the craft of programming allows you to write programs faster and better. Specializing in new domains allows you to do things you couldn't otherwise. This is the realization that made me decide to stop learning new programming languages, and instead spend my time learning new domains - I realized that learning Haskell, while incredibly fun and rewarding to my abilities as a programmer, will not let me make fundamentally different things than with Python. Learning e.g. Deep Learning, however, would.
Btw - even learning totally other skills - e.g. learning 3d modeling helps me a lot in gaining deeper knowledge of 3d than I would otherwise have - even if it's not 3d programming per se, it's still relevant. And learning new Maths is not as directly applicable or as valuable as learning new software domains, but can open up new avenues you wouldn't otherwise have, that learning "yet more programming languages" or similar won't. (It's still more valuable to work directly on relevant things, of course, but sometimes it's fun to broaden your scope in relevant ways.)
I've never used Python, but I like Haskell for the kinds of problems where I'm trying to do something complicated and a little confusing, and I want the compiler to let me know if I've asked it to do something that doesn't make sense. That sort of thing can save a lot of time in the long run, and I usually feel good that the resulting software is reasonably robust. I expect a good Python programmer could write an equivalent program, it's just not the way I like to work.
Libraries are of course often a deciding factor, and so are performance requirements.
It takes some esoteric innovative features to make a difference, but that will also cut both ways; it'll make it harder to hire for and scale, too.
I'm a pretty capable "generalist software engineer", but what keeps me employed is expertise in virtualization and high-performance virtual networking. Prior to that, it was expertise in distributed systems and a knack for debugging distributed failures. The history here is relevant: later in the thread Thomas points out that you can switch domains. My time spent in distributed systems with multi-millisecond quorum periods is more or less directly applicable to debugging synchronization issues at CPU clock speeds. The tools used to observe the issue are different, but the reasoning process for untangling the set of plausible partial orderings is the same.
Specialize in something valuable. Continuously evaluate the next most valuable skill to acquire based on where you are and where you want to be.
There's a pretty common trend in GameDev -> Embedded Systems | High-Speed Trading.
The skillsets are very similar while the domains are quite different.
Not everyone's a climber, and being in "a dead-end job" isn't really a bad thing if you're not ambitious.
I'd just like to spread the message that it is absolutely OK to plateau. You don't need to be a renowned domain expert, you don't need to go into management, you don't need to start your own company... if you're happy where you are, don't sweat it.
Not saying this will definitely happen, but it's a risk, and you don't need to be a ladder-climber to protect against it.
I think most people would probably do better if they just stopped allowing their expenses to grow with their income, and saved and invested more, both in equities and in forms of passive income (like rental real estate). That way, not only are you insulated from shifts in the industry around your primary employment, but you can also probably retire early.
To me, the real perk of working in tech is not that there are so many jobs that I can find one that pays incredibly well; it's that I can find one that pays nicely but aside from that has some other perks.
A lot of friends and workmates have told me that I could be working in a better paying place. After looking into quite a few job offers, my conclusion is that for now I'll stay in my 8-to-4 job that pays me twice as much as the average in my area (average in the sense of all the population, not just tech jobs, obviously). I used to have a high-paying, high-stress job; I don't want to go back to that, it's not worth the money.
I must add that I'm EU-based. I understand that in the US, with much less of a safety net, maybe optimizing for money is a more attractive idea. I can't really say for sure.
For example: I've spent a large chunk of my free time over the last few months learning how to typeset signs in fansubs and make them look good, something that has no economic utility whatsoever, but makes me really happy when I typeset something that looks good. Yeah, sure, I could have spent that time furthering my career by developing a marketable tech skill, writing tools for my company on my own time to impress management, or writing an open-source piece of software to pad my GitHub portfolio, but I'd rather do something fun for myself than do any of those.
The problem in software development that current way how company financing is set up is that you do not need domain expert to make it.
In other words, it is nearly impossible to be hired as domain expert because very small number of startups needs one: just do some "growth hacking", get to YC, and raise money. Maybe founders need to domain expert to get to YC but they you will kick him or her out as soon as they get "YC stamp".
And this is reason why there is no database experts in all these new database startups, there is no security experts in security startups, nobody can figure out to make even half decent Dropbox clone, etc. The list goes on.
And there is also ageism: all "domain experts" are 30 something.
Some people get to this point and never step back on the gas, because it seems like things are going to be great forever. Once people get too comfortable, it's only a matter of time until it bites them.
IMO it's important to continually reinvent yourself throughout your career, to keep things interesting, but also to always put you in the best position to take whatever the next step is. If you wait until it's time to take that next step before figuring out where you want to go, it's too late.
But I don't agree that having constant side projects and learning the new cool language/framework du jour is necessarily valuable.
I think that there's just too many technologies out there, moving too fast, to be proficient in a significant fraction of them, even if you invest all your time in learning them.
I think there's more value in learning how to do engineering well in one language than learning how to do basic stuff in 20 of them. Because the skills and knowledge of going deeper transfer much better than knowing syntax, etc - stuff you can always pick up for the next job once you know what it is.
Is it a rule, though? I hope not. I'm a 40-year-old generalist, and so far I haven't had problems finding work. Sure, I'm not going to get a half-mil offer from anyone, but that was never the case at any age.
i've been wondering if i should pick up something entirely different on the side (e.g. machine learning for broad applicability, though that does not excite me at all), or to instead diversify from my current niche but learn to write tools across a broader variety of languages and ecosystems. it's scary sometimes how the entire programming ecosystem can change overnight and leave once-valuable skills in the dust.
Some fields might be locked up by postgrads (crypto engineering is not one of them, and I doubt language tooling is either). You should check before you invest too much in it. But I would advise against being spooked by academic credentials. Good places to work care more about conversance than credentials, and you get to draft off of all the research work the academics publish before moving into industry to compete with you.
I've been in this industry since copper and telco was hot shit.. I went from doing Telco programming > IT > Web Development > scalable enterprise applications.
Why bother stressing over something you have no control over? Do what you love and the money follows.
i do have some hope that i've gotten into my current niche (static type inference for dynamic languages) reasonably early in its life cycle, but if i'm wrong i don't want to have not kept up with the larger world at least to some extent.
(to be precise, i'm not so much worried about being able to transition my skills to something else, as about not being given a chance to do so unless i can already demonstrate the new skillset people are looking for.)
I vehemently disagree with this. Kludging together an unmaintainable codebase that barely meets the spec might be easy. Aiming for a notably higher level quality beyond that is NOT an easy thing at all.
Obviously, the nature of this discussion depends on the complexity of the task at hand. There are many profitable ventures with low levels of complexity in the software implementation, and your comment may hold true for such scenarios.
However, there also many ventures that require significantly complex software to meet their goals, and will require skilled developers to have any hope of not collapsing under the weight of shoddy implementations and impenetrable abstractions.
Developing transferrable strategic and architectural skills between verticals (client facing, or technologies) is a key aspect that I see being missed with programmers.
No framework will make or keep your career, nor will a specific language or piece of tech. Knowing how to apply technology well, in a way that doesn't need to be entirely thrown away every 2-3 years is invaluable, and as a result increases a developers value.
Mobile app development is becoming quite clear cut, one only needs to read the docs and know the APIs.
I used to know this guy who knew the ins and outs of the health club industry, and he could program a little. He made a lot of money. I think this is more in line with what tptacek is describing.
Being an expert in iOS is more than just knowing how to program in Swift/Objective-C. It encompasses a deeper understanding of mobile development and the apple ecosystem.
True senior level iOS people will understand core user interface design principles as they relate to mobile, and will be intimately aware of Apple's Human Interface Guidelines. They'll understand mobile accessibility and be deeply familiar with the myriad of tools in iOS. They'll understand internationalization and how to design an application to support various calendar systems, and text layout paradigms. They know the ins-and-outs of Apple's provisioning and certificate system and can quickly sniff out configuration issues. They understand how important testing is and how well supported it is. They know how to setup automated builds using xcodebuild, and how to support automatic unit and ui tests.
The list goes on and on. Certainly one could just be an app developer and stop there. But being a mobile domain expert in my opinion is a much more valuable albeit niche position.
Management: I would argue that it's critical to garner management skills well before you turn 40. If you wait until 50, you're going to find it very difficult to move from talent-oriented jobs to management ones.
Coding: I hate to generalize, but it's very likely you'll learn so much over your career that you will become an ineffective developer. You will know how to do things well and will have a difficult time doing things just to get them done. It's fairly common for projects to need completion over correctness and quality. This is where younger developers are great. They don't know they're creating technical debt, so they have no angst over it. But you will and this is bad for the project and for you. You probably need to find a place in software development where you can mentor and lead, but reduce your involvement with actual day-to-day coding.
Challenges: I personally suffer from "it-must-be-challenging-or-I-get-bored" syndrome. The longer you write code, the harder this is to suppress and the more you look for shiny things to work on. This is bad for you because it's bad for your employer. If you don't suffer from this, you're amazing and any employer would love to keep you until you're dead.
And then you will learn to be pragmatic and solve technical debt only when there is enough time for it or when it brings a clear benefit in terms of business value or development speed.
I can tell this from my own experience. As a developer you typically progress along a path; in the beginning you just don't know how to do things 'well' so you're introducing technical debt without knowing it. Then you'll learn about clean code, design patterns and what not, and you think you have to apply this knowledge everywhere. Until you learn that there are times to be pragmatic as well.
This pattern is not unique to programming, it's universal. See for instance https://en.wikipedia.org/wiki/Shuhari
I disagree: it is when you are young that:
* you spend and lose your time reinventing the wheel, either because you don't know the wheel you want already exists, or because you are sure you can do a better wheel (and after an extra 3 months it ends up being square);
* lose time overdesigning things because you want to apply all your lessons and your new readings, despite the fact that they do not map to the problem you need to solve.
So I have to ask - how do you do the management portion of that? Getting into it, I mean, more than just developing the skills or interest.
I've been trying to get into the management side of things but get stymied over and over, and typically people who express disinterest (and no particular aptitude) keep getting chosen to do it. This has had a tendency to wind up with most of the people involved (except the person who gave the promotion) quitting, and it's really frustrating to watch it play out again and again.
I suppose in one case I did get promoted to lead, but I was lead of nothing, because literally everyone else had quit.
The point is I want to move - badly - in that direction, and see lots of opportunity to do lots of things there, but keep getting stymied. How can I get past that?
I don't know if I can handle this one getting worse.
On the other hand, if you want to hear how to make it past 40 in software, this is probably an excellent place to ask!
1) Don’t include irrelevant experience on your resume. Nobody cares that you were writing php websites in 1997. Try not to put anything on linked in or you’re resume that would indicate your age unless you’re one of the top people in your field and your experience makes you stand out.
2) Keep up with new languages. Don’t be the guy that only knows perl when everyone else is using python. If you aren’t learning rust and go today, you’re going to be left behind five years from now. And once everyone is on go and rust, you should be learning the next thing.
3) Stay curious. I know you have a family and kids and other commitments, but you have to stay interested in the world. Keep up with business news, and science news and stay connected with pop culture as much as possible. If you’re applying for a startup with a bunch of 20 or 30 something’s you, you need to be able to meet them where they are.
4) Don’t get complacent. You’re always a bad quarter away from getting laid off, and that becomes more true the older and more higher paid you are. Keep your resume updated. If recruiters aren’t beating down your door, you need to ask yourself why. Because if people aren’t trying to hire you, your employer probably isn’t excited to keep paying you either. I was a junior guy on a team with all sysadmins 5 years ago. They were all the same age as me, but with many more years experience all at the same company, doing the same thing and really resistant to changing. I came in and really dove into the deep end with devops, despite having little programming or sysadmin experience (I had a networking background). Within 5 years I was a senior developer, making more money than any of the rest of the people on the team, and eventually got poached by a recruiter offering 40% more money. They’re all still there barely holding on to their jobs.
The important principle is that you should devote your learning time to things that are more likely to survive. A good way to do this is to pick something that has been around for a long time. Knowing how to write an optimized linux kernel driver is far more long-term-valuable than, say, a Javascript framework. Knowing how to do quantitative marketing is even more valuable than that.
The absolute worst thing you can do is to chase the new shiny every year. If you do that, you will never be more experienced than the most junior member of your team.
Work on understanding the business needs and not just business requirements for your feature.
Learn how to foster team growth, not just your own personal growth.
Figure out processes to help the team and not just building your feature.
Don't be intimidated by younger engineers who are trying to climb the ladder. Help them succeed.
You don't have to be as actively sought after. You should be staying at positions longer - 5 years, maybe even 10. (Note well, however: By this point, you probably have seen several toxic environments. If you're in one, don't wait - get out. Life is too short to put up with it.)
I have a file where I keep track of headhunters that I think are worth their salt. I'll use it if and when I feel like it's time to move on.
For the record, I'm 55.
(I'm 40 and my current role is with a small company where I implement solutions rather than have a title)
Bingo.
Security is one of the few cross-discipline, cross-domain specialities where it is possible to be a reasonably good domain expert and still have a good coverage across other domains. The fundamentals don't change. (And I say this as someone who's been immersed in the field for 25 years, so of course I'm biased.)
There are few other domains that can offer the same level of constant demand.
The beauty - and the depressing aspect - of security is that maybe 10% of security is about software. The remaining 90% is all about what is between people's earlobes. To become good at security, you'll need to learn how to explain extremely difficult and often subtle concepts. And you'll have to do that for both technical and non-technical crowd. That's a fantastic and continuous trial by fire. It's also lots of fun!
Bonus: because everything is a tradeoff, you really can't avoid the engineering approach. Teaching the concepts and reasons for tradeoffs to less senior developers will be part of the job specification. Fun.
> language/framework of the week
To quote something I have often stated in our interviews - there are only four programming language families. Everything else is syntax.
Understanding customer needs and translating that into product definitions is something that will likely never go out of demand, and is needed in industries outside tech. And if demand for distsys goes out of style I'll just learn something else. I've already kind of done that, having cut my teeth on embedded systems, followed by a short stint in mobile before getting to where I am now.
Judging by what I see around me, I don't see the strategy being any less effective in 10 or more years.
More seriously, having had a look around my cohort, there aren't that many people who've left programming altogether, and those that have have done so for personal reasons. Generally people have moved "upwards" and acquired management track positions. Small companies are good for this - because it's so flat you can easily get a high-ranking job title which you can then leverage into the next job.
Look "up". Look at the older and more senior people in your organisation. Maybe even directly ask them about careers. Recognise that if nobody around you is over 30, you're either in a very unusual place like an SV startup or you've wandered into Logan's Run.
Physically, I age linearly n.
Mentally, I age logarithmically 17 + ln(n).
Think of it like being on a first date: your idealized self. You're real, but like 120% real.
So far in this thread:
- continue to learn / evolve
- go into management(well, someone will mention it)
- Go into: consulting / start your own business / remote work
I'm not too far from 40 myself. Any advice?
This is a huge advantage compared to some recent graduate that has no idea, knows nobody, and is still learning the geography of the industry.
Don't stop learning. Don't stop making contacts, friends, and other connections. At some point you won't need a resume to get a job, you'll just need to know who to call.
But if the fact is that a large percentage of folks doing programming a 29 won't be doing it at 45 and aren't going to have a good exit plan (if they made a high salary in that time), then in a sense what's being said is:
"Programming is a dead-end job for those under forty" and about forty is the end-point for them.
I was self-motivated to constantly learn, and had no trouble doing it... when I was young. It was the right profession for me then, when I had the interest and passion.
After a while, though, much of it starts to seem the same. The towering vistas that were once full of mystery, adventure, and discovery turned in to endless plateaus of rinse and repeat learning of technical minutia and buzzword tech of the day. I also developed lots of new interests, and started to want to have an actual life outside of work.
So then I very consciously decided not to strive to excel in my field anymore, because it would just take way too much of my time, which I'd rather spend doing other things. Then, before too long, I burnt out, and took a long break, eventually coming back to the field because I burnt through all my savings and needed money. This happened a bunch of times, with ever longer breaks in between.
Every time, I was able to brush up on the technology knowledge and skills that I needed to get a job, but I was never as excited about it as I was when I was young, and actually started to dread working with it, as I found it mind-numbingly boring.
I should have definitely completely switched careers after my first major burnout, but I didn't, and I've come back to the field again and again instead. This has definitely been a mistake, but here I am. I'm good enough at what I do to get work, and to even impress my managers... while I still haven't burnt out this time around and am still capable of putting in the overtime to get a lot done. But it's just a matter of time until I burn out again, and this pattern of not working for extended periods of time looks horrible on my resume, I haven't learned nearly as much as I would have had I stayed employed the whole time, and my career is nowhere near as advanced as that of people who can hack full-time employment long-term.
I don't think my case is typical, as most people seem to stay employed continuously in the long run. But I can't, and I feel I'm way too old for a career change now... and, anyway, I suspect whatever it is that I'd switch careers to would get boring before long and I'd burn out again. My interests are far too varied and I can't stick to doing any one thing for long before getting bored.
This is not to mention all of the endless corporate bullshit one has to put up with at work. Some people are really career-oriented and can deal with it. I'm not.
I took my current job with the goal of transitioning into a leadership role, either product or management. I was walking into a situation where I knew people already here and was hoping to leverage that. Those people left a few months after I started, and now I'm kind of stuck on an island. I've approached my current boss but he's completely uninterested in promoting any sort of career development.
Bottom line is I'm burnt out, depressed, and bored out of my mind. The idea of learning Yet Another Web Framework fills me with dread (I'm currently doing Node/React stuff and hating it), not because I don't think I can learn the tech, but because it's no longer fulfilling in any kind of personal or professional sense.
So, I really don't know where I'm going, or what I'm going to be when I grow up.
A lot of times I feel like there is not career track after you hit "Senior Software Engineer", especially outside of super specialty tech. It feels like the only real track is management, and most places don't want to promote or change the management structure at all.
It's honestly very hard to get excited about going from Senior Engineer to Staff or Principal or whatever the text title is. Nothing will change in terms of the job. Pay is pretty well pegged to what you started at with single-digit percentage increases every year or so.
Skill wise? Learning new frameworks is just not as exciting as it used to be. Even then - the reality is that whether you're the most skilled dev in the world or a mediocre dev with only a 9 week bootcamp of experience, you're going to not understand the new environment you're dropped into when you start. It's full of weird quirks and historical oddities. It'll take time to understand those and get productive in whatever the particular stack is.
All of which feels like... every time you start a new job, you're starting over. With a little more insight and vision, but fundamentally, doing the same thing over and over.
I really think this time I'm out for good. I'm approaching that age where it's hard to get programming jobs anyway. I've got some side businesses doing OK; I'm working on ramping them up, and trying to get some teaching gigs to fill the gap in the meantime. And if all that fails I'm considering getting back into the lawn care business like I did when I was a student.
I used to be very passionate about programming: I started in 4th grade, started my first software business in college, and was always doing side projects.
My strategy for my career is to try and position myself into a position of enough authority to decide priorities around software engineering, and what my team is working on. Then I can delegate all of the boilerplate to the younger engineers, and spend more time collaborating on much more interesting and difficult problems.
I look around at my bigN and I see all these 20something people who just love what they're working on and are passionate about it, and I get it. I was the same way at that age.
I just don't care anymore, tbh. I want to work on something fun, and things that are fun don't usually provide a paycheck. So I grind away, and the years waste away, and I don't know what to do about it. I'm smart enough to get by without investing a lot of effort, but I'm really just wasting my life.
Programmers to programmers: You must be a super agile ninja capable of teaching yourself everything at a moment's notice.
Businesses to programmers: Yeah, we still need people doing Java 6 and VB6. We're also going to disregard all of your security and technical debt concerns. We're also going to hire managers who suddenly change a bunch of tech, causing the rest of the team to re-train themselves, harming their career.
I still don't get where this need comes from. The world still needs LOB developers. The uber-ninjas haven't solved that problem yet. It isn't going to maximize your lifetime earnings, but you're not likely to retire under $100k either.
Programmers are extra-ordinarily hard on themselves and other programmers in industries where businesses still just don't give a fuck because they are making so much.
I really wish I knew why you guys did this to us.
I'd be interested in a demographic breakdown of the people who say this. I'd be willing to bet that most of them are in their twenties, live in SF/SV or Seattle, and/or work at startups or insanely demanding trendsetting companies (e.g. Google, Amazon, Tesla, Apple). In other words, these claims are made by people who care about being "cool".
I don't think you'll hear this much from people who live in less trendy areas and work at less trendy companies. Older people and people who work at conservative companies in conservative areas of conservative states (Hi, I work at a B2B telecom in Plano, Texas, and I'm in my 30s) probably aren't going to be making those kinds of claims.
If you stop caring about being "cool", you'll find plenty of work that'll sustain you until you retire.
I imagine there's also a good helping of: "Hey, the MVP works and I won't be here in years 2-10 maintaining it, so everything I can see indicates I successfully learned X on my own in a month."
In 2000, a 40 year old was born in 1960, when the home PC was nearly 20 years off.
A programmer who is 40 today was born in 1977, and they could learn to program while they were in diapers.
These are very different experiences, and the bar will move over time.
That being said, if you've been in the occupation long enough, you figured out that its a continuous learning occupation. The thing is, the fundamentals I learned in the 80's and 90's still do me in good stead to this day. I don't write in assembler or even C anymore, but concepts they taught are still deeply ingrained.
I've got another few years in me before I can retire, and when I do, I'll continue writing code for fun. Simply because I like it.
(Oh ya, first computer was 3.5Kb (3583 bytes!) VIC 20. The first computer I ever SAW was a neighbours PET 4040 he brought home from school over the weekend. I bought the VIC-20 the next day.
The "fundamentals" predate you and I by quite a few decades. Alonzo Church, Turing, Gentzen, Liskov... their work really paved the way for us all. I suspect the lambda calculus will be as useful 30 years from now as it is today. As long as I'm working in a language with first-class functions as values I think I'll be okay.
It's funny that many people still hold the belief that even mathematics is a young person's game. There are plenty of examples of mathematicians making significant contributions after the age of 30.
For me I think the life of a programmer begins at thirty.
I'm sure some companies have an age bias, but I think it will be less and less as the generation who grew up with computers gets older.
?SYNTAX ERROR
Computers and software use, maybe; for software development it hasn't happened (it seemed to be heading that way in the mid-1980s, backed off starting around the beginning of the 1990s, and seems recently to have turned back around at least in terms of what lots of people are saying. We’ll see...)
oh, those 1st world countries...
That said, if you're a software developer and you're also good at communicating and managing people, seriously consider moving into management. While I think the stories of the '10x' developer are true, I also think a good manager can double or quadruple the effectiveness of their entire team. That has a huge impact both on the careers of the people being managed, and at the company.
Another way of thinking about this: Managing people really well is really hard. Most managers are not the best managers. Average managers often end up doing things that reduce the output of their group in the interest of things not going horribly wrong. The Pareto distribution rears its ugly head, once again.
At least as a software developer, you're only breaking code. But you start affecting people's lives, emotional well being, and career paths when you're a manager, and I find it rare where a manager understands this.
This created conflict exactly as you'd expect and team morale fell apart, projects slipped, etc. Of course, management takes no responsibility for this, instead diffusing blame to employees via suck-it-up type platitudes (couched in "nicer" language but with that essential meaning).
A good manager is really, really hard to find. Good developers are easy to find (relative to good managers). So, while I don't want to get into management, I also recommend it to anyone who might have potential in that regard.
This, I found, is too much for me. I have no remorse if I demotivate my managers; and I can keep my mouth shut and not say anything, to avoid demotivating my junior-dev colleagues. But as a manager, "keeping my mouth shut" is not an option.
But what’s in it for the developer? If the developers is happy and well-compensated bad has no managerial/executive ambitions/fantasies, why ruin a good thing (with a gamble, at that)?
But it is not a good idea if you really are passionate about the writing. For example, my daughter majored in English because she wants to write novels, not because she wants to teach English. So in her case I certainly wouldn't tell her to go get a job as an English teacher.
In my opinion, the second worst kind of manager is one that doesn't want to be a manager and would rather stay an individual contributor. Their inner conflict is harmful to the group.
If it's your job to magnify the output of your developers, when you know intimately how to do their job, you can get spectacular results.
Non-technical managers can't do this, they don't have the depth and insight to help shape their team the same way a developer does.
Being an old software developer is pretty nice. Fuck, man—being old is pretty nice.
I have a pretty deep network but I get more than half of my gigs from new contacts. The deep connex are far more important for references and social proof than they are for generating work (though they're good for that too)
If you still have the passion for development and for learning/improving you should be able to keep going.
It seems no one is 100% safe from layoffs or companies making bad decisions.
I would encourage everyone to explore creating products/SaaS if those things are interesting to you. There no better job security than running your own business.
startupsfortherestofus.com is a great podcast to learn about this. Rob details his rise from consultant, to small successful sites to a $XXM exit. Amazing story.
And this is inspiring, still my favorite talk @DHH Startup School: https://www.youtube.com/watch?v=0CDXJ6bMkMY
"Calling your own shots, running at your own pace, that’s pretty great."
Sure, you need some senior developers mixed in as well but young energetic devs are more bang for the buck.
From a "getting things done" perspective, I would vehemently disagree with you. If you care about things like 'having more reports' and 'spending investor money', then yes, you're correct.
The correct definition for senior developer vs junior developer is 'delivers company value without handholding' (vs 'with handholding'). If you've lucked into a young, hardworking dev who can do the former, remember to pay them well and don't burn them out. That crop will produce year after year for a while instead of just once or twice.
What I have seen is that when the younger ones look like they're working really hard, it's usually because they don't have a full grasp on whatever the task is, and they're putting in more hours because they keep getting their work wrong.
TBH I've only ever seen this from middle-aged company men.
My experience at Google has been completely the opposite of what you describe. I work with lots of people in their 20s, 30s, and 40s and a fair number of people in their 50s; I'm 35 and I don't feel out of place here at all. I can count on one hand the number of times I've stayed at work past 6 PM; as a parent of multiple school-age kids, there's been lots of flexibility. My team actually has a dedicated video-conference unit specifically to make it possible for those working from home / working remotely to take part in ad-hoc conversations.
The main thing is that you have to be good at what you do. You can't expect to just skate by. I've spent a lot of time mentoring new-grads and those in earlier stages of their career, and this has been recognized and rewarded. I've also written a ton of code and shipped things that worked the first time.
In the Valley / consumer focused apps - they are often focused on both very young target users - AND - very new frameworks and technologies. Plus they work insane hours.
I worked in Software in Telecom as a young man, and I was surrounded by middle aged geniuses, I felt useless.
My buddy worked at a big consulting firm doing .com stuff, he was a primary lead.
So yes, it has a lot do with products, the industry, how fast things change etc..
I enjoy the frothiness of tech, but it's a career danger.
Most of the people I knew working at the telco were in their 60s and started their jobs there out of high school. They were incredible domain experts and had retired from the phone company once already _with pension_. They were all rehired and getting paid huge rates on top of their pensions and some were even going into their second retirement.
Forty plus years at one company and these people were making a fortune and their knowledge is literally irreplaceable. Some even were experts across domains because they were smart enough to just move departments when they got bored instead of entire companies.
Very stressful job though.
But in 20 years from now, we'll still be installing classic land-lines, in which case, they'll still be around.
Idea: build a wireless framework with the robustness of land-line efficiency - good enough for 9/11 calls and emergencies etc..
Better to hire the social inept, easily manipulatable young guy, than your future competitor for your very own job.
Never stop learning, even tech you might dislike may provide a path to keep you relevant.
Also work on your soft skills.
A developer that can jump between technical meetings, discussing with users, other department, understands architecture and domain knowledge is much valuable than someone that just codes all day long.
When all else fails, you can always try to go consulting on the domains you love.
There are a few big catches though:
- You better be really good in both development AND engineering.
- You better be able to work with people. You may not be a manager by now, but mentoring takes on a giant role few years in. And very few opportunities arise where it requires a single heroic effort (capitalize when it does happen).
- As @tptacek covered elsewhere, you better have one field you are really good at.
- You better be very good at picking up 'new' stuff and identifying similarities to what you have done already: most of the learnings carry over, you eventually figure most of it is pretty much the same ketchup in a different bottle. BUT there are usually some incremental advances: your ability to catch on to these matters a lot.
- Companies have always liked the 'T' candidates: Who can operate in a broad set of areas and have real deep knowledge in one field.
I don't know how to say the following without sounding proud, but I think it adds relevant data points - so I will just put it up here: In my case (15 years?) I have done a ton of server development, I am trying to do some actual client(ios/android) work in addition to generic consulting. But my depth is around data - I have worked on multiple storage engines by now, built a bunch of database systems. I have never really sold my resume based on languages or technologies (they come and go - I would estimate I have worked on anywhere between 20-40 languages based on how loosely we define that, most experience has been with c/java/python). Last time I was looking to switch jobs 2 years ago, I had offers from almost all the big companies in cs within a month.
Sadly I don't have data points on how easy it is to enter this field beyond 35 :(.
Don't be pegged down to a specific technology box, because at 40 you've probably already seen plenty of them come and go. Use that experience to an advantage. Either get into consulting or work with startups that need a wider perspective.
"Lesson: Unless you are confident that your skills are very far above average, don’t take a career path that subjects you to the employment market once you’re over 50 (and/or make sure that by age 50 you’ve saved enough for a retirement that begins at age 50 or 55 and during which you won’t have employer-provided health insurance for up to a 15-year gap between age 50 and Medicare age)."
On the other hand, nobody asks doctors and lawyers if their are planning to retire at 35.
It’s a little annoying how you have to chase tech fashion to remain employable though. As if simply being a good engineer isn’t enough to pick up these techs and contribute meaningfully. You need to spend your free time learning the tech, or be at the right company, to even be employable. As we get older and have families, this becomes more difficult.
Meaning mastering the domain and not the tools currently being used.
Plan for the future, live modestly, and invest diligently. If there ever comes a time when the work is no longer enjoyable or you are unable to get a job - go do something else!
Edit: I realized this is insensitive to people who are facing ageism and might not be in a position where they can retire or change careers. Not everyone will be able to retire early - everyone has different circumstances and luck plays a big role in life. But for anyone who happens to be in your early 20s and pulling in a 6 figure salary: if early retirement is something that interests you - now is the time to start saving.
It turns out she's amazing because she knows how business works and how to get things done efficiently and what the business really wants from her: Quick, stable code.
Others we've hired that didn't have this skill have not fared nearly so well. I'm definitely looking for that kind of thing in future hires now.
I have also seen a lot of senior developers go into consulting although they have to do a lot of other stuff than coding. I think as a senior developer you do need to be good at little bit of project management (ex: guiding junior devs, de-risking a project completion, contributing to product management decisions). If that is the case and you have a leadership who can recognize the technical value you bring to table, you should be handsomely rewarded.
But what has kept me constantly improving is trying out many diffent things over the years: aside from having all of the roles of a software team at one point, I've also been a researcher, coach, consultant and CEO. Also in non tech-related fields.
But now I'm again back to being a programmer. It's the position where you can make the biggest difference.
All my architects are over 40, every single one of them.
Working on a 10 year old code base, multiple stacks (mobile apps, Java backend), on AWS.
You need clear headed people that know how to spot bad stuff about to happen and then clean it up, keeping the big ship stable. Constantly removing technical debt.
SaaS is the best thing that ever happened for job stability for engineers. Constant updates, upgrades, etc. The guys at Salesforce.com, Workday, ServiceNow, etc have a long road ahead of them.
Taking (4), a bottleneck here is part (B). So, there is something better -- (5) with (A) deliver some economic value that (B) a lot of people with time and/or money can see. That is, with (5) do a startup and own and run the business that delivers your (A) economic value. Then to heck with finding (A) just some one person to give you a job with good financial security and, instead, (B) find a lot of people, say, on the Internet each of whom give you a little time and/or money.
From one person, it' a lot easier to get a little time and money than a lot. And it's a lot more stable to be getting the time and/or money from many people instead of just one.
If you have some good economic value, then hopefully you can cut out the middle man of your boss, his boss, his CEO, his BOD, their HR department, sales department, marketing department, legal department, etc. and deliver the value fairly directly yourself.
If you want to continue learning new tech and position yourself as a truly experienced engineer, there is plenty of headroom for developers willing to continue to grow.
I'm 40 years old and I just had my best year yet - by far. Obviously a big part of that was the decision to move into contracting, but I'm not particularly worried about getting put out to pasture just yet...
Another reason is I don't think software development is very respected. Look at job advertisements - the most important skill you can have is to already have experience with a given tech stack. This trumps domain knowledge, communication skills, or even total experience in the industry. How much more clear can society make it? We're highly replaceable cogs who need to have limited responsibility and autonomy.
My job is half business analyst, which is a good thing, but transitioning to pure BA would mean starting again at entry level. To me my options are pursue management aggressively, start my own business, or accept that I'll have about the same standard of living as blue collar workers a generation ago.
A lot of people leave on their own before they get old through. Some burn out due to bad luck or wrong choice of employer. If you buy into believe that development must be late night thing, then you are likely to burn out and then seek different profession instead of just different employer.
Many many guys actually seek non-development positions that are sort of "infected" with a bit of tech. So they become managers, analysts, those architects that do just documents etc. This is where most people seem to leave. That sort of work creeps into your job more and more regardless as you age, simply because less experienced people often can really do it and it tends to be critical.
I would prefer to stay in the technical track, but I probably need to specialize in a hot field, i.e. machine learning, in order to become more sought after and less of a commodity.
Most people move into independent consulting, remote work, their own business....
You really do live in a bubble, don't you..
In reality there's one problem though. I don't know if this is specific to software engineering, or just a part of the human nature, but the reasoning behind many hires I've seen is dead simple: get someone at the bottom of the food chain so that the other participants can move higher. What would change if the position would not get filled? Nothing business-wise, the product would still be around and would solve exactly the same problems in exactly the same way, just Alice the Department head would have fewer head count and Bob the Developer would be still writing the code himself instead of mentoring the new hire. As you can see, in this scenario there's no benefit at all of hiring an experienced person - instead you need to hire someone who would desperately need mentoring and would be just smart enough to follow orders.
So if you want to stay in the industry past the age of a cute aspiring busboy, you need to learn how to spot job opportunities where the experience you would bring in is actually beneficial to the business. But if you learn to do that, you may be much better off starting your own consulting business, or growing into product management.
Of course, many of us (me included) are introverts and absolutely hate dealing with people, preferring solving the logical puzzles in solitude. The trouble is - a huge part of your puzzle solving skill is specific to the type of the puzzle, and this knowledge tends to get quickly outdated when the technology changes. On the other hand, experience in being nice to people and convincing them to do something that would benefit the business (a.k.a. management) is pretty universal (as well as the political skills) and won't get outdated when a company switches from scrum to kanban or vice versa.
P.S. Yes, the general ability to think structurally, break down complex problems, etc. is portable between different tech stacks, but you would never convince a non-technical person about it, unless you have invested a lot into your persuasion skills.
The thing that stands out to me is how much more successful product and project managers are at my company, and they are doing much less work and have less hectic jobs. Software dev is interesting, but I plan to transition into management because I think a software development background can actually help me propel much further in the career than just sticking to programming will. And the other thing is that as a developer, I have to continue to keep up with newer technologies and make sure that I know what's new, or be at the risk of being replaced eventually.
CS is a great field, but I think that the pace at which most big companies hire and lay off employees is too significant to ensure a stable job for too long.
And Rust. What’s not to say about Rust. One thing that kept C alive so long is there wasn’t anything viable to build operating systems with until Rust. There’s a lot more to Rust too, it’s compiler LLVM is used to compile so many other languages like Apples ObjC and there’s wrappers for others like Apple’s Swift. I mention these due to the heavy usage and development upstream into LLVM for these. You can even use Rust to create better performance code for other languages like Python modules.
You’re (OP) definitely accurate in your post saying C and JavaScript are comparatively static but even they’ve gone through feature development and drastic syntax and paradigm changes (in the case of JavaScript)
A friend likes to say “Show me a 40yo programmer who hasn’t moved to management and I’ll show you a person who’s being passed over for promotions and new opportunities. God forbid if he looses his job, because he’s gonna have a hell of a time finding a new one - even if he’s kept his skills current.”
Given all the talk about sexism, it’s incredible that ageism isn’t being given the same attention. Frankly, it seems like a much bigger issue.
Sitting in front of a screen for decades, hunched over? Much more fun to build a chair for someone.
At least in my life.
+60 now. I slept with wires as a baby my mom told me. Coding since almost birth. :-)
Suggestion? Take a woodworking class, glassblowing, sailing.
I focus on Swift now. A beautiful language. Looked at React, Vue, Angular. So much overhead, put that time into learning how to use a router (a real one!) Just my 2 cents. :-)
We are all born with the same brain* (edit: see the ted talk on the "After 83,000 brain scans"). Some of us just aren't born in the right environment to curate it and never learn the best ways to use it ("learning how to learn") given the current dominant socio-economic factors. It gets harder as you get older not because of age but because your anxieties, fears, and distortions become more reinforced, so breaking down those thought patterns becomes harder
*: I mean this more or less, not literal. To clarify, I am speaking more specifically to neuroplasticity and neurogenesis. Maybe some things come easier for other people out of the gate, but this wasn't because of some "innate" talent, but rather some factor of their development, both internal and external, provided the acuity and propensity towards excelling that specific thing, but if you molded another brain from scratch this same way, you would more or less get the same result.
edit: With the TED video,I was again referring to the take away: "You are not stuck with the brain you have, you can make it better." So if you were "never born with the ability to be good at math" this is a distortion, just as much as "I am only mediocre at math and will never be great at math" is https://www.youtube.com/watch?v=esPRsT-lmw8&t=599s
Besides this, I think, focus among other things also plays a big part in your abilities. If I am checking FB every 5 mins then I will never be able to match the learning abilities of someone who does not even care what is happening around him while he is learning.
That's not what he says at all.
>https://singjupost.com/daniel-amen-on-the-most-important-les...
The "most important lesson" is about the importance of diagnosing brain injuries and pursuing neuro-rehabilitation.
My broader point in response to what you're saying is that I've grown deeply suspicious of claims to genius. Sure, there are brilliant people out there, and hardworking people, but there's also a huge element of luck or circumstance. I've seen this firsthand with people at the top of my field I am close to, very famous people, who had huge changes of fortune due to circumstances changing. They sometimes could reverse course, but only because they had enjoyed good circumstances earlier, and people could say "oh, X was brilliant--they just went through a rough patch." The people who got those rough patches early in their careers aren't afforded the same second chances, and are written off.
There are far more brilliant, hardworking people than we give credit to. Most of the advances in our society are not due to single brilliant individuals, but due to incremental improvements day after day, by people who we never learn about. The politics of credit are soul-crushing when you see it up close.
To me the single most pernicious problem with ageism is the stereotype that you are incapable of changing or learning something else. We want to put people into boxes, boxes based on vocation, and ability, and personality, and the older someone gets the more of a box we want to put them in. For people who have happened to land in the right places at the right time, aging can be a wonderful accumulation of security. But for the rest of us, it feels like being punished for your environment, or punished for the stereotype others have of you--it's as if you're being held to account for others' perceptions of you. To some extent, that is a valid stereotype, but to some extent it is not.
I feel more vulnerable now than any point in my life, because I want more than anything to leave, to change, to improve my life and that of my family, but so far it seems impossible without making things worse. When I was 20, people seemed willing to believe I could do anything; now it seems people are skeptical of me doing anything different from what I've done.
That's blatantly untrue, and we have shitloads of twin and adoption studies to prove it.
Just take a modern full-stack developer and ask them to describe what a processor is actually doing sometime. They are used to working at such an extreme level of abstraction above the hardware that they don't usually have the slightest idea what's actually going on in the hardware. To them transpiling other languages into javascript didn't even sound like proposing the inmates get to repaint the asylum in their own scat for a long time.
I think there are a lot of mediocre managers with such behavior. I'll tell you right now, the best managers I've had absolutely take risks all the time. They're typically political risks, rather than technical ones. [0] But a lot of good team management is clearing the way for your team to get work done, which involves putting your own butt on the line. Which is a really scary prospect, when you dig into it. You're sticking your neck out and risking your reputation to clear a path for your team... And if they fail, it's reflected onto your reputation equally or even more!
Oh, and this actually gets worse as you move up. You become responsible for broader swaths of action, so you're taking larger risks to clear larger paths. But at the same time, you have less direct influence over execution.
[0] And there are some number of technologists who abhor politics and maybe therefore don't recognize it.
Most came from other industries to capitalize in the market need.
It will likely change as the current generation that started as developers go to 40+ and continue in the field.
will se...
Pro-tip : one type of work that can last is in the Defense industry. Projects in that industry can last 10-20 years or more, and experience seems to be valued much more there.
It's actually quite the opposite. Older software designer/developers can better support our needs on healthcare and mobility of an aging demographic.
just do yourself and keep upgrading your skills and keep curious!
I'd still advise my kids to go into programming. It's been a great gig.
I'm working for bigger names, on bigger projects, for way more money than even 5 years ago.
The world is a hell of a lot bigger than that.
This is what's really wrong with software engineering: we have young, cocky and mostly ignorant people doing the hiring. From CEO's riding daddy's coat-tails while trying to pretend to run a company, all the way to college grads that think their training as a flaming-hoop jumper is the pinnacle of engineering.
You do this to yourselves.
Some of us do other things, you know.
I think that the main solution to all of this is that you need to have skills with a long shelf life in addition to being up to speed on what's hot right now.
Bringing up a new release of a language as being essential for any programmer is missing the point here.
https://www.quora.com/How-many-hours-a-week-does-a-typical-G...
"10am to 8pm on weekdays, no work on weekends? That's not a lot, not by a long shot."
See, they have such stockholm syndrome, they can't even accept that they are being overworked. How are you supposed to challenge such unhealthy company policy when "It's not a lot, not by a long shot."
6pm it starts to slow down, by 6:30 half the office is heading out.
Some people would get there super early and leave early-ish.
Look, at the end of the day it's about getting shit done and COMMITTING CODE. That latter part is something a lot of people refuse to accept. It doesn't matter how smart you are or how much experience you have or whatever... if you're an IC, then deliver high-quality code (and a lot of it), and you'll have a great career.
It's not a perfect job and in fact I miss working in a place where the velocity is higher. Things in general do not move quickly at Google -- just like other big companies. But it's a job that's entirely compatible with family and a normally balanced life.
You're so focused on the time people leave the office, I can't tell if you're arguing that 50 hour weeks at Google is abnormal.
That answer was upvoted by multiple Google employees/former employees.
>Look, at the end of the day it's about getting shit done and COMMITTING CODE.
Are you suggesting that working long hours equals more and better results? There's a stack of research to contradict you if that's your position.
Now, # hours a week is a different question. Just because people leave a 6 or whatever, they often come back online at night, or work some more on weekends. That was very common.
And your last point, I honestly can't put together how you think my statement about committing code had anything to do with # of hours.
I think it varies greatly depending on what team you're on but I work ~40 hours a week most weeks
If tech companies want to encourage women to join by paying them to freeze their eggs, I don't see why they wouldn't pay men to have a vasectomy too. What better way to ensure that family won't get in the way?
A side observation - for most of human history the vast majority of people lead repressed lives of peasants and there was self selection for those who survived. Today the descendants of those peasants are the software engineers and other corporate slaves. One cannot expect them to lead a meaningful life outside of what they are told to do by their corporate masters. If you told them that they had stockholm syndrome, they would mock you. They are the ones who "love" the work that they do for their corporate masters. They are the ones who glorify "keeping up to date" and in "learning new things" again for their corporate masters. Now if you did those things to benefit you directly it is another story.
Not true, anyone can use scarcity to increase there median salary. After reading about Chip manufacturers and how hardware is becoming less open source, I'm kind of glad to know which one's will rock on with things like OpenBSD on the PowerPC - there's a lot of those old Mac PowerPC's still knocking around with an open firmware bootloader! :)
Edit: I wouldn't spend too much time on Angular; I think maybe 1 out of the last 20 recruiter pitches I've had was Angular; the rest were React.
Take the time to massively level up in some high end niche and you can do really well. It's also a better place to leverage the experience that comes with age. Some 20 year old out of college might not have the experience to code extremely high performance bare metal algorithms that work across architectures. Those areas take skill and a deep understanding of how computers work throughout the entire stack from hardware up to UI/UX.
All I meant is there are great devs out there who aren’t 21, Linus is one example.
Wow