Ask HN: Will programming continue to be a lucrative profession in the future?
Being a programmer right now is, in general, great. The job market is on fire and the industry is rapidly changing. Supposedly, the rate at which new jobs are created for computer scientists even outpaces the rate at which newly graduated CS majors enter the workforce.
Do you expect this trend to hold?
If so, how crazy will it get? The rumors posted on here of $300k salaries for non-famous engineers already seem unbelievable to me.
If not, what will cause it to end? The only doomsday scenario for developers in the first world that I can think of is a rise in extremely competent dev shops in developing countries.
(I realize that no one can predict the future, but I'm curious about the HN sentiment here.)
86 comments
[ 4.4 ms ] story [ 131 ms ] threadedit: a word
I also did an interview on Above the Law about how some people in the legal profession may be better off in software: http://abovethelaw.com/2015/06/should-you-leave-law-and-lear...
And for the record, the majority of new lawyers in the United States are paid as much if not less than an junior software developer these days.
I think the assumption that you call out yourself(64 yo developer) is the main difference over a lifetime of work. How many developers are going to be finding much work over 45-50 unless they are already well positioned as an independent consultant or have a name brand? That's 15-20 years more earning potential for the lawyer.
The other thing is the startup x-factor. Because so many start ups fail studies have shown developers that go the startup career route actually make less on average than their counterparts working for larger established companies. Very few people have the drive to make partner at a large firm but even fewer people are lucky enough to be an early employee at a company that makes their equity worth more than a years salary.
Why exactly is this? And why would anyone go into a profession where they will be unable to find work when they are half way through, and at the peak of their powers? In every other intellectual enterprise--doctors and lawyers particularly--they hit their peak earning years just as software developers because (supposedly) unemployable.
This makes little to no sense. It isn't like good older developers become magically incapable of learning new langauges or frameworks. It isn't as if they become less reliable than a 20-something just out of school. It isn't as if they suddenly forget 25 years of history that lets them make more accurate effort estimates than anyone else.
So where does this perception that developers must be young come from, and why does anyone go into a profession that by definition (apparently) is going to require the to change feilds mid-career?
I suspect it is that people think they are less flexible and less willing to work unsociable hours though.
The problem is this: If you have more than 20 years of experience and want to continue being a employee programmer you only have a few choices. You can advertise yourself as a senior programmer and try to command a senior salary. Or you can advertise yourself as a more junior programmer and ask for a low salary. If you have the ability to do the senior position, then there is not problem. If you do not... who the heck is going to hire someone with 20 years of experience who is still performing like a junior? Even if they are cheap, there is value to the employer of imagining that the employee will develop over time. Someone who flatlined 15 years ago is not someone you want on your team.
The moral of the story is: if you want to be a programmer for your whole career you need to stay on the front edge of the industry. You have to work your butt off day in and day out to not only stay current but always improve yourself. There will never be a day where you "make it". You will have to justify that senior position that you are going to occupy and show that you are better than the up and coming young wolves behind you. If you are not prepared to do that, then you are better off not being a programmer.
Schools see programmers as a money making industry for them, so they mint new programmers as fast as they can (regardless of ability). People in other industries move over to programming because there is such a demand that you can even get a job without any qualifications. The end result is that even while demand is outstripping supply, the vast majority of the supply is under qualified to do the job. Employers burned by under qualified employees agree to spend more and more money to hopefully find the needles in the haystack. If they collude to agree not to pinch each other's needles they get their hands slapped ;-).
Even if there is a world-wide economic downturn (like we just experienced), it plays into the hands of high salaries because under performing companies dump under performing employees on the market making it even harder to sort the wheat from the chaff.
It's a bit like professional sports. There is an endless supply of people willing to play sports for a living. The competition to get the best of the best drives salaries up for everyone who gets a job. I was surprised to learn that one of the Japanese soccer players that I follow who has been sitting on the bench of a poorly performing 2nd division European team for 2 years is making more than $1 million a year.
However... although I don't see salaries going down for a very long time, I do see it getting progressively harder to get a job. Perhaps, as you say, like the lawyers. I think businesses are going to want to get value for their money and similar to the sports industry I can see a much more laissez faire attitude towards employees. Produce and you can stay (maybe). If we don't like you -- for any reason -- we'll dump you for the next guy.
Maybe I should become an agent...
Do you think opportunities to make an economic impact with software are increasing, decreasing, or staying the same? (I'd say they are increasing, as the world depends more and more on software.)
If you want to earn high wages, you should probably aim for skills that are (1) in high demand, (2) in short supply, and (3) not easily replaced by substitutes. So find a niche where there will be real demand and supply is limited (because it's hard to master: think "programming" + electrical or mechanical engineering, or computer vision, or...).
If your goal is to maximize money in your pocket, standard employment is a bad model.
Meaning demand is going to increase at an increasing rate, supply will remain at a constant growth rate.
In the future, while technology may replace many things, It will never replace entertainers, engineers, designers or people who create creative things in general.
The killer fact to me is that software is hard. It is something that cannot be seen. Imagine trying to diagnose traffic problems when you can't see the cars or the roads or the traffic signals. Software is so hard that even if you build a system that accomplishes the main objective, it can be extremely hard to modify the system in the future if the quality is low. Top talent will always be in demand. Over time a few expensive talented programmers will always create a better product than hundreds of cheap mediocre ones.
The field that will collapse the hardest is going to be data science. I speak to this as a data scientist, where most I meet don't have the knowledge to perform their duties. Eventually our salaries will decrease to those of traditional office workers/middle managers.
What is a engineer to do in this situation? The answer is to specialize, or gain exclusive access. Specialization is obvious, and exclusive access are things like clearances, certifications, and networks. Of course, this omits paths such as entrepreneurship.
That is what they said 15 years ago. Getting into the industry is not hard. It is staying that is hard. You need a respectable amount of talent and will power for that. There is an incredible amount of tourism going on in our industry. Put out an advert for a programmer and you will understand why recruiting programmers is so exceedingly costly:
http://blog.codinghorror.com/why-cant-programmers-program/
Like me, the author is having trouble with the fact that 199 out of 200 applicants for every programming job can't write code at all. I repeat: they can't write any code whatsoever.
This would only happen if the growth of supply (of labor) is greater than the growth of demand (for software).
Which has simply been not the case. Just the opposite in fact.
As software "eats the world," we see an ever increasing demand for programming. This is likely to remain the case for the foreseeable future.
With every new system successfully brought online by one programmer, they are creating a future need for four programmers to maintain that system.
Just to keep the existing body of software afloat, the existing body of programmers is dramatically insufficient. We have known this problem for decades. You will find lots of old papers raising exactly this issue.
Concerning developing countries, to an important extent they have already been absorbed into the global workforce. Certainly India is already supplying its best and its brightest. Only a limited percentage of the workforce is capable of working as a programmer. Furthermore, developing countries increasingly consume their own supply of software services. Therefore, third-world supply may already be largely exhausted.
With the world increasingly dependent on software (Has it every been increasingly dependent on lawyers?) stopping to hire programmers pretty much means scrapping systems on which organizations depend. This happens all the time already, but the net effect is still to add new systems.
Law (in the US) reacquires an extra, very expensive, 3 year degree, and many law school graduates are never able to find jobs as lawyers.
The market will probably eventually correct itself, but the days of law school as a sure-fire way to a high paying job are probably over.
Relatively modest undergraduate performance can get you into a law school like Northwestern's, where 87% of the class of 2013 "found work and reported a salary", and at least 43% of the class had a starting salary of over $160k, a very respectable ending salary for a programmer, especially outside of SFBA (http://www.lstscorereports.com/schools/northwestern/sals/201...).
Look at the distribution of lawyer income. There is a large group bunched near the bottom making 40k-60k a year, and a smaller group at the top making above 160k. You need to do really well to be in the 160k group.
>Relatively modest undergraduate performance can get you into a law school like Northwestern's
The median LSAT score for Northwestern is 168 about that's right at the 96th percentile, so about 4% of people taking the LSAT will score a 168. Even Northwestern's bottom quartile score is just below the 90th percentile. Their median undergrad GPA is 3.75. How are those numbers relatively modest?
So yes, someone who scored in the 96th percentile on the LSAT and had a 3.75 GPA in undergrad has a decent chance of spending 3 years at a top tier law school where they have a 43% chance of making over $160k a year upon graduating.
Northwestern also costs about $300k to attend.
>87% of the class of 2013 "found work and reported a salary"
I don't thinks that's really saying all that much. It doesn't say they're working in jobs requiring a law degree. Of course 87% are working at some kind of job--they owe $300k in student loans. Another way of looking at it is--13% of graduates from a top tier law school are unemployed with $300k in debt.
No one is arguing that lawyers from top tier law schools can't make a decent salary, but there are only a few thousand slots open in the top law schools each year. If you're in the top few percent of law school applicants and you think you'd enjoy practicing law, then by all means go to law school.
But looking at the averages, the median salary for a software developer is about $93k, and the median salary for a lawyer is $113k (from the bureau of labor statistics). Total cost for law school is over $150k on average, and the opportunity cost for not working as a software developer for 3 years is much more than that. Add in interest for student loans (and forgone interest on potential savings) and it will take over 2 decades before the average lawyer pulls ahead of the average software developer.
Add to that the fact that software developer jobs are expected to grow at a significantly higher rate than lawyers, and that lawyers constantly place near the bottom on job satisfaction surveys.
By the way I, initially planned to go to law school, but every lawyer I talked to was so discouraging that they eventually talked me out of it. A few of them were very successful family friends, but they absolutely hated their jobs, and they warned me that there are much easier ways of making money.
Say you spend $300k on law school. Over a 30 year career, you only have to make an average of $10k extra per year to break even.
The "Jobs Data" tab offers more details: "79.2% of graduates were known to be employed in long-term, full-time legal jobs", "93% graduates were employed in long-term jobs", etc.
The number of software jobs are expected to grow, but is the growth going to be in jobs you really want, or will they all be for 23-year-old coding bootcamp grads?
Again, who cares about the nationwide averages? The 50th percentile Northwestern law grad makes $160k right out of school, and is on track make several times that as a law firm partner, or somewhat less as in-house counsel. My impression is that most programmers struggle to hit $160k any time in their careers, at least outside of SFBA.
When someone describes the downsides of their job, I take it with a grain of salt. Often, it's a case of "the grass is always greener". Sometimes, members of high-status professions want to downplay their success. In any case, most of the lawyers I've talked to say they enjoy their work (though they do work much longer and less predictable hours than programmers).
That's probably true. But again, there are only a few thousand slots available each year at top law schools, so for the vast majority of programmers this can't work. Just a few hundred each year taking your advice would change the equation.
>Say you spend $300k on law school. Over a 30 year career, you only have to make an average of $10k extra per year to break even.
That's true, but the average is more than $300k. The average programmers makes $93k a year, since he can work 3 fewer years because of the 3 years in law school, that's $279K in lost wages + $150k for law school.
Sure the lawyer will likely eventually pull ahead, but extra money near retirement is worth less than money early on. If the programmer invests the extra money early on, the lawyer may never actually pull ahead.
>"The "Jobs Data" tab offers more details: "79.2% of graduates were known to be employed in long-term, full-time legal jobs"
Legal jobs doesn't mean working as an attorney, or jobs requiring a law degree. It could mean $15 an hour paralegal work, so that statistic isn't useful.
>The number of software jobs are expected to grow, but is the growth going to be in jobs you really want, or will they all be for 23-year-old coding bootcamp grads?
That's possible, but the new jobs for lawyers could be just as bad. From the Bureau of Labor Statistics "Some recent law school graduates who have been unable to find permanent positions are turning to the growing number of temporary staffing firms that place attorneys in short-term jobs."
Software has been eating into jobs that were traditionally done by lawyers, and it will continue to do so.
On top of this, lawyers are limited to practicing in states where they have passed the bar exam, meaning their ability to move to find jobs is much more limited.
>Again, who cares about the nationwide averages? The 50th percentile Northwestern law grad makes $160k right out of school, and is on track make several times that as a law firm partner, or somewhat less as in-house counsel.
And they admit about 200 new students per year. So yes, if you can get into Northwestern and you like law, then it's a good decision.
>(though they do work much longer and less predictable hours than programmers).
That's a huge caveat. The average programmer could have been the average lawyer instead, worked more hours each week at a higher stress job so that by that he can break even in 20 years, and spend the last 10-20 years of his career making a bit more money.
If you like law and can get into a good school, then practice law. But I hardly think the extra, debt, stress, and hours worked makes it worth it for purely economic reasons.
>When someone describes the downsides of their job, I take it with a grain of salt. Often, it's a case of "the grass is always greener".
This would be the case for both programmers and lawyers, but job satisfaction surveys show that lawyers consistently rank near the bottom below programmers.
It doesn't attempt to explain what X is at all. It could be 10% or 90%, however in my experience, and according to other's point of view[1], 60-90% of time dedicated to writing code being maintenance time sounds legit
note: modifying = 5 * writing new code (20%). Understanding is another matter, but also important: [1] http://blog.codinghorror.com/when-understanding-means-rewrit...
I think the run of the mill work will get more commoditized. Building web sites is already pretty cheap. Programmers in Europe make a fraction of what their counterparts in the US make.
But the fact remains, programming is still more of an art than a science, despite all the effort that has gone into making it a repeatable technical discipline. As smcquaid said, software is hard. Many new products require invention on the spot, albeit using more well understood techniques as the years go on. But as the scope of techniques continues to expand, so does the problem space within which they must be applied. Software is being used to streamline more and more of our world.
As much as we try to make it repeatable, it is still an art. Agile has gone a long way towards this goal, which is one reason we see run of the mill work being commoditized. Many people are certified in Scrum. But that will never completely solve the problem. As long as there are new challenges to be solved, those who do it well will be compensated accordingly. There's a reason good doctors and lawyers still make a good living, centuries into the advent of their professions.
Programming requires you to have a free account on Github and some demonstrated ability.
Keep your game up and your network current.
I doubt whether people will continue paying high salaries for hacking up crud apps.
Concretely, I expect the peak salaries for people who program for a living to continue to increase more or less monotonically. However, I also expect the average salary in the field to fluctuate, and I believe that in 40 years from now, these past few years will stand out on an inflation-adjusted graph as "the good years".
These changes will continue. Software will get easier and easier to build. What takes times today, say algorithm optimisation, will take a fraction of the time in a decade because we'll have better tools for doing it and hardware will be fast enough that it won't matter as much. The fact it'll be a less skilled job will exert downward pressure on wages.
Conversely though, the amount of software needed will continue to increase, so demand will keep wages up.
The question is which force will win out in the end.
I don't know about that one. If you want to build a compiler or a scripting engine, you will still be dealing with the one or the other variation of lex and yacc and then get bitten by the intricacies and gotchas of writing up a compilable LALR1 grammar. You should also have a reasonable command of C (or C++) but that is rather easy in comparison. Building a compiler is as hard now as in the 1970s when they first started using automated tools for that.
> Building an application that might have taken a team of 10 a year in the 1980s now takes a team of 2 just a few months.
Yes, if you are always building a variation on the same database application, it should indeed become easier after a while. That is the essence of a "framework". You are always building the same application, with just a few variations here or there. That will indeed give the wrong impression that building software is getting easier and easier. Building such frameworks, however, is not becoming easier, and we continuously have truly new applications to build, not just variations on the same one.
There'll always be edge cases where generalisations break down but looking at them doesn't give you any insight to the bigger picture.
To extend the car analogy. Karl Benz spent more than 3 years trying to find an engine configuration that worked and did not blow up. Then, again, he spent years to get an engine of the correct size to provide the correct amount of force for his horseless carriage, and things like transmission, gearshifters, ... Designing the first automobile, start to finish, took one man, going through 3 companies because they wouldn't let him, from 1871 to 1885, 14 years total. And keep in mind that the 1885 version was extremely unreliable, hard to control. It got out of control during a demonstration and crashed it into a wall 3 months after it's construction. It took until late 1888 for a "usable" model to get onto the market (and this is using a flexible definition of the word usable : his wife made 3 design changes on her first trip with the car, one because the brakes didn't work downhill, another to the ignition and something about the fuel line)
But 2 things change for today : building a working car, is much easier. Anybody can do it in a week. Building a car that people might want to buy ... 2-3 years at least. Building a car with a new engine (the only way you're going to really improve performance), or any large difference (e.g. hybrid-electric) 6-10 years at least. Building a fundamentally different car like the tesla took barely less time than Karl Benz needed : 2000 (real work on Tzero started) to 2009 (working prototype presented) to late 2012 when the first model S rolled of the assembly line. This happens because the standards have gone up a lot.
Yes writing software is easier. But writing software that qualifies as "good" has much higher standards, which makes things take longer. I would argue that these 2 are in competition. Some years the tools win, and you can write software faster. Other years people introduce the web and "standard" 5 middleware layers (javascript client-side, load balancing, web server, business logic server, database server) and it takes a lot longer. Other years people demand that a local bakery's webpage is "scalable" and it takes a LOT longer.
If the car industry is a good example, the time and effort required to write software will effectively not go down by more than 20-30%, unless you compromise on quality.
Programming in 2015 is at least as complex as programming in 1990, in fact I would say it is more so, with the huge variety of frameworks, tools, APIs, etc you have to deal with.
It's just that all those tools and APIs allow you to produce many times more functionality per coding hour.
To anyone even close to my age or older? Be very worried. To everyone else? Be worried about the non-programmers. If you can hack it at hacking, then you have nothing to fear in any economic environment.
Any individual might see a downturn because the overall economy sucks, or because the dominant culture doesn't recognize them as fully human. We live in far stranger times than that. Don't worry about the upper $300k tier, rather worry about the bottom falling out of the $60k tier market. (That's still triple the poverty line.)
If you are worried about anything else, you should literally die.
Huh? Why do you say this?
Technology jobs are far less secure for the humans older than me with more experience. Ageism wasn't the only reason I posted this, but I'm guessing nobody that downvoted me was older than me. (eager to be wrong)
If you narrow your definition, it'll look different. The jobs may not always in the Bay, they may not be using the coolest front-end framework or functional language de jour, and you may not get paid to go to 4 conferences a year. It might be maintaining custom billing software in .NET in Boise, but in the end it'll be programming and reasonably lucrative.
1. Influx of supply. This has been steadily happening for, well, the entirety of the life of the profession, but the prospect of big money at a lower barrier is making this feasible for a lot more people. Money attracts, which draws the parallels to the attorney drives in the past.
2. [ Feeding #1 ] Cascading loss of professions will move people into other parts of the labor market. As automation removes entire professions, those people will be forced into other markets and will begin to tighten competition and feed the supply influx further.
Which leads to the unfortunate ...
3. Increasing automation of developer tasks will reduce the need for humans for some programming / development. Not entirely, obviously, and not in the near-term, but a lot of the functions that require humans - general problem solving scripting, testing, simple goal-based programming will begin to fall to automated agents. On a similar note, congregation of technologies and philosophies will remove a lot of the dissonance between stacks, devices and platforms.
Now in 2015 I believe we are only at the very beginning - a humble start. There will be things during our lifetime that change the computing landscape. Biological circuitry, quantum computers, virtual reality to name a few. Advanced technology will increase the demand for capable software engineers to solve problems we can't even dream of today.
However I don't think $300K salaries are going to be the norm for engineers solving for 140 characters or how to deliver television shows on demand.
Think of how difficult a problem that involved terabytes of data was to solve before the advent of Hadoop and now consider how easy it is with solutions like Spark.
Overall this is a good trend. I'm not saying that $300K engineer salaries are going away; I'm saying high salaries will pursue the engineers who are solving unique and demanding problems.
Look around and you see terrible software everywhere. The medical industry, the legal industry, the insurance industry, small businesses, government entities, etc etc. Almost all of them have terrible websites, terrible internal tools, terrible uptimes, terrible everything. Billions of manhours are spent on tasks that could be better done by software. There's good money in solving those problems, the problem is that there's only so many good engineers in the world, and the hot technology companies snatch up almost all of them.
They say that software is eating the world, and it's true, but so far the world is only 5% eaten. There's plenty of work left to do.
Computers, AI and automation are eating all jobs it makes sense to me by the time programmers are redundant everyone else will be long screwed.
PS IT enrolments are down, not up ATM
Really, its just taking how many people use excel and growing that up. With technical improvements like simpler to code languages, more predictable API expectations (that is they all tend to work the same as a convention), and general maturity of software as a idea (its not old by any standard). Along with social expectations of what you need to be able to do. Today its use excel, a generation or 2 it will be basic coding.
I wrote a book to fix that: http://noBSgui.de/to/MATHandPHYSICS/
This book is like calling `apt-get install hs-math mech calc`.
Now after working a few years as a web developer, a goal of mine is to revisit and study math and physics.
I've bookmarked your "No-Bullshit" Guide. Thanks for sharing.
The ability to run massive Internet services with very small teams, will continue to increase. The spoils will perpetually increase for those teams. Ride that trend, rather than having it ride you.
- Risk of loosening of immigration restrictions
- Large and increasing supply of skilled workers from East and South-East Asia, who are willing to work for lower wages.
- Skill based work is hard to defend and retain in the presence of significant competition.
- Tech companies may create and make widely available training programs to become a software engineer, also increasing supply. (I don't understand why this hasn't become the main purpose of MOOCs).
Chamath Phalipapitya (sp?) called programming the "blue collar work of the 21st century".
My experience also says no. The two issues I'm facing are:
1. Due to technology churn, after a couple years of experience, your experience loses its market value faster than you can get new experience.
2. At 40, I'm starting to feel age discrimination. When you go on an interview and everyone else is <25, you see that you "aren't a good cultural fit". Younger programmers have started talking down to me like my experience is irrelevant. Then they ask me to debug their code for them.
As a programmer, you can make good money from 25-35. After that, it's starting to look like it's over.
This may contribute to the lack of women in software development: women tend not to be quite as stupid as men with regard to probability, and recognize that a profession where they are obsolete at 40 is not a good bet. Most of us won't make enough to retire on before 40, so only an idiot would go into the business if that really is what we face as we age.
"Software development: it's not a career, it's a lottery ticket!"
age discrimination. In online recruitment, nobody asks anybody else's age. What for, anyway? Nobody ever asks me for a resume either. A github account is more than enough. I am also over 40 and I have never made more money than today. I certainly did not make more money when I was 35.
You see, I have always instinctively felt that I needed to stay away from certain corporate situations and practices. I have always found them absolutely imbecile, annoying, constraining, and ultimately useless. What you are complaining about are issues that only occur in a corporate cocktail of idiocies, of which the ones you have mentioned, are just two. If you have always evolved in that soup of stupidity, you should not be surprised that you now suddenly get hit by that kind of things. It was just an accident waiting to happen.
And, as far as we can currently tell, there's a massive amount of untapped potential. Whether your programming trading engines or social media, the right program, even a small program, has massive transforming power.
Even more significant, if a programmer writes a piece of code that makes a 0.01% improvement to a product, it's virtually free to distribute that improvement to hundreds of millions of people . A programmer may not even need to be very good to add millions of dollars of value to a company if they are put in the right position.
As time goes forward, we are seeing substantial developments to the coding practice. Languages are getting better, compilers are getting better, theory is getting better, test suites are getting better. All of this results in programmers being that much more useful when put in the right situation. Iterating on programs is also very cheap. Rather than needing to build an entire new plane engine, you just recompile your code and throw it at the test suite again.
Will it stop? Probably not in the next few decades. As simulations and other tools get better, we may see other engineering industries catching up, but right now programming is unique in how accessible it is, how quickly you can iterate on a design, and how easily you can distribute improvements/products to millions and even billions of people.
Even if the supply of programmers expands dramatically, I can't imagine running out of things to throw them at. There's always another feature, or another product idea, or some other project that would take a substantial amount of programming resources to complete.
High salary programmers are here to stay. I don't know where the ceiling is, but as the tools continue to improve, so will the justification of the salary. Even if we are in a bubble right now, the bubble bursting will still leave programmers in a very comfortable position.