We published the results of our 2016 Salary Survey today, which has some interesting numbers in it. I haven't done a lot of analysis of the data, but it seems as though the averages are higher than I expected for SQL Server professionals. That's good news, and it's one of the reasons I switched from being a developer to a DBA. Our DBA back in 1990 made more than every other programmer in a larger Fortune 500 company. Since I enjoyed database work, I moved in that direction and never looked back.
I also ran across this interesting post on programmer earnings on Quora, and found some of the answers interesting. There are people showing the entry level salaries being high at large tech companies like Google and Facebook. I'm sure that happens, but those salaries often skew what most of us might see when we start in this field. I think non-tech companies that are trying to fit developers in with other entry level jobs (sales, marketing, operational positions in their industry, etc.) don't view programmers as special. I would guess that the technology pay is better, but still below US$50k/yr in most places.
While I think in the US there isn't necessarily a cap around US$100k/yr as there used to be for most of my career, I do think that it's still hard to make more than this for most people. The average programmer is just that, average. Without being driven to develop strong skills, make a different in their organization (and learn how to do this), and stand out substantially from everyone else, management often doesn't want to substantially increase their labor cost. They won't want to pay more for a developer without a good reason.
All the number are useless if you become a freelance consultant. That's easy to do in this field, though finding work is a challenge. As is the demands on freelancers outside of the technical work. On your own, you need to manage accounting, sales, marketing, and more, which are not necessarily the work that most people enjoy. In my view, if you become a freelancer, you earn that extra money with the hassles of running your own business (it's not uncommon for freelancers to easily make over US$100k with successful ones going to US$200-300k/yr).
Many of us know people that love programming computers, and don't worry too much about salary. Most of us would like to earn more, for a variety of reasons, but few of us actually work to earn more. There's a good quote in the article: " Because some folks never ask for raises and never leave a company. They built up experience, but didn’t leverage it, so their compensation never rises." I've found that to be true. Far too many people never learn how to increase their salary, whether by changing jobs, becoming more valuable, or even just asking for more money in a way that is likely to be successful. We usually just take what's offered.
Money isn't everything. I think that working in technology strictly for money is a bad idea. There are downsides to this work (sedentary, stressful, complex and ever changing), but I also know that many people have enough of a talent to get by and have other interests in life. If that's the case, and you want a job you can do for most of your life and earn a decent living, this isn't a bad field. There are plenty of answers from people that recommend you don't pursue programming if you don't enjoy it, but I think that it can be hard to find employment in an area you really enjoy and also make ends meet. Certainly if you are starting a career, I recommend you try to find work in an area you enjoy. Build a budget that suits your earnings, and find some satisfaction and enjoyment in your career and life outside of work. Once you have a family or other responsibilities, it can become hard to make a drastic change in your career path and you may find yourself stuck working at a job you don't enjoy.
There is one answer that struck me. The final line of that one says: "A bottom tier developer should probably stop being a developer." This is a place I'd disagree. Almost every industry has no shortage of people that aren't that talented at their craft. I know poor plumbers, electricians, doctors, lawyers, retail workers, and yes, programmers. Some of them may lose employment regularly and struggle to find jobs. If that's the case, and it is a problem in your life, then perhaps you should look for other work. However, if you have a job, then why stop? Every team I've worked in or managed has a need for a variety of work. Some hard, some mundane. Some easy, some complex, but in all cases, it's good that we have a spectrum of talents on the team. There is always some work that is better suited to less talented employees, whether they are electricians or programmers. There is also work that can only be done effectively (or efficiently) by the most talented.
If someone is willing to pay you, and you're willing to do the work, then that's the definition of a job you can do. Why stop, especially in this business, if you have employment that suits your situation? There's nothing wrong with going to a place of employment every day, and doing a day's work for a day's pay, even if you don't do it as well as others.