If you're young and sharp, programming looks like paradise. It's more or less a meritocracy, there's a ton of personal freedom, and you get to spend your days doing creative, challenging work and getting paid fairly well. You may not have even had to slog through 4-5 years of college.
You'll start to see the downsides as you approach 40 though. Many programmers can't play the social games that management requires, there's a limited number of "architecture" slots, and you're suddenly competing neck & neck with people twenty years younger willing to work 60+ hours a week for half your salary. It's brutal but you've just got to knuckle down and do your best to keep up. Leverage your experience to learn new tech faster and constantly work on moving yourself upmarket technically. You've been in a footrace all this time but you may not have noticed it until now.
We all compete with people who will work 60 hours a week for half our salary. Words cannot express how much I disagree that "knuckling down and doing your best" is a sustainable competitive position. Do it better than they do. Do it measurably better than they do. Do it ridiculously better than they do. Widen the scope of "it" to include a skill not on the menu at RentAResource.com, then do it. Market your doing of it better than they do. And, finally and most effectively, own the effing company.
That sounds nice on paper, but there are a lot of extremely talented and productive young programmers on the market now. The kind of education you can provide yourself if you really dive into the open-source world and things like github simply wasn't available even ten years ago. So yeah, do your best, in the old fashioned sense of the word before people became so enchanted with non-sequiturs like 110% performance.
> That sounds nice on paper, but there are a lot of extremely talented and productive young programmers on the market now.
Really? There are certainly a lot of young programmers who think they are extremely talented and productive, but 'twas ever thus. I'm still waiting to meet the 20-year-old who is as smart as I'm sure I was when I was 20. :-)
> The kind of education you can provide yourself if you really dive into the open-source world and things like github simply wasn't available even ten years ago.
And why would you assume that people who have access to that and ten years' extra experience would be somehow inferior to those who have access to that without the extra experience? The availability of open source code to explore is a potentially useful resource, but it's only one resource. Reading is still no substitute for doing, and it's not like many of the older programmers today never worked on hobby projects before the Internet came along.
And why would you assume that people who have access to that and ten years' extra experience would be somehow inferior to those who have access to that without the extra experience?
So that's when you do things ridiculously different than other people. If you fail, you've still got this baseline of skills to fall back on, and you're indistinguishable from everyone else. If you succeed, you're very much distinguishable from everyone else, and that's worth a lot of money.
The same explosion of knowledge that open-source and github has spawned has created a wealth of new niches that are quite promising but generally underexploited. Everybody's piling into Ruby on Rails, Django, JavaScript, iPhone, and Android development. How many people are piling into things like computer vision, large-scale data mining, wearable computing, or robotics?
Search was not sexy in 1998. E-commerce was sexy. Everybody piled into E-commerce, which left the field wide open for Google to come in and clean up while Pets.com withered away and died.
Agreed. That is my current plan exactly. I'm heading off for 3-6 months in SE Asia to spend travelling, living cheaply and studying math & machine learning with the goal of coming back to the States later to either pursue a graduate degree or a gig doing ML/analysis.
Can any of them reliably find SQL injection, write a fuzzer, or spot an integer overflow? I'll pay you multiple thousands of dollars to refer them to me.
If not, re-read Patrick's comment with that in mind.
I only know the basics of these (SQL injection and integer overflow for kicks in high school, dumb context-aware codec fuzzer for a memory allocation bug in FFmpeg), but I'd like to take your quiz to see what I'm missing. I'm co-teaching NetPen at Northwestern this fall and want to know what I can focus on.
I'm turning 21 in a couple months, for whatever it's worth.
Plenty of them can. I've worked with several myself. As you might expect, they don't need jobs. I worked with a 20-something at my previous job that was as productive on his own as some entire teams.
If they are making 60k a year, you can make several thousand dollars right now by getting them a rather large pay raise. Otherwise, re-re-read Patrick.
I seem to have been bitten by the radioactive spider that allows me to reliably post the highest-ranking "who's hiring" comment here, and your perspective on the availability of domain expert programmers doesn't square with my reality.
I know several 20-somethings making well over 100k/year coding and managing teams of much older engineers. For the most part they got the domain expertise that implies doing real research in top undergraduate CS departments, but they do exist.
Of course, the smartest thing you can do as a senior programmer is build domain expertise and get out of the more commodified areas, like web app dev. If that's what you & Patrick are suggesting I agree, but you underestimate your juniors at your peril.
You're doing a really good job of evading the point here.
If your friends are making $100k/yr, they are squarely in the same hiring demo that 40 year old senior devs are.
The whole thesis behind the article you are commenting on is that companies are hiring young because young devs are cheap. You made a comment to the effect of, "watch out, young cheap people can be domain experts too". I think you're mostly wrong, but I'd love it if you were right, and I'm very much putting my money where my mouth is.
I know that there are anomalously capable 25 year olds out there. I'd love to talk to them, too. But the idea that all of Silicon Valley is built around those people rings false. It may very well be built around 25 year olds, but not the weird ones that run High Frequency Trading Engine teams.
A lot of senior devs are making that kind of money not because they are domain experts but because they have been in the same spot collecting raises for a long time. Those are the kinds of people my warning was intended for and I think a lot of these people wildly underestimate how hard it would be for a bright young somebody to walk in and do their job.
I'm not denying that older, experienced programmers with strong domain skills are in demand, of course. I'm just saying that beneath that level the competition is heating up.
I don't think we were in substantial disagreement to begin with. I just don't find language like Do it ridiculously better than they do. to be very useful. Certainly English superlatives have lost most of their punch at this point but for most people their best isn't going to be ridiculously better than everyone else's.
Next time, read the comment carefully before fixating on a single word and starting an unproductive argument. I know it's hard; I do it all the time too.
Re-read Patrick's comment, but this time, take the Cliff's Notes with you:
* It's not enough to be better; you have to find ways to be measurably better; implied: better along axes that people who write checks care about.
* Learn to market yourself; implied; the business world is not like Github, and nobody is going to invest any effort into learning how awesome you are, because your awesomeness is not inherently interesting to most people who write checks. You have to make it interesting.
* Develop non-commodity domain expertise; implied: not only is "learning Merb" not a credible differentiator, but, all respect to Yehuda Katz who is smarter than me, it's likely that writing Merb isn't either.
* Own your company.
The fact that Patrick managed to pack this into 91 words and all you appear to have taken from it was "Do it ridiculously better" may account for some of the downvotes.
Patrick's built a nice business for himself but I spent the last ten years working with some of the people that wrote the foundational research papers on computer graphics, not building bingo card generators, so maybe we're looking at this from different ends of the pipe.
Cageface: the old guys better watch out because there's lots of hungry smart young guys.
Patio11: anyone regardless of age needs to understand how they create value and aggressively point this out unambiguously. And creating value doesn't mean solely working hard or being smart.
Cageface is cautioning to not assume more experience means higher value. Patio11 sorta did the same thing cageface did earlier and keyed in on the "60+ hours" bit. His (patio11) point is that the way to demonstrate value is not to count yourself among the young, or old, or authors of foundational research papers on computer graphics.
I've been in my position a few years now, and I have accumulated domain knowledge that is valuable to my employer. I have no doubts that someone else could come by this body of knowledge, but it would certainly take time an mistakes. If I do not make these differences obvious (measurable and visible), I fail to do so at my own peril.
That's assuming you're doing the same thing you used to do 20 years ago.
I mean even with new technologies, if you end up building sophisticated CRUD interfaces with language FooBar 20 years from now, you can't really complain about it.
People who managed to differentiate themselves in CS over the years moved to stuff like computer vision, natural language processing, designing programming languages, optimizing virtual machines, designing protocols or mixing their knowledge of CS with another field.
Very advanced stuff which takes years (if not decades) to master and to write/build properly.
So, I would only worry if 20 years from now, you're still solving the same problems but with a cuter UI and a faster machine.
PS: Should have used "one" instead of "you". I don't mean "you" ;-)
So, I would only worry if 20 years from now, you're still solving the same problems but with a cuter UI and a faster machine.
Exactly. You have to constantly reinvest in yourself technically. Learn new languages and platforms, study a new business domain, hack on at least one side project and keep it up on github. There is no such thing as tenure in software.
> ompeting neck & neck with people twenty years younger willing to work 60+ hours a week for half your salary
My probably naive question is, how come you earn twice as much in the first place? Shouldn't salaries reflect the value you provide to your employer, so that either 1) you don't earn as much because you're actually worth less than the 60+ hours working kid, or 2) you earn twice as much because the hours you do put in are worth more than the kid's hours?
I would hate to be out of a job at fifty because by some arbitrary convention I'm supposed to either earn twice what the kid earns, or alternatively be jobless. If I can't provide more value than the kid, then pay me as much as you'd pay him.
Salaries don't only compensate for performance, they also compensate for responsibility.
Do you want to be the person that loses the company some amount $x, comparable to your yearly salary, when you make a mistake? Or are you willing to lose the company 100($x) for making the wrong decision, be fired for it, and have your entire team looking for jobs?
I tend to think of it as "how much of the buck are you expected to stop?"
Hi, thanks. I completely agree, if you have been given more responsibilities, that should (in theory) imply that you're good at what you do and so your hours are worth more than the average (I didn't just think of performance, but value in every sense). That's something else than just scaling salary with age though, or?
But in reality, salary worth is determine by your negotiation skill within that limited time window before you accept the new job. And that's another industry's dirty little secret.
I'm pretty sure that at least some companies compensate for negotiation skill at annual raise time. Google, for example, tries to normalize salaries by performance & job function when they grant raises. So if you're a really good negotiator and managed to get a salary much higher than your equally-performant peers, your annual raise & bonus will be less than if you're a really good programmer but suck at negotiation.
My guess is that all other things being equal, a bad negotiator won't actually catch up to a good negotiator. If things are not equal though, and the good negotiator sucks at his job while the bad negotiator is absolutely rocking it, I think that the strong technical person could easily make up the difference through promotions and bonuses.
Negotiation skill and how desperate you are. Some will do anything to get a foothold in The Land of Opportunity, while others are already there and can afford to wait for a better offer.
> Shouldn't salaries reflect the value you provide to your employer
Maybe they do.
An hour of one person is not always worth the same money as the hour of another.
Experience is a differentiating factor, and older people tend to have more of it.
That doesn't mean that every older person is worth more than every younger person or that every older person is more experienced than every younger person.
But if I can decide between hiring two guys, one that is experienced and gets the job done by working 40 hours and has a life and the other that works 60 hours and has no life I'd go for the one that works 40, whatever the age.
So if you're afraid to be out of a job at 50 because you're going to be 'expensive' work smarter, not harder. Provide the same value without having to put in the same number of hours.
That's the best way to guard against obsolescence.
The variation in productivity between programmers is somewhere from 1 to 10 to 1 to 100 (although I like to point that for a certain level of problem difficulty there's a cutoff below which productivity is 0 (ADDED:) ... and then there are those who's contribution to the organization is negative, but that's a different problem...).
If it were the case that "salaries reflect the value you provide to your employe" we'd see some people making 10, 25, 50 times as much as "average" or below programmers. And I'm sure you can figure out a bunch of reasons why that would never fly in addition to the other replies to your query.
> The variation in productivity between programmers is somewhere from 1 to 10 to 1 to 100
I agree with your sentiment, but I think you're missing something important: it is possible (and, unfortunately, quite realistic) for a low-level programmer to be "negatively productive". For difficult problems, it may simply not be possible for someone without the required skill and experience to find a solution. Even for easy problems, though, it's possible that the solution found by a weak developer will in the long run cost more than the benefits it offers, for example, because they reduced the overall design quality of the system and later a stronger developer has to spend their valuable time fixing the design to clear the technical debt.
You're very correct and I added a note to that effect apparently while you were composing your reply. And your point about the easy problems is really important to highlight (and wasn't one I was thinking about).
The question I have about these 100x (or 10x) productive programmers is why they wouldn't jump ship on employment and sell their 100x productivity on a project basis? Presumably they would make multiples of their salary if they are really multiply productive.
Some of us did. As a contractor, you certainly can earn a significant multiple of the hourly rate you would make as an employee in most companies. If you set up your own business and build your own stuff, then you have almost astronomical potential: the software development business has low barriers to entry, and the right idea can scale from a small team to serving thousands or millions of customers.
However, it's not as simple as that: you absolutely must have a broader set of skills to work effectively in these ways. There are many management and communication skills that you wouldn't need much working in a technical role as an employee that are quite simply essential to working independently, and more still if it's not just your own work to be organised but a whole team/company. Also, you are operating without the safety net that being an employee provides: you typically bear all of the risk if you're on a high-margin fixed-price contract that overruns by a year, or if you put your own money into starting a company and your idea just doesn't work out.
A lot of us including myself just don't have what it takes to work on a multi-client consulting basis. Plus at least back before the net became really big Gerald Wienberg said that the correct hourly basis to set is 5-6 times what you want to earn because of all the overhead and downtime that comes with this business model. That's still a factor if you're charging on a project basis, which is extraordinarily dangerous in our field due to the inability of our customers and ourselves to correctly scope a project before it starts.
> we'd see some people making 10, 25, 50 times as much
Ha, I hadn't thought about this aspect at all, thanks. But would you necessarily need to assume the pay should be directly proportional to performance? Perhaps earning double as much when you're 10x more effective is more reasonable, and then triple at 100x - say, a logarithmic scale? Also, productivity and hours spent are both only partially reflecting the total value someone brings.
Well, in any case, I was thinking about _some_ kind of system where your value would be expressed and not some irrelevant metric like age.
I think it depends how you define "effective" and "performance."
For reasonable definitions, I think compensation would have to be directly proportional to effectiveness, such that being twice as effective results in twice the compensation.
That would be the case if "effectiveness" meant "your responsibility for the firm's revenue." Otherwise, what are you measuring, such that you can be "10, 25, 50 times" as effective? Efficiency of coffee making?
I agree. Salaries should correlate more directly with performance but in a lot of companies you steadily collect your yearly raises and after a while they add up. This can be very dangerous for people in tech though. In fact I just left a job after ten years of steady raises because I felt I was stagnating. I'll probably take a considerable pay cut in my next job but I think staying put would have been a lot riskier in the long run.
At least I'm not chained to an S.F. mortgage that means I can't live on < $90k/year.
Unfortunately, you're wrong. Salary really only affects the upper limit of how much you're willing to pay an individual.
In reality, you pay an employee just enough to keep them happy. As long as they're below the threshold where they're worth the cost, that is. Better employees have a higher threshold, but not necessarily a higher salary. It all depends on what they need and demand - which only has a marginal correlation with actual value.
Speaking from experience - there have been a few times we've given raises to great employees who were already happy with the salary they were getting. It didn't have much of an effect, really - we would have been better off investing that money in a better work environment - which would have a much more positive effect on our employee happiness.
You'll start to see the downsides as you approach 40 though. Many programmers can't play the social games that management requires, there's a limited number of "architecture" slots, and you're suddenly competing neck & neck with people twenty years younger willing to work 60+ hours a week for half your salary. It's brutal but you've just got to knuckle down and do your best to keep up. Leverage your experience to learn new tech faster and constantly work on moving yourself upmarket technically. You've been in a footrace all this time but you may not have noticed it until now.