Aging programmer
world.hey.com
world.hey.com
For most of my career, I've been told (and I believed) that I would probably get forced out of a hands-on individual contributor role as I aged. During the late-2000's, I even had an early midlife crisis and earned a law degree, expecting that I would need to make a career change into IP or something. That hasn't been the case.
What I think people missed is the compounding effect. The supply and demand for computer programmers seems to double every decade (maybe the interval is even shorter). With each doubling, the older cohorts become a smaller and smaller share of the whole. People look around and think, "There aren't many older programmers here", and base predictions off that observation. However, the more accurate observation would be, "There have been A LOT of younger programmers added here!". I don't believe that it's actually a zero-sum game, though.
I don't know if this human resources cousin to Moore's Law will continue indefinitely, but it's certainly held up through my career. Even when it inevitably slows down, I think that just means you'll see the age cohorts balance out more over time.
https://blog.cleancoder.com/uncle-bob/2014/06/20/MyLawn.html
There is also a massive increase in the number of 25-35 programmers in the same time period.
My interpretation is there are definitely forces that push against older programmers staying in or re-entering the profession, but they aren’t as severe as they appear to be just looking at the raw numbers. Generally, programmers who want to remain the profession are going to be about to, but it is harder to be a programmer over 40.
This is especially tempting if someone’s skills start to diverge from what’s in demand.
In my own case, when I have enough money to retire it’s going to be hard to convince me to keep working.
A programmer is told what to do, and half way thru development they have the boss show up and say 'I just read of this brilliant idea in BusinessWeek, lets add/change the code to do .....".
My basic philosophy is that I'd probably be sitting in front of the silly thing anyway. Might as well be paid for it.
Programmers are in a bubble. Head over to the local grocery store. The person bagging your groceries is 63. There is no retirement plan for him - as well as most Americans. These "old" people will end up working until 70, on their feet. If I can find someone to pay me to write CRUD apps all day in whatever hipster framework, I am fine with that, no complaints here. Beats working at HomeDepot.
While brutal, there is something to working later from a health perspectice. When I was young, retirees played tennis and golf but I dont see as much of that in my cohort.
i have over 200 repositories etc. its redundant, and random code challenges that differ from employer to employer prove next to nothing.
20 years ago it was the norm for interviewers to ask brain teasers / riddles in interviews ffs.
edit: perhaps this is my own personal struggle as I did not attend University.
its actually based on personality + a convoluted code challenge that has no bearing on the actual job.
If you truly hate the way interview processes have run for you, it’s worth considering if you feel strongly enough about it to seek a different fit in the market. You might not, and that’s fine! But alternatives do exist.
I'm guessing your in the under 40 camp, but interviews did used to be better.
In the early days of the startup explosion interviews where much better. The biggest signal at the time was having an active github profile or otherwise existing portfolio of code. The strongest signal back then was serious contribution to any open source projects (strangely today that almost seems to count against you). It also wasn't required that you had these, but they were a very strong signal.
Interviews were largely technical conversations, to see if you understood the concepts, and even more importantly, it was okay if you didn't know. I remember being asked a question about TCP vs UDP. I didn't know much networking at the time, and explained what I knew about TCP but admitted my understanding of UDP was basically non-existent (admitting ignorance used to be a huge plus back then). The interviewers then explained how it worked and asked if I could explain when and why this would make for a better solution than TCP. I answered about the obvious application to media streaming and passed. Interviewers didn't care that you knew everything, they wanted to see how you think.
Even the original predecessor to our current leetcode nightmare, fizzbuzz, was never supposed to hard it was meant as a basic sanity check. There were some devs who had just followed the flow at some big bank and literally couldn't code on their own. Fizzbuzz was just to make sure that given a blank page you could implement basic code.
Of course as tech started to boom, so did the bootcamp/interview industry. People were trained to do fizzbuzz, instructed how to create a github repo filled with meaningless, half started project (or forks of other projects), and people where told how to flood OSS projects with minor pull requests so they could claim to be contributors. Then companies wanted to be like Google and have hard white board challenges.
Then you had a generation of engineers that never knew any different and largely had forgotten (or never known) how to assess technical competency anyway than through a series of hazing rituals.
Would you mind sharing why contribution to open source might have a negative impact for an interview?
2007: this is when I first encountered fizzbuzz as an idea https://blog.codinghorror.com/why-cant-programmers-program/
2005 article linked from there: https://www.joelonsoftware.com/2005/01/27/news-58/
That second article is interesting in this conversation because it's main contention is that the vast majority of any applicants to any position you're trying to hire for are going to be terrible.
Which is the phenomenon seen by others as well and discussed in Atwood's 2007 one.
They don't really talk about the Google style DS/algo problems, so yeah, seems like those became popular later.
But it suggests the hiring experience for companies has long been awful.
The sort of experience you had - a good conversation about a detailed relevant technical area - is something that I've never personally found common when trying to hire. Most candidates still aren't great if you're looking to do even moderately greenfield development (even if not particularly interesting - just being able to put together a decent scaffold of an idea).
Leetcode - the site - is an interesting phenomenon because it's full of problems far harder than any I've seen in practice at FAANGs and similar. Stuff I've encountered in the real world seems to fall into the Easy or Medium buckets.
After being at a BigCo and hiring some people who aced whiteboard coding and failed on simple everyday things, though, I certainly would never again use something like that as the only factor.
I understand that it feels like its waste of time with no practical use but the upsides are that they make job hopping trival because you know what to expect and feel confident.
I think its a tiny investment for big returns. unparalleled to any other activity you could invest your time in.
I’m lying, I would have hated working for any large tech company as a software developer after spending decades at small companies.
Huh. Never heard that before.
I invest my time in writing "shippable" code. Even my "farting around" projects are done in a manner as if they were to be released by a Fortune 50 company.
That means that Every. Single. Line. Of. Code. that I write is "ship" code. There are a number of projects that I've stopped working on (I archive them, but leave them out there), and a few that were never really meant to be sent out to fend for themselves, but I still make the effort to write tests and documentation for them.
I'm so used to delivering software, that I've almost forgotten what it was like to play around; which is actually a bit of a shame. It could easily be said that I "take things too seriously." I can tell you that my employers liked it, though.
My GH Activity Graph is solid green, and I wouldn't dream of "gaming" it. I don't especially care whether or not anyone thinks I'm "l33t." I'm an old fart that has no intention of working for anyone, ever again. I write code for myself, and that I want to see. Most of the folks that I care what they think of me, have no understanding of my tech work, and that's fine.
It makes me feel good to make good, well-tested, well-documented, well-architected code that solves problems.
I guess you could call me a "completionist." I like to finish stuff.
Right now, I'm working on a data parser for a backend API that fetches a JSON response, using the built-in NSURLSession stuff, turns it into a Swift Dictionary, then I sort through that Dictionary, and emit a bunch of Swift struct instances for use by the API consumer.
The reason for this, is because the API that I wrote about seven years ago, is giving us performance problems. I wrote about that in this comment[0].
The NSURL stuff has all the sockets and whatnot, as well as all the transport stuff. I've written that stuff before, but I guarantee that the deep geeks that wrote the system have done a far better job of optimizing that stuff, than I ever will.
The JSON parser (built into the OS, but I may think about maybe licensing another one, if this doesn't do what I want) has all the recursive-descent, tree-crawling stuff in it, so I don't need to worry about that. Since this is a multi-threaded system, almost every school algorithm is worthless, but I guarantee that the deep geeks that wrote the system have done a far better job of optimizing that stuff, than I ever will.
I want to get the hell out of this API, as soon as possible, and return to writing the UI stuff that will make my app sing.
The API is being developed as a standalone SPM package that will work on all the Apple systems (iOS, iPadOS, MacOS, WatchOS, and TVOS). The one that it's replacing only worked on iOS. No excuse. I know better, now. I'll also be structuring this to be a lot "swiftier," and more "reactive" than the original API.
The app is a native Swift UIKit app. It's a big mofo. At its peak, it was over 40 screens, but I'm trying to get it down to half that. I've been working on it for a couple of years. It's had a couple of pretty massive pivots, in that time.
UIKit is a big framework. It takes years to learn. I'm looking forward to SwiftUI, but SwiftUI is not at the point, where I'm comfortable committing to a project of this scope.
I've been working with UIKit since 2012. I barely understand it, and they keep adding new stuff, as fast as I can learn it.
Swift is an excellent language. Like every language, you can get the basics down in a few weeks, but it takes years to get the advanced stuff down.
I've been working with Swift since 2014 (the day it was announced). I speak it without an accent.
The project I'm working on has been a wonderful masterclass in Apple iOS development. I also wrote a fairly massive PHP backend, but that was years ago, and it is, I guarantee, not as cool as a really good PHPista could do. That said, it works great, is maintainable, secure as hell, and fairly well-structured for scaling and extension.
The app is gonna be great. Its approaching ship (still a ways off, but we can see the harbor lights, from here). I've been releasing it on TestFlight since it was a month old. By now, I've probably made over 800 TestFlight releases to the team. That's how come we can be so confident in the UI and the Quality. It gets banged on a lot.
But maybe I'm doing it all wrong, and I should stop working on this to practice leetcode.
It’s just that when interviewing, it can few easier to evaluate some algorithm puzzle than to figure out what it means and whether it’s true that “the app is gonna be great.”
I used to hire pretty senior-level engineers. They would be writing C++ image processing pipeline code, to some insanely exacting standards.
My technique was usually to get them relaxed and comfortable, then start asking them for stories about the projects they've worked on. It was always a joy, when I could get them to start chattering, like the post above. I would look at the enthusiasm, and the passion, as much as the technical detail. I'd love hearing them talk about discovering problems, and how they addressed them.
I love this, and I’m stealing it. it’s a perfect description of competency in a language, imo.
I absolutely understand the emphasis on shipping, and i actually have recently come to lament some of my unshipped projects lately (I’m in a phase of finishing instead of starting projects myself, and sometimes have felt like I haven’t gotten to ship anything in my software career, but that’s another story for another day) but part of the core skills I attribute to allowing me to finish are the same ones leet code interviews helped me polish. how one works on a low-level data structure is one of the core aspects of software engineering i examine in a new hire.
What I think I’m trying to say is, I don’t mean to stop working on shipping a project to focus on leet code toy problems, but rather that a lot of leet code interview problems have given me better insights on how to focus and solve problems im trying to ship. I have found great value in going back and rehashing leet code interview problems and turning them into tiny libraries after i was given them. So much so that I’ve turned it into an exercise. I’ll have to write a full post about it sometime, but writing tiny libraries has been one of the best things I’ve done for my technical skills.
I'd read that.
> but writing tiny libraries has been one of the best things I’ve done for my technical skills.
I do that all the time. When I get to a bunch of code that I think has reuse potential (like, say, a backend connection SDK), I break it into a standalone GitHub repo, set it up as an SPM package, and give it The Full Monty for testing and documentation. The testing code usually dwarfs the implementation code, and the documentation is...well, you can see for yourself. Here's a few of the packages that I've written: https://riftvalleysoftware.com/work/open-source-projects/
I usually take a few days off the main project, write, test, document, and release the subproject, then re-absorb it into the main project.
There's a lot of similarity between that, and UI work.
I trained as an artist, way back in the Paleozoic Era, and that gives me "airs" about things like graphic design, and data presentation. I've spent a good part of my career, unlearning that crap. I'm usually best off, leaving the defaults in place, if possible. I write about that here[0].
I think that UI needs to be treated as seriously as possible. It should not be an "also" thing. I think it needs to be the starting place for the work, and I tend to develop UI pretty quickly, in my work.
I feel like SwiftUI still needs a lot of fine-grit sandpaper. I have every confidence that it will get there, but I don't feel confident in committing any project at scale to it.
[0] https://littlegreenviper.com/miscellany/the-road-most-travel...
Junior here and not as experienced as you are but I resonate with a lot of what you have written so far. I'm more of let my work and projects speak for itself. I also hate leetcode or code challenge kinda interviews. So far I haven't have to take any to get a job and I plan on never taking or doing any. If I see that an interview involves such I will reject it. I can accept a decent take home assignment or technical questions in areas that I will likely encounter on the job.
[1] https://blog.pragmaticengineer.com/software-engineering-sala...
Obligatory ask, bullet list of "the advanced stuff", please?
There’s an excellent book[1], called “Advanced Swift,” by Olle Begemann, and Chris Eidhoff, that gives a far better breakdown of the more intricate parts of Swift than a simple bullet list.
Like many languages, Swift is a deep rabbithole. Heck, you can get lost, just in the way it handles strings[2].
[0] https://littlegreenviper.com/series/swiftwater/
You're not "wrong" per se. If you want a pure Swift job it would be very reasonable if the hiring company tested you on your very broad and deep Swift knowledge. However, if you ever wanted to do anything else job wise you'd be screwed. Leetcode gives you a chance to become a Java/PHP/C++ dev somewhere. That's the only plus for me. I'm mostly a Ruby/Rails dev experience wise and I get a real chance at different stacks because their hiring process is Leetcode (or something of the sort) and general design questions. So sure I'll never know as much about Swift as you but I do think that a hard working engineer who takes his craft seriously can pick it up and become productive in a couple of months. Not an expert, productive. I can join your company/team and then someone like you can make sure my code doesn't suck. For many companies that's good enough. Others can't or don't want to mentor anyone for more than a week or two so they only accept someone who fills all the requirements of their stack. Mostly startups, and in general not my cup of tea.
It's also possible that I didn't "miss the point."
They did ask "Why not". It may have been rhetorical, but I pretended that it wasn't.
Of course, like all these types of things, I have my own approach. It's fine, if others don't want to do things the way that I do, but I'm not into playing "Me Big Man on Campus" games. I just talk about the way that I do stuff, and my own approach.
For me, I can't even imagine "job hopping." I stayed at my last job, 27 years.
If "job hopping" is someone's idea of a career, then I guess leetcode is the way to go.
But if we want to stick around, that means that we can't just have a veneer of competence. We need to actually have it.
But it was never to get a job or a promotion. I was already the Dev lead at the company working on an on prem system and they wanted to “move to the cloud”. I just wanted to get an overview of the landscape.
As far back as 2000, “brain dumps” of MS certifications were a thing.
Now i for one dislike leet code and coding challenge interviews. I think it's silly, plain and simple. What i would look for instead if i was an employer would be curiosity. Nothing is more important than insatiable curiosity. A curious employee will learn everything about your whole stack in the first week... just out of curiosity. And if they do hit a leet code like problem during day to day work you best believe their curiosity won't let them rest until they've solved it, be if with prior knowledge and experience or without.
He was unable to execute a .py file.
A PhD doesn't mean that a person knows everything. It means they made progress in understanding in a narrow area. Might not have included Python.
It's almost certain some of then (maybe most of them) would have fared just fine if they were left with the problem alone, not in a high pressure setting like a job interview.
I don't know how you test for the ability to do real world stuff - I always think of doctors, they have a system of proctoring they've developed over the years, where you're judged by your peers and rated accordingly and even then its not 100%. I think this is the only way to do it in real life, but I don't know if programming will ever get to that point, it probably will be necessary sometime - when everything is driven by computers.
It a small company not specialized in education and examinations can set a test and deduce if I am good enough to code, then this can be standardized. And there could be many certs: 1. can code, 2. can code c++, 3. understands multithreading … and so on.
Examples include: How would you solve this at a high level, here's some code we know is broken, how would you both fix and improve it etc.
After all, both parties are being screened.
The other upside is that we also get to gauge communication and analytical skills not just production line coding.
Even after doing this, over the years I have seen a good 30% refuse to do it or just ghost at this point for whatever reason. Afterall, I've done it myself a number of times.
I'll do reasonable take homes, but I'll often pass on interactive coding sessions. I don't like coding in a browser, and I use my dev tools as a major crutch.
"Why did you store that value as a string instead of a long?"
"Because it's a string from standard in and I have no idea what bullshit inputs there will be so I can check it before casting it."
"But the user story said it will be a number."
Well if I had more than 15 minutes maybe I would have been able to gain confidence in the input. Something like that comes from many years of experience getting burned yet it's considered a negative mark. Some of these places are actually selecting for recklessness.
It has worked for me so far in my 15 year career.
You have some good friends are they are high up the chain I guess.
I then joined the next company when the people who started that company started a new one.
When that startup failed, I was going to take a break and maybe start my own company, but a guy who had worked for me at the failed startup invited me over for margaritas and to check out his new company he had joined, and next thing I knew I had accepted a job offer.
I have been at the last job for almost 10 years.
I now have a ton of connections from people who I worked with and they then left the company. I am sure if I was interested in getting a new job, I could put some feelers out and have some offers right away. I have had people try to recruit me, but don't have much interest in leaving my current place.
I don't think my experience is that unusual. It is so hard to find good talent, sourcing from people you have worked with before is extremely valuable.
So the interviews were more about finding out if I would fit within the team than hard technical interviews. People knew me, and knew what skills I brought to the table.
Your network matters. And if you think it doesn't, stop, think again. Your network matters.
One final note. I have interviewed people. Never oversell yourself on your resume. Don't put down that you are an 'expert' at this or an 'expert' at that, unless you really are. Because you just may end up being interviewed by someone that is. And nobody, absolutely nobody, is an expert at fifteen different unrelated things. Don't do that. I have been doing this for 38 years, and I am pretty good at about five things. And those five things that I am good at have changed on a regular basis since the day I started.
People's own interviewing styles aren't any more valid, of course, but they operate at small enough scale to escape the kind of scrutiny that a standardized test would attract. People also don't like to admit they're wrong, and might be applying a kind of halo effect to colleagues who have passed their personal interview questions. Whereas people love to dunk on prestige, and will eagerly seize on anything they can count against someone with a prestigious credential.
The number of "jobs" added doesn't quite double, but if we think of it as "for every 4 that retire, five take their place" it would definitely feel like what you're saying.
I’ve seen this a lot. Hire older dev. Older dev has decades of experience. Older dev creates new product from scratch in a couple weeks.
Another issue is that mentoring is focused on junior devs by senior (6-8 years of experience) devs. So you’re less likely to have a senior dev (6-8 years experience) mentored by a dev with 20 years experience.
While I’ve got a pretty good memory, a lot of the times I don’t have a direct or complete answer for their question. I’ll have a tingle of a memory that is similar to their question. So I’ll give them that as a starting point and tell them how I’d approach the solving the problem. But they get frustrated that I didn’t solve their problem immediately. That I can’t point them at a blog post of Stack Overflow answer.
But a dev with 1 to 3 years experience? They’ll take that non-answer and run with it.
And I get it. The 1 to 3 probably has 1 maybe 2 tasks they’re working on. The 6 to 10 (to 15) has probably a half dozen things they’ve got to keep track of. Researching is probably pretty low on their list.
The same. Especially under pressure. Which makes it virtually impossible for me to pass an oral technical interview.
I spent hours fixing his code and hand it back to him and it's broken again in a week.
I had to wash my hands of it. The only advice he's getting out of me now is to follow a single tutorial all the way through until he gets that one tutorial working and then compare the tutorial to his code. I'll answer specific questions, but I'm not going to try to mentor him until he's ready to receive the wisdom.
The reality is that half of the tutorials and answers you can find won't work. Either because they're doing something entirely different or because they're for a tool/framework that's deprecated the functionality.
A beginner won't be able to tell this simply because none of the pieces are known to them.
When a person with more experience finds these tutorials they'll likely know within seconds if a given answer or tutorial is even remotely applicabe, which enables them to be much more thoughtful about what to do.
You'll potentially waste weeks on trivial tasks if you're hellbent on actually fully understanding something right at the start, and if the beginner does this the more experienced ppl will complain how inapt they're.
Honestly, you both just sound like toxic people in that regard and should not be allowed to work with total beginners. Which is fine, but the issue really isn't with the pupil that's just clueless. They need somebody to give them a tutorial and guide which is applicable and they'll learn how that piece works, now keep repeating that until they've got a basic understanding of the system and only then can they work on their own
It's crazy. I sometimes get the itch to learn a new language like Rust, but I haven't even come close to reaching the bottom of all the languages I already know. They are inventing new things faster than anyone can acquire them.
Well: I have recently been teaching programming to a 10-year old kid, and this morning he told me about the syntax {X..Y}, which expands to the range of characters between X and Y. I have likely typed {0,1,2,3,4,5,6,7,8,9} a thousand times and now I know you can write {0..9}. I was floored and have it on my todo list tomorrow to see if that is a new feature or if I simply somehow missed it in the man page--which I thought I had carefully read multiple times and which I additionally have skimmed many times--consistently for decades :(.
I was contracted to create the backend for a SaaS platform, from scratch. It runs on AWS, using a lot of AWS services, and is django based. The thing is - I'd never used AWS before, nor django. (I'm not sure how they chose me, to be honest.)
Picking all this new stuff up at my age it's nowhere near as easy as it used to be. But the process of writing software is not just learning libraries - and the rest I have down pat now. I immediately set designing the data structures and databases, wrote a spec based on those structures and got the spec reviewed before I started (I had to pound the table to make that happen). Then head down, arse up writing code as fast as I could. I had to deliver it all without an AWS platform to run it on, or a front end to drive it - but you don't get to my age without knowing a thing or two about unit effective testing.
Then after delivering, I was told it had all been changed by the UI guy, so massive refactoring. Unit tests are worth their weigh in gold when that happens.
All the while I was told I was talking too long, which ramps up the pressure and self doubt even more. (But with me muttering - what did you expect when change the UI I had based the spec on without telling me, ffs.) Boy do you lean on unit tests when that happens.
Then the first code drop, which was few tens of thousands of lines of code done in a few months. Which if you crunch the numbers, was 20% of the size their existing code base, delivered by one guy, in 5% of the time it took several people to develop the existing thing. Bug rate after unit tests was below 1 bug per 5k LOC.
Turns out they were begrudgingly impressed by that. So right now it seems I still can match it with the young guys. Yes learning new stuff is harder and slower, but I make up for it very efficient software methodologies honed over decades, which when I can apply them for a few weeks straight leave them in the dust.
The way I feel now it seems when I'm 70 pulling that sort of stunt will be impossible, so I don't have too many more job changes left in me. But at 50, you have a while to go yet son.
Same. In my case, I paid my way through law school doing software development contract work, which paid better than entry level lawyer work. Now I do a mix of software consulting/contracting and IP technical expert work (patent/copyright infringement analysis, claim charts, etc). I enjoy doing both kinds of work, though I really enjoy legal writing and I'd like to get more into IP litigation, writing pleadings, motions, oppositions, etc.
It's not that difficult if you actually can make decisions quickly. It only gets difficult once you are in a bigger company where you have multiple more or less competent stakeholders and every decision get accompanied by multiple meetings.
I disagree with this. I think there are a lot of people who don't like being a leader for lots of reasons... but every time I've promoted a reluctant leader it's been magical for that person and for their team. A lot of times the people that self-promote and like to be in charge should never, ever be given athority.
> I am very skeptical of new technologies
I used to think that way until I realized that in a lot of cases, we've been re-inventing the same concepts in computing since the 1960s. I think a lot of the re-invention is really being driven by hardware capabilities, languages and fashion. We're seeing it with Rust right now - let's rewrite all the things in Rust! Underneath it all, though, the payoff for using new, less capable tech, is that eventually it will pass up the old in a very meaningful way - and when it does, systems build on the old are washed away.
> I disagree with this. I think there are a lot of people who don't like being a leader for lots of reasons...
Note that you are talking about different things from OP.
OP was talking about managing, you are talking about leading. These are two very distinct skills. Sometimes you can find both in the same person, but these people are few and far between, since each of these roles is already a full time job.
Everything I've experienced in my professional life has taught me this: managers who can't lead can't manage, and leaders who can't manage cannot lead. Never once have I worked for a manager who didn't see themselves as a leader, and never once have I met someone who called themselves a leader who wasn't management.
People who are stellar managers, have extremely high empathy and EQ, understand their engineers, prop them up, help their career, guide them toward both professional and personal growth. They also did not have a single ounce of leadership or charisma in them, very low technical chops, no vision, and not interested in providing team leadership.
I've also met stellar leaders, visionaries, who inspired, entranced teams with every single word that came out of their mouth. They provided short and long term directions, technical and product guidance, motivation. And they were absolutely terrible human managers. Could not place themselves in other people's shoes. Didn't really care about managing the career or growth of people on their teams. Were only focused on matters that did not involve any human feelings.
These kinds of people both have their places and they complement each other wonderfully.
And sometimes, you find these two very distinct, polar opposite qualities, in one single person. But like I said, this is much more the exception than the rule.
And of course, the reality is that most people lie on a spectrum between these two extremes.
A leader can lead initiatives just via building relationship and having expertise without role power or any reports.
I was hired at my last job by the then new CTO to lead the “cloud application modernization” effort as they were pivoting to providing access to micro services to large health care companies.
After being somewhat successful at it, he offered to make me a team lead (been there done that). I told him in no uncertain terms that I would quit first. We had a great working relationship.
I now do basically the same thing in the consulting department at BigTech as a middle level hands on consultant.
I asked a year end could my position be considered a “terminal position” or would I need to work toward a promotion. My manager asked me why. Again I was very honest. I needed to know because I would be looking for another job before seeking a promotion. He said it could be a terminal position,
I prefer leading projects over leading people.
I often hear the argument that there is nothing really new in programming and that everything was already done in some way or other back in the 1960s.
I completely disagree with this and find it harmful. There is genuine innovation and new research happening in computer science all the time. The example you gave, the Rust language, is based on linear type theory that was first developed in the 1990s. Nothing like it existed in the 1960s and that is why it offers real improvement to software development.
Today, software development is slow, buggy, expensive and late. We owe it to ourselves to continue to research and search out ways to improve our craft. And this is happening. Newer programming languages and tools DO incorporate innovations from recent computer science research and are better for it. We should celebrate this rather than cynically pretend that all computer science research halted in 1969.
When I was younger, I'd work on whatever. Then everything started sounding like yet another get rich quick company, and is that what I was giving up my life for? Just to move little green pieces of paper around?
The most appealing thing I'd seen recently was a company that wrote software to help maximize farm yields. At least there was some real, effective benefit for a great many people.
It's like the goal of the company gradually became more important than the tech or money. And altruistic companies are very rare.
But I always really wanted to teach, so that's what I do now. Pays about 40% of what I'd make in industry, but I get to geek out all day and do work that benefits the world.
After my graduate work I am the opppsite. I realized that meaningfulness is not a sufficient condotion for enjoying my work. The tasks I work on and my coworkers make a much larger impact on my happiness. Whether I work on something "stupid" or "vapid" matters much less.
I kinda fell into it. I wrote some guides that were popular, and the head of the program at this boot camp was copying my examples for content (I had placed the code examples in the public domain, so he was acting ethically, don't worry), and he stopped and thought, "I should call this guy." They were a startup and needed folks to teach. I had just left the company I cofounded and was drifting for a bit, so it was good timing.
The university is in the small town I live in (about 100k population) and I organized a tech meetup here, and met the head of the CS department that way. That ultimately led to me being hired recently.
For casual teaching, be a part timer. There are lots of night courses that need teaching.
Private boot camps should pay around $90/hr. Adjunct positions at universities probably pay about $1000/class/month. It's really not good money, but it's good experience. I taught a couple quarters as an adjunct at the university and the positive student reviews I gathered contributed to me getting the job, for sure.
Lol I just noticed the user name. I've used what you've written in the past.
That's cool though, 90/hr a works out to a little more then my base rate at my last job so not bad. I don't have a bs let alone a master so I'd guess a university wouldn't want me to teach hah. Thanks!
Programming is fun. I enjoy it now, more than I ever have. Three times I've created software that has built a business and livelihood for others. That is super satisfying, and at the same time, usually the source of things that are not as fun as programming (taxes, accounting, lawyers, nasty people).
When I run across other programmers my age, I see a lot of unhappy people, and that is kind of sad. A lot of the unhappiness comes from one of three places:
* Not leaning new things and discovering that the isn't demand for what you did in the 90s and 00s. Career prospects are dim, and bitterness sets in. It's easily solved by picking up something new - but be careful, new doesn't mean things 15-20 years old. So many people jump out of one old tech into another one that is about to be old.
* A lack of interest in leading, and being hypercritical of leaders. Here's the deal: if you leading the team, you pick what you want to work on, and you pick how you build. If you are just on the team, you'll always be on the wrong side of decisions. It's easy to lead a small team, and experience is really the backbone of really, really great small "l" leadership.
* Pathological drive to be correct at all times. You know, they person that can't let the smallest mistake go un-punished, every bad decision second-guessed and being willing to die on the hill of correctness over the smallest mistake. This drive makes you good a programming, but it makes relationships with others terrible, and leads to being isolated, alone, passed over and unhappy. It's really hard, but learning to pick your battles and understand that battles can be won and jobs lost really goes a long way.
That said, there's an awful lot of aging, talented, experienced developers out there that are doing great things, and having fun doing it. Find a way to keep it fun.
Your three paragraphs read like someone climbed inside the library of my head and just started reading all the thoughts there at once. I struggle or have struggled with all 3 of those. Especially the latter 2.
Did you mean 'the' instead of 'they'? Did you do this on porpoise?
If you expect to retire at 60 (likely 65 these days) and you start working at 20: 40 is smack dab in the middle of your career.
I think that notion gets lost when we talk about ageism in tech and then people talk about 40-somethings.
but those are still of small group, it's like a normal distribution, I read somewhere age wise there are only about 1.5% that are above 50s.
Of course you're not going to hire a woman if you could hire a man - they might get pregnant and be away from work for a long time.
Of course you're not going hire an older employee that knows their worth over a recent graduate that isn't familiar with the salary they should earn. You can rip them off much more easily.
People can be cunts but still act with some rational motivation. That's why we have protected categories, to make sure that that isn't a strategy worth pursuing.
that's the real problem, self and situational-awareness.
i like the points in this thread. perhaps aging is just a natural bad actor filter. options narrow as we wise up.
this is the one thing you said I disagree with, unless you mean dealing with it by eliminating it.
It didn't become like a job job until what, the mid 1960's? That's 60 years ago.
And the number of programmers is doubling every ~5 years. Of course it's front-loaded with young people! The people who have been doing this for the field's entire time of mass popularity (1980's onwards imo) haven't even had time to get proper old yet.
But also: The more experienced you are, the more your biggest value isn't in banging keys on the keyboard. A company would much rather leverage your thoughts and opinions and that may look a lot more like technical leadership than programming. Even though it's still engineering.
Only an asshole cares how old somebody is. Reminder also, ageism isn't just a bummer, it's illegal.
Most people aren't going to take legal action, but imo if you're discriminated against you have somewhat of an obligation to do so.
Another factor to consider is post-peak-comp. You may find yourself in roles when you are older that pay less than they used to. This may very well be fine because you no longer have a down payment or kids college to save for, and if you didn't keep upgrading homes.. your mortgage payments 10-20 years into owning should a smaller and smaller percent of your income. If you are no longer chasing comp, you have a broader selection of roles and can be more selective.
It's easy to blame ageism, and ageism is real. There are a lot of people who really resent older people and believe flat-out untrue myths about cognition, value of experience and work ethic. That said, every time a friend shares a beer with me and tells me the woes of trying to get a job when older, I hear this:
I can't get a job that pays me like I'm senior, but requires the skills of someone half my age.
The solution is to break out of that box, and either be ok with lower pay, or go for jobs that leverage the value of your experience.
> perhaps due to your own abilities and other special qualities
I'm sure if you looked at yourself, or maybe had someone look with you, that you'd find you have quite a bit to offer when it comes to ability, and especially special qualities. As you get older it's hard to understand what is special because you've seen a lot, and it all seems average.
Very few of them have been pushed out of the field. Yes many moved up, but the majority still code. The ones who had not moved into management are either retired (Over 65), retired early (Rich, big payday) or dead.
I am very much the “average programmer”, but I learned a long time ago how to focus on “adding business value”, talking to customers (internal and external), writing, presenting, explaining concepts to non-technical people and even once a decade ago talking to investors and potential acquirers when a startup I was working for when they wanted to talk to the “technical folks”
I focused on small companies before my current job where the director/CTO was looking for people who could demonstrate a history of being “smart and get things done”.
I avoided the leetCode grind by preparing for a couple of years to target the cloud consulting department of the two of the major cloud providers or if necessary one of their partners. I knew that a combination of software development, infrastructure, cloud, and soft skills would give me a competitive advantage.
Do you feel that they were beneficial in terms of making you a better developer, or did you simply learn a bunch of solutions to puzzles that have no bearing on real world development?
"offers for work" or "job offers"? "Traditional" w2 full time go-through-an-hr-dept organizations possibly have more of an ageist issue than other scenarios. Freelance/consulting seems to still offer more flexibility on the age front, but it's more of a gut sense from speaking with those in my network.
If the candidate says “I’m only taking this to avoid starving but will quit as soon as I find any other job”, then sure, don’t make the offer. If they don’t give any signs either way, assume they’ll stay for 18-48 months as is common and decide accordingly.
The older I get, the more I think it is not the company itself but middle-managers.
Managers with an authoritarian streak will have trouble handling experienced developers that objects to non-optimal designs and processes.
It is much easier for such a manager to handle young naïve developers that gladly accept to work 5 times as many hours as a good design needs.
Software don't work well with an "do as I say, no matter how stupid it is" approach. I think that is why Silicon Valley (and Europe) has much greater success writing software than asia/India.
An older, grizzled, battle-hardened engineer is one of a manager's best assets.
In hindsight, until the last two in 2016 and 2018 they were just journeyman CRUD jobs with the last two being hands on dev lead and de facto “cloud architect” respectively.
I just got my first job in $BigTech at 46 two years ago. It’s not officially a “software engineering job”. But for all intents and purposes I’m doing the same type of work I did at the last couple of jobs - gathering requirements, presentations, development, and a shit ton of yaml, HCL, PowerPoint slides, and diagrams.
I’m sure at 48, I could contact my network of former coworkers, managers, recruiters and someone would give me a job even if it were just a standard .Net journeyman developer again.
If you’re still randomly submitting your resume to an ATS trying to prove yourself to companies by reversing binary trees on whiteboards while juggling bowling balls and riding a unicycle on a tightrope, you’re doing it wrong at 40+ years old.
I did that at 45 and landed an interesting job at FAANG (and I'm not the only one). I think it's a bit contradictory to think old programmers are still as capable and sharp as 25 years old, and at the same time insisting to be judged on different standards.
Then it's your preference not to be a programmer. My point was that it's also possible to be a SWE for those who still dig programming at our age. But you have to play by the rules. That being said, I don't think I'll last in such a position until retirement.
I just knew I wouldn’t enjoy being a small part of a large team coming from small companies where I could work up and down the life cycle from pre-sales, to requirement gathering, to implementation, to DevOps [sic], UAT and training.
I’m still part of a huge organization in the grand scheme of things. But my projects range from me the sole tech person doing everything to my working with a team where I lead or implement one “work stream” depending on the size of the project.
With a string resume, a hiring manager might think "They probably know what a binary tree is because it they didn't, they would not have made it this far."
Both interviews were about half a day, I got offers from both the company that asked me to do a merge sort paid slightly more. I accepted the second job.
Real business folks have real world problems to solve. They don’t care whether you can reverse a binary tree.
As an aside, one of the more junior people that I would be leading asked me how I would parse addresses while the director was in the room. I said I wouldn’t. I would license third party CASS software and explained all of the corner cases and then went into my speech about a company shouldn’t concentrate “on anything that doesn’t make the beer taste better”
I suppose it's all about the role you're applying for. There are "real business" where engineers are hired to solve technical challenges. Being able to solve simple algorithmic problems is a legitimate prerequisite for this type of role.
And let’s not pretend that all developers at BigTech are solving “hard problems”. I do have access to code for one of the major cloud providers.
I’m not saying the jobs are simple just that the complexity is figuring out what to write, how to organize it, how to deploy it, etc.
And before the gatekeeping starts, I programmed in assembly on four processors as a hobby by the time I graduated in 1996 and my third job around 2007 was to maintain a complete proprietary tool chain (compiler, VM (language VM), IDE) for Windows mobile. I spent my first decade plus out of college bit twiddling in C.
You're obviously the kind of person I'd want to hire ;) Why would you mind writing some code in an interview? I don't ask anything that requires memorizing your data structures and algorithms textbook. All I'm looking for is people that can "think in code" which in the population of job seekers isn't as common as you'd think.
I’ve had one coding interview in 25 years between 8 jobs. That one was in 2012. They had a Visual Studio IDE with skeleton code abs failing unit test and I had to make the unit tests pass as a pair programming exercise. I thought that was a very practical type of coding interview that I copied when I had to filter a bunch of contractors when I was a dev lead.
But now, if I leave my job at BigTech as a “cloud architect specializing in application modernization” - basically enterprise app dev/DevOps [sic], training, etc., before I retire, it will be at some startup looking for a more strategic role, even though I would be hands on.
It’s automatically a red flag about the job that I prefer if I’m not being asked about strategy and given a coding interview.
I am early 40's and have had no issue finding work and am currently interviewing others to come work with my group in a solution architect / tech lead style role and they are all my age. I have never interviewed for a job and not gotten an offer, regardless of age; with that said I'm not interviewing at startups or places I feel really wouldn't allow me a family life. I get the offers not because I'm incredible, I'm not, but because I know my lane and skill set and stick to it.
It got to the point where my “interviews” were more just sitting down with directors/CTOs and talking like adults about how I would help them solve their real world business problems. I haven’t done a coding interview in over a decade even though I have been hands on all that time - across five jobs
After some frustrating experiences applying and interviewing for jobs at the kind of startup-sized companies where I’ve spent my entire career, and fearing that my age might be a factor (I’m about to turn 40), I applied on a job at a Fortune 500 and had an offer a few days later.
The pay, benefits, and work/life balance are excellent, to the point that I have some regret over not exploring this avenue sooner.
Oh, and now I’m younger than most of my coworkers again. I don’t think ageism is a thing here.
Several reasons for ageism sometimes missed. This from someone whose been discriminated against, who has hired, who now owns a company & who was also a recruiter.
__I don't agree with this__ just laying the reasons out for clarity sake:
- Hiring managers don't consider themselves ageist, but opt for younger employees whom they think make a better cultural fit. You can blame the 'work is my social life' culture that emerged in the 2000's and that persists today.
- Hiring managers don't want to be ageist, but they've had or heard of bad experiences where disgruntled or non-performing employees abuse the EEOC process for financial gain and retribution. Very well intentioned rules, designed to protect certain cohorts of employees, doing the exact opposite as is often the case with Gov regs.
- Hiring managers (usually fixated on 'new tech') who fear diminished learning, adoption or performance capacity in older employees.
- Money. The perception that older employees cost more in wages and benefits, without much thought to efficiency gains that accompanies gray hair.
I was age discriminated against by a well known SAAS provider, who used a 2014 interview process to extract a detailed roadmap and ideas for product growth from me, and then ghosted me. I've watched as they've (badly) implemented the specific of my roadmap the past few years, and I chuckle. 100% my fault for giving up too much value in the interview process, but it was tough time and I thought I really needed that job.
> Hiring managers don't want to be ageist, but
I classify this into the "I'm not a racist, but..." bucket.
> Hiring managers (usually fixated on 'new tech') who fear diminished learning, adoption or performance capacity in older employees
This is the textbook definition of what ageism is.
Conclusion? They are ageists, plain as that. They may not consider themselves to be, or want to be, but they still are, because ageist is as ageist does, and it matters jack what appearances they want to keep or what they think or who they perceive in a mirror.
[0] https://www.scientificamerican.com/article/at-what-age-does-....
I can't speak in either instance at this time, but I'd like to think ageism isn't nearly as widespread as it seems when discussed on here when it comes to technology-based work. E.g., Small town in Nebraska with one or two software houses versus SF.
I think with software jobs paying what they do, retiring at 50 would be pretty easy.
Not all software engineers are paid ludicrous money though, and even in places that they are paid well the cost of living can be atrocious.
However, it is not a negatively thing. We may be able to setup IIS / Apache with Squid two decades ago to do similar things. The bar to do it now is much lower, and the tooling to help achieve that is much better overall (there are some not-so-great: Figma is a great design tool, but it doesn't translate to code directly unlike Dreamweaver / Borland VCL / Visual Basic, but I heard Framer is doing good on that front). That is part of the reason why there are so much more participation of labor in this industry: it is more graphical and easier to do (even terminal tools, largely do the similar things, are much more graphical nowadays!).
I feel it never really was about denying how effective plain web pages are but rather that faced with the choice of a wonderful DX with just JS, and a more difficult day to day with a mix of both, we picked the first. Sometimes at the expense of the end user, yaddi yaddi yadda, etc.
Good solutions for the "have your cake and eat it" scenario with exceptionally good DX are just now reaching some maturity.
Getting great reliable software delivered quickly, which is easy to maintain and change, should be the goal, I feel. But if that’s the case, why do people invent problems to find solutions to, why do people spend multiple days a week in Scrum meetings, etc.?
But looking at everyone involved and their actual incentives:
- For a consultant, the objective is to maximize the billable hours.
- For the employee, to get modern skills on their CV.
- For the junior programmer, there is a more level playing field with the seniors when tech is used that’s new and nobody knows, vs. tech the seniors know well and they don’t.
- For the manager or owner of a product company, they want less stress having to make decisions and as long as the product makes money who cares if the software could be delivered 50% or 70% faster?
Many of us are living this now. If it's not the chasing of new frameworks, it is old frameworks no longer being actively supported, or key features never being developed. Then it turns out something like vanilla HTML + JS can do the job just fine, but you need to update everything to vanilla to make it uniform.
Many developers nowadays seem to expect to be able to just wire things together without actual writing much algorithmic code. And the solutions have catered to that.
Those of us that are older lament the idea of using frameworks to increase our productivity, but still being more than glorified middle-men.
This attitude is common, that these frameworks are not, themselves, dependencies to be managed and protected from.
Is this not the typical mentality?
Putting together a decent web app today that is competitive with what’s out there and doing it in a reasonable amount of time is something that just requires frameworks and library mashing. Even though I can fully empathize with your comment, from experience, and even though my beard is almost as grey, piling stuff I don’t understand together from yarn or npm is exactly how I start a new web app. My job recently switched from web to hardware, and the workflow changed dramatically into writing and scrutinizing every line of code, and complied instruction even. But even still in the hardware company there is an overwhelming sea of choice and complexity and an army of young and old programmers all borrowing and reusing code at all times, with everyone just treading water and understanding only the tiniest sliver of it all.
I think we have no choice but to embrace the fact that it’s no longer possible to avoid swimming in 90% code you can’t control or understand, and figure out how to better manage it and encourage people to snorkel under the surface whenever they can. I don’t think we should blame it on the kids though, they’re just trying to get by the same way we did, but in a different world than we had. The good ones will still shine through and be amazing, and the rest can learn their mistakes the long way just like we did when we were young and obstinate.
I once had an experience where I asked a younger developer why they didn't use cookies for a solution they were using JWT's for. Their answer? They didn't know how to use cookies.
I was bemused, their solution worked just fine, it's just all the extra infra needed when compared to cookies, which would have solved the problem just fine.
I'm in my mid-40's and I would apply that observation to scrum (and software dev in general). What I tend to see are a lot of very earnest people who are legitimately trying and the behaviors often associated with scrum are what they've been taught works.
Truly understanding what goes into successful software dev takes years of work and is more craft than algorithm, so I can understand the challenges.
If you're talking about web applications then I tend to disagree. The SaaS paradigm and the UI living in a browser are relatively new ideas that are still maturing. I don't think there is a lot of good "what was already there" and we're just seeing the evolution of tooling for this ecosystem, not completely decoupled from the evolution of the large companies that rely on this tooling. Not sure it's worth getting frustrated about... I tend to just stay away from it because I prefer to work in areas that are less fluid. And sure, sometimes there's just Not Invented Here syndrome and let's reinvent the wheel instead of using existing wheels. Nothing new about that either, it's always been like that.
All that said, the principles of how everything works are unchanged. People that only learn to use a framework are just not good software developers. People that understand the principles can work in any framework. This has always been true and is still true. There's a shortage of people that really know their sh*t and there's always been as well. That's great... I'll never run out of work (I might run out of motivation ;) ).
Not at my day job, that is and has always been a series of mundane chores. I sadly think expecting to get paid for stimulating programming is fairly unrealistic. There is just not a lot of market for solving interesting problems or designing well-optimized code.
I find other avenues to build interesting things instead. At 35, I'm able to build things that I could never have when I was 15 or 20 or 25. I have so much more experience with what works, I'm much better at identifying which decisions matter, and which corners can be cut.
Works for me in ML.
When I would program for myself in the weekend I wanted to work on problems that would look good on my CV. Focus on techniques and languages that will be beneficial for my carrier. Soon also my hobby coding became a lot less enjoyable.
I then decided to seperate my hobby and carrier. In my spare time I started working on the things that fascinated me. Implementing operating systems, creating software rendered 3d engines, compilers etc. All from scratch. All in my favorite language (which is Common Lisp for me). Not caring if it would bring me money once, not worrying if anybody would use it or wanting to put it on my CV once. The only reason that is to enjoy it.
Straight away the magic I felt as a kid about computers came back in full strength. It hasn't faded since. And the funny thing... I started enjoying my enterprisy work also again. Already getting my coding passion fix in another way I could appreciate my work and the way of working for what it is.
During that time, I was a part time fitness instructor as a hobby, I trained for half marathons with friends, dabbled in real estate until around 2009 (guess how that worked out), got remarried, raised two (step) sons and now my wife and I are making plans to live a digital nomad life flying across the US. Our free time will be spent sightseeing and learning Spanish well enough to have a different experience when we stay in Mexico for a few weeks later this year.
It seems to me that it's an intellectual activity where one should go on for very long honing their skills and becoming better and better at it with age.
Maybe the industry sidelines the older more experienced technical folks at a cost, and that's why there seems to be a reinvention of the wheel several times in the software industry.
I'm curious if there are other technical fields that are similar to programming with regards to ageism.
Wishful thinking maybe, but open-source may help in this regard. As more and more of software is being added to the commons, those who've been there and done that can have a greater influence in driving progress.
> better capacity (and willingness) to adapt to the tower of babel du jour
this all sounds like you're describing people who can type and do what they are told.
and: we're all apes who can type.
edit: age is irrelevant. my point isn't that older people are better hires. hire for skill.
Obviously, outcoding everybody else is sometimes considered as a value and other times it is not. Shrug.
- cheaper
- less jaded
- easier to "manage"
- more willing to do the boring work that the older devs don't want to do
- more likely to be on call or work extra hours
- less likely to retire next year
No body wants to do the boring work. I think more experienced devs realize that a boring assignment isn't personal, its just business.
I think something that tech and chess may have in common as well is the ever-shifting grounds. Electrical engineering of today is not dramatically different than electrical engineering of yesterday. But programming (depending on the domain) is quite different today than yesterday. This is going to result in an age bias because at some point you start to simply become jaded learning 'Incremental, overhyped, and not strictly necessary new trendy framework/language [that nobody will be using in 10 years] #2,743.'
Chess is not a good analogy. It is a singular context. The real advantages that being over 35 and programming brings are:
- You are able to juggle much larger and different contexts at the same time - You have immense foresight that enables you to architect larger things
I think the peak age thing ends up being less due to actual aging and more due to the responsibilities of life taking time away from practice.
>“I feel I don’t have a lot to gain, I don’t particularly like [the championship matches], and although I’m sure a match would be interesting for historical reasons and all of that, I don’t have any inclination to play and I will simply not play the match,” he said on his sponsor’s podcast. [https://www.npr.org/2022/07/20/1112479750/magnus-carlsen-wor...]
Carlsen is very strong, but his title defenses have never really reflected that - ironically with the most recent exception. In the two defenses prior, he only managed to draw the classical section and relied on tiebreaks. His defeat is all but inevitable, and I think he wanted to go out undefeated. I think the one opponent he was hoping to be able to play against was Alireza Firouzja. Alireza is young and will probably become a world champion contender at some point. But Magnus would have been able to count on Alireza collapsing under the unique pressures of a world championship match and let Magnus then go out on top having undefeated having defeated champions from 3 generations. Instead Alireza collapsed at the candidates, scoring less than 50% in spite of being the (at the time) 2nd highest rated player in the world.
By the way, electric engineering of today is also quite different from electric engineering of the 80's. You have to learn new tools. Maybe if you work for an electric utility it's still the same though I tend to doubt that as well.
FWIW pair programming is very hard to do well and usually pretty uncomfortable. It needs to be structured well and done in smaller doses with lots of breaks. But when it has worked right (which was a small minority of the time for me), it has been exhilarating for me, unquestionably much faster and more productive than coding by myself, and much more fun.
I do think pair programming is also a fabulous way to share workflow tips and tricks. Watching someone drive you will see things you didn’t know, and when people watch you they’ll discover your secrets. Even if pair programming is hard, I think it’s pretty good for the organization to have team members doing it on occasion to help propagate this kind of knowledge more quickly. But yeah YMMV and it does also require self control and letting people do things their way sometimes even if it seems slow.
Either you're both at the same level, and you can feed off each other, thinking through edge cases and bugs as you go. Or you could be at different levels, where one engineer is teaching, and the other is learning. It's really a win-win in my opinion.
the miserly "leave me alone and let me code by myself" people are siloing knowledge and probably not writing the best code or products than if their code could be critiqued in real time or on pull requests and so on.
a lot of adult software engineering is not in a vacuum but in a collaborative and fast-feedback based environment
Of course, if you're managing, and you know someone is not motivated, you probably don't turn to this as your solution, but I'm not management, so I could be wrong!
I do want to add one more thing to the list:
* Find a well-managed team of really nice people that know more than you do.
Every part of this requirement is important, especially for generalists like me!
If you find this, life becomes lemonade.
I always saw myself as an individual contributor, and rebel against the path that leads to what's effectively project management with zero daily coding. But being the lead of a smallish team, making sure everyone's working towards goals and helping more junior devs when they get stuck, is a surprisingly interesting challenge.
Even to this day, I have never been hired after being interviewed by a youngster. I suspect karma might be a thing, so I just endure them all knowing little shits for 30-60 minutes and move on.
We could make a long list like this. Enormous amounts of high-quality, game-changing software is written by coders in their 40s and 50s, often with a couple more decades of stewardship and expansion of their works.
It's primarily navigating social environments which makes software production so obscenely difficult. There's nothing inherently complex about most popular web apps once you have access to the frameworks used to make the tough parts easier. No amount of frameworks or technical knowledge is going to solve stakeholders with conflicting interests, or coworkers heavily in favor of slowing things down through unnecessary red tape.
This happens a lot. I wonder what the root cause of this is.
For 25 years, in between, I was a manager. At one point, I progressed in my career, until I only managed, and did no coding (for money).
So I coded on the side. That's a big reason for all the open-source stuff that I have in my portfolio[0].
When I was told that the software industry has no use for old coders, I took my toys and went home. I was kind of butthurt.
But then, I've come to really, really like not having people interfering with my work, treating me with disrespect, and, worst of all, trashing my work.
So it's all good.
I previously worked at a startup where the head of the SWE department was in his 60s, and it was one of the best places I had ever worked at. The startup regularly employed older programmers and I learned so much from them and hearing the lore of when they were young was also fun.
I'm younger than you by a bit, have been coding since 1982. Some similar background (low level stuff, embedded, designed some boards). I'm now a manager (for a few years) and it's hard for me to find time to code which kind of maybe sucks. Am unsure ;) I still do a little. Given I have a family and other interests I just can't imagine myself writing software on my "free" time (which isn't that much given my day job is pretty demanding). That's what I used to do before this was work (high school and such). How did you manage to juggle work and do open source work at the same time? Do you just do this full time now?
Coding and architecture are my hobby, as well as my vocation. It’s a real pleasure for me to work on a software problem.
I have friends that own boats, travel, ride motorcycles, exercise, play golf, fish, hunt, take photographs, sculpture, paint art, cosplay, build drones, play music, build hot rods, etc.
I use that energy to write code. That’s also one reason that it has been so painful, having employers treat my work badly. I tend to take that stuff personally.
Also, I am a long-term member of an extracurricular volunteer organization, and this has given me a ready-made target demographic for my work. I don’t need to hunt around, looking for problems to solve. The downside, is that there’s no money to be made, Serving this demographic, and they can be a real high-maintenance crew. Rather demanding, and they tend not to play well with others.
I currently work on software more intensely, than I ever did, when I was getting paid. I’m probably devoting 4-12 hours per day, seven days a week, to it. I take breaks (naps, even), whenever I feel like it, and have a fairly full dance card, socially (see “extracurricular,” above). I don’t drink or use any “recreational” substances (not a teetotaler —I don’t really care what other people do), so I don’t have a lot of mental “down time.”
I have a family, and act as a bit of a caregiver, so working from home is important. I also no longer travel, all the time, like I used to. If I go anywhere, these days, it’s because I want to; not because I have to.
Like I said, I’m fully aware that many folks would not enjoy my lifestyle. That’s fine. I won’t judge others, for theirs, and appreciate it, when the favor is returned.
I am “the real deal,” though. My productivity is fairly high, but I have worked with folks that make me look like a lazy slob, and I’m no longer interested in playing ego games, or competing with others. I’m enthusiastic, open, friendly, and enjoy working in a team. I was a good manager, but hated it, and am glad to see the back of that.
I have been disappointed in the way that I’ve been treated by folks in today’s industry (I fairly quickly learned to avoid things like meetups), and, to be perfectly honest, there’s more than a little “screw you” in my energy.
But it WFM. YMMV.
I had a brief stint as a manager, ended up doing more coding than my team. That was the moment I decided to step back into coding again.
For me, coding is puzzle solving or playing with Lego. It is therapeutic. If someone can continue to pay me to play, why not!
- Nope, I don't want spend my week doing 1:1 with a team.
- 40 years old and I was never so sharp as developer as now. Focused. Precise. Fearless.
- Being the most senior developer in my team, doesn't put me in any special position other than I deliver a lot of good code, I do a lot of devops tasks, i review a lot of PR and people hear me.
- I can scale my work through my peers.
- I trust and respect the managers and architects, because I understand how hard their job is.
- They trust and respect me because they know that I could do their work (and they mine) and the roles are not ranks, but choices.
I don't fear for my job. I know that in the worst case scenario, even earning 50% of my salary would be more than the average of the population and I would still have fun with that. I can work in a niche market like Java.. or hell even Cobol :)
As a side note, get ready for the pitch forks, it started going up as we approached the then potential Trump era in 2016.
btw in Germany, people are already sharping their pitch forks too..
I stand with the OP. Maybe this is a young folks thing, but I don’t understand how anyone can pair program. It’s like going to the toilet with someone staring at you.
And all other purposes (like training juniors) is not for immediate benefit.
The very act of programming is buiding a house of cards in your mind and turning it into code before (or while) it collapses due to our limited brain capacity. Keeping two brains synchronized in the process just seems… too much overhead.
Like the OP, I’m just not interested in finding out if I’m wrong or not. I don’t even want to give it the benefit of the doubt lest it takes hold despite being a bad idea, like many other bad ideas that we now have to live with.
I had a manager who loved coding at us. We’d get on a 3–5h zoom call and I’d watch him mumble and write code. It was exhaustingly boring. He called this pair programming.
############
There is a common refrain in large companies, almost a badge of honour.::
"I used to write software, but then I became a manager and
stopped. But I am still technical."
How many of these managers used to read and write English (or Spanish
or Japanese) , and how many, once they became managers, stopped? But
are still literate?It is no longer possible to manage a company without reading and writing English (or Spanish or Japanese) But it is possible to do so without reading or writing code.
This book believes that it will soon be just as impossible to run a company without reading (and writing) code as it currently is to do so without English (or Spanish or Japanese).
All companies will be use software to gain what advantages in what military term "tempo of decision making contests"
This I call software literacy.
#############
The reason we old farts are upset is that there is an artificial divide between coding and the resource allocation and co-ordination of "management".
We need to focus on closing that gap - then coding is how we express most functions of "management".
I think software is going to be a big part in this
I would guess it’ll never be code. If code can handle advanced resource management, then at that point it’s probably AI and there will still be managers just dictating the parameters of how to manage.
And because it's such a mess, management is mostly about finding the "truth". If a reasonable version of truth were just there, how many people with managers as a title would we need?
Edit: I would also add that software writing is mostly limited to "coders" - most people in organisations don't have the training, and they don't have the access to the tools (permissions) and see above, why would they want it ! Literacy will be when the domain experts, can code as easily as they can write a report and do so to enhance their own needs.
So how can we get to a world where every decision a manager makes can be informed by an API? Hard to imagine.
Furthermore, I don’t quite agree that managements job can be reduced to truth finding. There’s just as much if not more trade-offs, values, accountability, human management (will there even be an API for 2 of my reports aren’t getting along?), etc. The world is complex and messy, too much so to be 100% defined in code.
I don’t see how this can be distilled into an API worth managements time without very strict schema and behavioral restrictions/enforcement or without AI that does the simplification and aggregation for you.
More for the role: full-stack has you doing multiple roles, but is not compensated as such. You're even removing the communication overhead if the role had been split in two. It seems to me as a business move to compress roles and pay you less for double the capability in exchange for varied work. I don't think people should just accept lower comp just because they prefer varied work.
But why do you think fullstack is paid less? Is this a generally accepted fact?
By relying on the idea that back/front is "just" a way of splitting a system, one could say that SRE/Front is a way of splitting a system, or Sales/Support, or Finance/HR, and so on. We're of course talking about ways of splitting the system(s) involved.
I think the spirit of the original idea is that roles are defined by boundaries. The boundaries are definitely "made up" but they aren't arbitrary. The degree of expertise and volume of knowledge needed to operate effectively (or expertly) within a role, and the ease or difficulty of obtaining those requirements, should be acknowledged when a company describes a role they are hiring for. If the bulk of your roadmap is back-end work but you want to hire full-stack devs because its nice to have everything, this seems like sloppy practice (though totally accepted).
On the other hand there are plenty of full-stack jobs that really just mean "back-end but not going to throw a contract in our face when you have to drop into the browser debugger to solve a problem". This is the kind of full stack I am. I wouldn't be okay with being asked to work on our frontend for the next year but I'm perfectly comfortable with debugging, making recommendations, doing some front-end work if it means filling a gap when resources are constrained.
Of course, they can't test their own code manually. That's two roles: developer and QA!
So a backend developer is at least 3 roles of work. Are you making 3x the salary you should be?
The biggest personal reason generalist roles should be priced higher is the time you spent to learn multiple things well enough to get a job doing them. If you accept a role as full stack that pays the same as a backend only role, you're essentially devaluing your own time. The other perks are reducing head count and giving the business that extra flexibility and convenience. If your salary doesn't reflect that, you're giving it away for free and we know how much businesses make us pay as consumers for convenience.
It might seems strange to consider a lot of factors, but you have to remember that generalists can bring quite a lot to the table.
I think of it in terms of leverage. If I knew for sure that my becoming a manager would let me be a force multiplier for my team, that they would all be enough better to more than compensate for losing me as an individual contributor, I would consider making the switch. Having been a developer myself, I would have insight into what gets in their way, and I could use my managerial powers For Good™ to get those things out of their way. At least that would be my intent. I've had excellent managers who had been good developers who chose this path.
Having said all that, one of my first managers early in my career was a high-functioning developer who was moved to a leadership role because that was the default expectation. He was a terrible manager; he played favorites and treated his responsibility as authority to be wielded against those he didn't like. I was fortunate that he liked me, but he stifled the early careers of some of my friends who were at least as good at the job as I was. So there is something to be said for not having developer-to-manager as a default expectation.
That I have to become a manager. That I won’t always code until I retire. That I won’t be welcome in the workforce in my later years.
All of those things frighten me! I love programming, and I want to be doing it in my 60s, happily. Glad to see that people are.
However, idle you never can be. Because being of age and not being able to run with the pack is bad. Luckily, it is not the framework of the day but more the soft skills which make the difference.
Note: I get contacted by recruiters constantly, at least a few times a week. Yes ageism is a thing, but you if you're really good at what you do you're much more valuable than young engineers.
At my current job I could have easily moved into people management. But the modest salary bump just ain't worth headache as long they let me keep building software.
My plan is to ease into retirement over the next decade or so as an indie hacker. Maybe try to grow my current passive income side project. Maybe make new things or take on occasional contracts.
There are plenty of people who lose their passion building software or get tired of keeping up with tech. There's a reason for stereotype. But there are many of us who are living exceptions.
The idea that you're expired at 40 gained hold in the 90s and 00s when programmers entrenched in 80's style apps had a hard time keeping up with the explosive internet takeover of software. Waterfall development of monolithic apps with synchronous I/O and multithreading didn't carry over well to SaaS. It's also kinda like how mainframe people had a hard time with the PC revolution before that.
But if you were building LAMP websites in 2000, that experience still carries over to today.
If some idea takes over again that requires a total rethinking, like maybe differentiable programming with AI-generated infrastructure, then there'll be a bunch of 40-50 year olds who'll find it too difficult to rebuild themselves around a radically different paradigm.
Sculptors, painters, writers are with you in this one...
It's very challenging to share creative space/material
For instance, at around the same age, I much prefer pair programming ; try to avoid remote work ; have little time for drawn-out technical discussions ; etc.
I wonder how much of these takeaways are career-path-dependent and how much are due to innate personality traits.
> Do people lose interest in programming as they age?
No.
> Is it accurate to expect that older programmers are slower,
I do think a lot more about code before writing it. I don't just starting typing in random crap hoping to feel my way towards a solution. Quick reflexes and high WPM typing is not useful for programming.
> make more mistakes,
Far, far fewer. In fact, one gets pretty good at zooming in on where the bug is in other peoples' code. It's a pattern recognition thing.
> and would rather be doing something else such as managing programmers?
No. Well, I would prefer to race cars.
First, the demand for software is going up significantly, and new programmers do not come with the advantage of experience, aka knowing what not to do. These newly minted programmers need mentors. They need examples. Businesses need adult supervision for these tasks which many managers do not understand.
Second, the demand for senior technical leadership is going to make it more financially rewarding to stay in a truly senior IC role. Going into management, product, etc. will not be as appealing an avenue to take your career to the next level.
I still enjoy it most days, like always, there are days where nothing clicks, or as happens in the embedded field, the hardware just won't cooperate.
It has just been constant learning from day 1, and I think that, as much as anything, still keeps it fun. After 38 years, I still learn something new regularly. Perhaps because it I chose to work in embedded development that is even more true. New chips, new technology, it changes constantly.
Most of what I have done in my life, so far all in the field of communications, is already obsolete. T-carrier systems (E1/DS1/DS0)? SONET (Does anyone use SONET these days)? ATM (not the money machines...)? K56 modems? I guess some people still use DSL. IS95 cell service?
Constant change, constant learning. Yet the fundamentals at the bottom remain, so there is always this stable ground to stand on.
I have reached a point where I no longer want to lead, I no longer want to spend countless hours in meetings. I just want to have features to develop, technical problems to solve. And people younger than me to work with.
As you get older, always seek out organizations with people much younger than you. They are a joy to work with. And don't be grumpy, don't make assumptions, and don't insist on giving out 'advice' unless you are asked.
But do introduce them to the company 401k, and any employee stock plans. And do let them know about the concept of 'same day sales' on exercised shares. Their education will have given them a good technology jump start, but schools are still deficient on personal finance. Don't pry into their finances, but guide them toward good early saving behavior. Trust me, they will thank you five years down the road.
Deteriorating eyesight, lower and upper back problems, hemorrhoids, weight gain, carpal tunnel syndrome and other RSIs are very, very common in our profession.
If you're reading this (perhaps because you still want to be programming in your 40s, 50s, and even 70s), make sure to prioritize your physical and mental health above everything else while you're still young. That is way more important than learning how not to suck at interviews, recognizing algorithms and knowing data structures. More important than compilers, programming languages, tools, hardware and operating systems.
It doesn't help if you used to be an exceptional architect, but you can't physically sit and code for even two straight hours anymore.
There isn't a massive amount of old programmers, for the same reason why you don't ever see a 70-year-old roughneck. Yes, the work of a programmer may not be as physically demanding, yet it requires certain mental and physical shape nevertheless.
So, please, keep yourself in shape. And not only by studying and acquiring new skills. Stay healthy for as long as you can stretch it out. Because sooner or later, that all sitting, staring at screens and coding will make you sick. That's just guaranteed.
> I have no idea about how effective pair programming is. My desire to discover it is zero.
I used to think like that, but then, recently, I started doing pair programming with a colleague from time to time using vscode live sharing feature, and I find it amazing. Not really for the pure implementation work, but rather for the more architecture or design of things like API or data structures. I found that we are really productive spending about one hour or less together in the editor and brainstorming live the ideas.
I suspect that a good chunk of the drive to send "aging" programmers into management is that they're much better at communication than their peers. And part of it has to be that a subordinate who is better at communication than the manager often becomes a de facto manager.
Leadership often doesn't respect organization charts. But this can cause a great deal of angst among anointed leaders.
I don't think there is any intrinsic reason one should age out of software development, if writing code is what you want to do. But many people do, particularly those for whom writing code is not an end, but a means to some bigger end. Although I wrote code, and was paid for it for many years, what interested me was not the code, but the problem we were solving with it. And eventually, if that's the case, you conclude that you can accomplish more - solve bigger problems, or make a bigger personal contribution to the ones your team or organization is working on, by coding less, or not at all, and architecting, designing, and directing more. And that's the path I took. Others may wish to, and certainly should be free to, keep right on coding.
But, and it's important - software development looks different from one decade to the next. Different languages, different architectures, different tools and evolving engineering paradigms. Whether you choose to remain a developer, or move into an adjacent management or design area, you will have to re-invent yourself to a significant degree, decade by decade, to remain relevant. Those that don't - well, they end up doing maintenance on aging systems with their aging skills, and not infrequently, wondering how and why their careers feel like a dead end.
Firmware worked on the new board, the very first time. I consider that a career capper. :-)
I figure I'll go until I'm 70 or so. We'll see.
Checks out. Last year, I retired from big tech at 40 because it just wasn't worth the headache. Now, I'm wandering, and it's fantastic. This is now the tenth month of just wandering, and I'm finding my footing with my SaaS which currently is in the red.
My only goal right now is to find partners which don't require me to compromise what I like doing (too much).
Seems to work reasonably well, though I see I would do better if I increased the running even more, perhaps switching out some of those bike travels to running to work instead etc.
My the youngins have some pride. Not sure how to break it to you but, the web, phones, etc was created mostly by people 10 years older than you.
Yup.
Senior staff tend to get better at spotting the standard industry cons, but I find it amazing people often think they are somehow going to outsmart company contract/IP lawyers. Legal encumbrances are often a necessary evil, but some of the agreements fresh grads eagerly sign read like a Faustian bargain.
One finds many people tend to disbelieve anyone that contradicts their personal biases, and some get indignant when told how the churn-rate for large firms will affect them personally. It is like wishful thinking bypasses years of statistics training, and basic numeracy. Many industries simply rely or a steady stream of gullible STEM kids to keep their Youth Employment Tax credits, externalize training costs, and provide stock bumps from a symbolic layoff for year-end investor reports.
I wish the Tech industry treated people better, but "it is what it is". =)
> Similarly, I don't discuss the benefits of getting people in the same room to solve a problem, but I am not super interested either.
Admitting ignorance is a hallmark of maturity. Boast about it and the desire to not learn isn't.
One I have only recently come to appreciate though is paired programming.
> I have no idea about how effective pair programming is. My desire to discover it is zero.
There is a limit of course, but recently I've been doing more and more, not by instruction but just more sitting on a call sharing a screen and going through the work day. Good combination of chit-chat and some problem solving, it's actually really nice for remote work.
I absolutely love programming. It’s the best feeling in the world.
A decade of doing it for money, being treated like an assembly line worker who gets bossed around by a PO that has no technical knowledge, and being constantly asked to drive the bus in the wall has sucked every last bit of enjoyment out of it. Or forcing me to go with a brain dead design that I’ve warned will cause us 10x the headache afterwards.
I’m not even 40 but can’t wait to retire and leave all these dumpster fires behind.
It still hasn’t felt like that as I’ve aged but nevertheless the worry still lingers. It’s nice to see I’m not alone in these worries and maybe I’m worried for nothing.
That will bring me close enough to 40. I don't really see me stopping coding then.
At some point reading articles like this I was mildly worried about being employable as a programmer later in life. But not any longer. The amount of work seems to be ever increasing, and open positions get filled with middling talent at the face of persistent lack of skilled programmers. Seems like anyone with even a sprinkling of motivation and passion will not go without work for long.
I don't get it either but at the company I am in.. everyone moves into positions where they code very little. It causes a lot of problems but that is how it is structured
I’ve gone the management route because I like making larger product decisions (or at least being involved in them). ICs at any level rarely get that level kind of input.
I low key blame the onslaught of product management for software as the problem. It’s pulled all the fun product stuff out of engineers hands. :(
As demonstrated by Adobe's Figma acquisition, there is plenty of opportunities in the authoring/graphic tools. So maybe you'll make the next Figma.
Without continued exponential expansion of the industry, seems numerically impossible that everyone would eventually become a manager or architect.
I like to design and think thoroughly about business logic and data layout and also how you host and architect the final running services/websites.
It seems that I just can't leave the software secret sauce being secret.
If you start at 40+, you are used to the most recent tech: you are more likely to use Python or Go than Java or C++. You’re going to be “cloud native”.
Does that help or hurt?
Developers that "age out" (author is only 40, lol) are those that think they can just stick with the same technology forever. Not in this industry.
Looking at myself, I think my biggest strength is in knowing what not to do.
So large companies only?
"I have no idea about how effective pair programming is. My desire to discover it is zero."
:)
One thing I've found (I started programming when I was 11) is that you can get better at judging situations/application/specifications and choosing NOT to write code in certain obvious ways or at all. Sometimes the right solution isn't the same old skill.
I've also come to realize that MOST hiring managers barely don't what they are doing as programmers or as managers. They have the authority of position but zero common sense or learned social skills to know what they are doing in their position - they are BEST IGNORED. Which can mean you won't get hired by them but often that is actually for the best - if you care about an idea, you should be the boss or be working with like-minded people who know what they are doing instead. That corporate job might just be 100% pure trash and a waste of time.
This last reality is why I do NOT value the idea of working for FAANG companies - there's nothing good about what they do or how they do it. They are generally evil in that sense. So why would anyone work for them? Mostly to make some money and because you don't know any better.