The unfortunate reality is one really good programmer can oversee 5 or 6 2-4 years of experience programmers. Almost all corporate software, even in FAANG, runs this way. People want to believe their 20 years of experience counts, but it doesnt. Mostly your ability is capped by your intelligence and exposure to other really good programmers. But it plateaus very fast, and there is no learning after a certain amount of years of coding (I would argue at 4-5 years of good/varied experience mark).
Whats more, I would argue that the idea that the human brain can hold ten years of programming information to be absolutely absurd. The universe of what you can learn technically and recall is smaller than that time frame. World class physicists, mathematicians, chess masters, etc peak young. The brain doesnt need a decade to reach the heights its capable of.
> there is no learning after a certain amount of years of coding (I would argue at 4-5 years of good/varied experience mark).
If you stopped learning after 4-5 years in the field, the barrier you hit wasn’t the lack of new things to learn. It was your own ability to learn them.
> I would argue that the idea that the human brain can hold ten years of programming information to be absolutely absurd.
You’re demonstrating the ignorant hubris of youth quite successfully.
To be generous, if we're talking coding specifically, 4-5 years is a reasonable cap in my opinion.
Coding is not the same thing as software engineering or systems/architecture design or technical leadership or... All of those things can be improved significantly through a human lifespan. The act of writing code? Not so much.
The other caveat is that most people will not be getting enough experience to hit that cap in 5 years. You need the right environment, mentors, etc.
You really contradicted yourself when you said that 'one really good programmer can oversee 5 or 6 2-4 years experience programmers' - and then said that experience counts for nothing. That experience is what allows you to oversee the junior folks. That's the value. And yes, it does increase logarithmically. But also the pool of junior folks who make it to senior and then staff and then principal drops off logarithmically too as they pursue management, or farming.
Career progression as an IC involves increasing not your technical output (although technical output matters) but primarily your blast radius and influence. You can get that by leveling up in multiple areas (iOS + Android + Server) or by pursuing that logarithmic growth in one deep technical area.
So yeah, you can only get so good at iOS development - but if you want to keep learning, pick up other complementary skills and leverage them. This is a choose your own adventure game and yes, you can fail.
I'm not particularly old, but I do mentor many staff engineers in the course of my work. Some a lot older than me, some younger, some the same age (although not too many younger).
I am saying the 20 years of experience is mostly not needed. 90% of programming roles can be done by 2-4 years of experience candidates. With a bunch more in that percentage done by young talented people. The old candidates are discarded for good reason, they arent better than their younger competitors, even if they write solid code.
>90% of programming roles can be done by 2-4 years of experience candidates. With a bunch more in that percentage done by young talented people. The old candidates are discarded for good reason, they arent better than their younger competitors, even if they write solid code.
I think I can agree on that
Majority of programming is web dev and other boring software which requires business knowledge from domain experts and programmers with some experience that just care. At worst they'll fail and refactor.
Yes, the main killer factor for programming is being able to pair your coding skills with another skill (e.g. business/domain knowledge, management, marketing, etc.). Many programmers don't do only programming as time moves on. They add other skillsets or branch out.
The thing is, I’ve seen pretty much every shape of problem you are going to come across and have a suite of different solutions I can apply. And I can pull together completely new solutions using the knowledge I’ve gained over the last 30 years.
It’s not about being able to write solid code - anyone can do that. It’s about experience.
Out of curiosity, what level did you achieve? This isn't a criticism, I think it would help color your perspective.
[edit] For instance this is the kind of thing I'd expect to hear from like an E3/E4. An E5 knows what to do to get to E6 and understands the value. An E6+ would never have achieved the level with this perspective.
L6. I've just seen the pattern of a high performing engineer running a team of ten junior engineers. No more high experienced candidates needed over that one. This is on high TPS distributed systems. I've also seen two years of experience candidates writing code as good as anyone else. Domain specific for sure, took them two years on the team to get there. I've also spoken with many prinicpal engineers and think they provided no extra value over many other engineers. Its a level to aspire to, but most are just corporate strivers, many many people under them could replace them.
> I've also seen two years of experience candidates writing code as good as anyone else.
I so so so severely doubt that. Two years of experience is barely enough to learn one of the most important experiences of all, maintaining your two year old code ;)
I've only got 7 years in at one FAANG maxed out at L7, so you've got both years and diversity on me in terms of experience.
With that said I profoundly disagree about the plateau in effectiveness as an absolute thing. I started programming professionally when I was around 20 and got a lot better quickly. By about 24 or 25 I was pretty deep into the asymptote of what I was learning at various startup jobs.
I went into a marquee shop at 28 and my ability exploded for several years, before kind of sloping off again for maybe the last 2-3 of those 7 years. I left and did more entrepreneurial stuff in completely new (to me) domains, and have seen another crazy surge in what I can accomplish that's still running right now. I currently run circles around myself from a year or two ago.
There were definitely incredibly capable up-and-comers doing amazing shit at 23 when I was playing pro ball, but the truly heavy hitters skewed (again not exlusively) 40, 50 and up. It takes time to master a craft. Even the galaxy-brained 20-somethings were intellectually brute-forcing past some deficiencies in experience.
You go through Coders at Work which I hope most would agree is a pretty good sampling of real legends (it unfortunately doesn't include many women, I think just Allen, it's a product of its time in that sense and people like Liskov are no-brainers to have been included), and these folks weren't 25 then, and many are still kicking ass today. Brad Fitzpatrick I think was the youngest one when it was released in 2009 and he's kicking more ass now than ever.
Maybe in some group explore/exploit banditing the color of a button in the GMail compose window 20 years of experience makes little difference (recent meme from /r/ProgrammerHumor), but I think that meme is a caricature.
Right but you sound very talented, just need one of you to watch the code of ten junior engineers. Youre ability to achieve L7 with only 7 years of experience proves my point almost exactly. Your yoe didnt matter that much. You didnt need fifteen years to start accumulating real knowledge. Regardless of the leaps and bounds you are making, the corporate world doesnt see it that way, and the reliance on leetcode for interviews proves this.
I don't know about "very talented": I take my job/craft seriously and as a result I'm good at it, but I've been programming in one form or another for 30 years, I got a hand-me-down original IBM PC when I was eight, and a hand-me-down 386 / copy of K&R a few years later. I still haven't decided if the ubiquity of access to a JS programming environment (good thing) outweighs high barriers to entry of figuring out how to write native code on e.g. a kid's iPhone (bad thing).
I think it remains to be seen where the corporate world lands on all of this. It's still fairly early days on 22-year-olds being able to raise VC and hire a bunch of other 22-year-olds to go "disrupt" some market. The results so far are mixed. Too soon to tell.
As for leetcode interviews: no one likes them, as I've said elsewhere I didn't like being interviewed that way and didn't like interviewing others that way (I could go a little off script to try to dial down the false negatives a bit, but there were in general pretty clear non-discretionary standards). But every high-prestige admissions system has some standardized or semi-standardized test. For undergratuate in the US that's SAT. LSAT/MCAT/GMAT you name it.
Companies don't want to be using extremely unpopular tests with lousy recall. Interviewers don't like it, interviewees hate it, and it has all kinds of structural biases against people who didn't just finish a CMU undergraduate. I personally might flunk a leetcode interview at a company I contributed absurd amounts of good code to.
But no one has thought of something better yet. It's a real opportunity.
It took me 15 years of development to start feeling like i really knew what i was doing (eventhough i have a CS university degree), and i keep understanding new things every month on my job. And that's just the coding part, i'm not even mentionning the human aspects when working in a team.
The way i analyse a problem,
approach technological solutions, design system architectures, pick a programming language, are all extremely different from how i did it 5 or 10 years ago.
For a lot of us, software development is much more similar to craftsmanship than breakthrough scientific research.
This is a function of what youre exposed to. Go work for a big software company and switch teams to a different domain every six months. After three years, you will rival almost any engineer. The issue is people get mostly worthless or extremely siloed experience, and so they take a long time to build a complete picture of how to write software in their head.
Switch teams to a different domain every six months?
In the domains I’ve worked in, it might take six months just to get the basic idea sketched out and working. The current project has a timeline of 8 years to full completion — two years just to get to the first minimal release for a subset of our problem domain and the hardware to run it on.
It sounds like you’ve been doing unchallenging work in unchallenging domains and have acquired a much too inflated opinion of yourself in the process.
I've worked on teams with 6 month ramp up times. Almost always this happens because there is an absurd amount of domain/business knowledge encoded in some massive 500k line code base. Tenured engineers gate keep with domain knowledge. The real learning happens by switching between working on those types of systems and then moving to greenfield to implement the patterns you observed.
How do you know if you did a good job if you leave after a few months? Did you leave a beautiful work of art, a bug-ridden unmaintainable mess for others to clean up, or anything in-between?
A large part of experience is doing things that seemed like good and reasonable idea at the time, and then discovering that it actually wasn't. And how do you know what are and aren't good ideas? By sticking around and seeing what does and doesn't work.
i've been doing both big corp, small start up, freelance gigs, backend, mobile app, web development, huge system migration with running customers, database design, etc.
I can guarantee you that 4/5 years xp is absolutely nothing. You can barely scratch the surface.
what you do start get after 5 years however, is the feeling that you've seen it all ( because you may have, but only very superficially). It makes people like that extremely dangerous.
> Mostly your ability is capped by your intelligence and exposure to other really good programmers. But it plateaus very fast, and there is no learning after a certain amount of years of coding (I would argue at 4-5 years of good/varied experience mark).
This is very false in the embedded space. It may be false in other spaces as well.
I’m also in the embedded space and I totally agree with you. I have 12 years of experience and I’m still getting better and learning new things. I worked with some people with >30 years of experience and they were by far the best and most knowledgeable programmers I’ve ever encountered.
Maybe it’s because embedded programming doesn’t change as often as other areas, such as web frameworks. The experience I have from 12 years ago of reading data sheets, interfacing I2C sensors to a PIC32, and debugging by turning on LEDs is still relevant today, even though I have moved on to much much more complicated projects.
I don't know the embedded space, but distributed computing, web development, ML systems, etc all are this way. This assumes you are actually getting good experience (which most people do not).
Maybe if you are writing a new database that will be sold as an offering at AWS/GCP/Azure, but those roles do not apply to 99.99% of engineers.
i strongly disagree and found it interesting in the recent 5 hour lex friedman interview with john carmack that he said even at his age he was still getting better every year.
i think programming actually belongs to a category of activity, along with pure math, where crystalized intelligence is the primary driving force.
> human brain can hold ten years of programming information to be absolutely absurd.
Wow, so this seems to completely discount the very idea of expertise? Do you believe it simply doesn't exist. Strong dunning-kruger vibes coming from you right now. Naivity I only wish I could bathe in LOL
They've apparently (other comment) hit 10 years in their career, guess they have no value to add and from here on out it's just a decline as they forget everything they ever knew. Might as well put them out to pasture...
No look at when top mathematicians arise, in their early 20s. Intellectually demanding professions (like stock trading), dont need 10 years to rise to the top. You either have it or you dont
Strange to presume all domains are equivalent. Stock-picking and math-savant-esque talent are very distinct from almost every domain where one would value tenured expertise: surgery, aeronautics, civil engineers. Goodness me: consider your blind spots.
The hightest paying companies all use leetcode. They do this because they believe performance on the job is related to IQ. Trading firms hire programmers at 400k right out of school, hiring MIT grads. Its all the same.
Painfully starting to understand that this is why the greybeards either move to management or retire. It becomes increasingly precarious to justify your salary as an IC compared to people with less experience. Am I really 2x as productive as the saavy mid-level engineer with 5yrs experience on my team that makes half as much? Probably not.
I am 50. Between 40 and 50 I hardly changed a line of code for pay. I did other things, requirements, managment, coordination and stuff. Now I once more am developing. The 10 year break for me gave me new appetite for what I used to like but grew tired of. But to be honest, I have forgot a lot and need to be humble about it. But in other ways, I have experience and I can clearly tell my younger colleagues respect my judgement and opinions.
Management at software companies know this, they just don't speak it outloud. The hiring decisions speak volumes. Top software companies will pay 300k for a 3 years of experience candidate, because the value that engineer creates is comparable to a ten years of experience candidate.
The answer there is level/competence-based, rather than years-of-experience based compensation structures. If you're only 50% more valuable than someone else, you should make ~50% more, not 100% more. Note that these figures are in total-cost-to-company terms, which might mean your own gross pay would be more than 50% higher if social and per-employee-overhead charges cap out.
Part of the issue is people with 25 years of experience think they deserve more than someone with "only" 15 years and when they don't get it, it's because of ageism or age-discrimination not accurate assessment of value.
Yep. Engineering talent increase due to exposure is a sigmoid curve that tops out after 1-2 years. There are social paper cuts that make you _wiser_, but not a more effective engineer in terms of "things shipped" and "problems fixed"
EDIT: inb4 downvotes roll in to your post because it's an uncomfortable truth
It's not that its an uncomfortable truth, of course your growth in technical ability in a new field slows down quickly but that's not where your value is derived from. It's not what your company is looking for from you. It's not how you level up. If you continue in this vane you will plateau in your career very quickly and you will wonder why.
You are describing technical contributor - but that's not really your job. The sooner you realize that and develop the skills that matter, the more quickly you'll make the mid/high 6-figure bucks. Maybe 7 with equity appreciation.
There are plenty of sub-fields where you do want someone with experience.
I wouldn't put an iOS developer into a position where they have to write kernel code.
yep. The sooner you come across it, the sooner you start building skills that actually help you become more effective for your effort, like learning how to build teams and managing the social graph of an engineering organization.
We've raised the floor so much in FANG tier companies, that the differential of programming skill isn't what makes you more effective. I mean, save for the top 1% freaks ;P
Whats more, I would argue that the idea that the human brain can hold ten years of programming information to be absolutely absurd. The universe of what you can learn technically and recall is smaller than that time frame. World class physicists, mathematicians, chess masters, etc peak young. The brain doesnt need a decade to reach the heights its capable of.