Most people don't need a tech savant. As that becomes more apparent as it becomes a game of legos putting blocks together rather than having to plastic cast mold every block yourself, I expect mean salary to drop.
The complexities of twiddling with memory have been replaced with the complexities of making a ton of different systems work together in a sane way.
Today you have to know STL, auto/smart/shared pointers, all kinds of right casts, you have to know boost (a huge code base) and on top of that you are expected to know C++0x (or how is it called?) with its lambdas, autos and stuff, while still understanding the whole "classic" C++.
(But at least nobody cares about MFC and ATL anyway)
And don't forget templates of templates of templates which crept into many code bases. And 64-bit (or ARM) is now reality which you should account for.
If anything, you have to know ten times more in C++ in 2012 compared to 2002.
So some jobs will always pay well; the average salary should go down if the average skill need goes down however. (Ignoring for the moment that some lesser skilled development jobs actually pay better as a result of demand)
use CGI;
Maybe this isn't the case in the middle of the country where businesses don't realize that a 10x programmer is easily worth 2x the salary of a brand new programmer.
Ruby may be easier to pick up than C++ but the entire web stack still requires quite a lot of knowledge. Especially when you start talking about scaling databases, distributed systems, fault tolerant cloud architectures, etc.
C++0x is easy to learn. For example, autos is just the ability to say "auto myFloat = 5.0;" and it will default to float.
Lambdas in C++ is fairly easy. right casts? trivial [especially with auto].
Templates of templates of templates are easy as well.
64-bit? ARM? The whole point of C\C++ is to make yourself not assembly. You shouldn't worry about 64-bit vs 32-bit as long as you use proper things.
Modern C++ vs second iteration standard C++ in the wild west days when I was first learning about it is an entirely different affair.
I also contest having to know boost - I work in some KDE projects and boost is only a dependency on around 1 in 4 that I have found. Though qt in many ways becomes the surrogate stack to learn.
About a decade ago I did a lot of MFC/C++.
Form what I see here in Australia one of the reason nobody cares about MFC and ATL is for the last 5 years C++ has been pretty much dead on the Windows platform.
Over here in Oz C# and .Net are the kings of the Windows platform.
Look at services like FreshBooks and Basecamp. The engineering effort to implement comparable solutions used to be immense; now you can buy into online services for less than the price of lunch, with no long-term contracts.
Similarly, look at open source solutions like WordPress. An afternoon with a $5 hosting account and a few plugins will get a site that would have cost you $100K+ in 1998 feature-wise.
I'm also amazed at how often a few minutes searching for an app will get me something that fits the need perfectly - and costs less than $4.
Of course, my numbers above are from my own poor sampling.
"There are multiple theories for the decline in pay, but a common one cited by analysts is simply that the new people being hired are paid less than those already on the job."
Another possibility is that there are companies hiring "software developers" for jobs that most HNers wouldn't find interesting because the level of software development is low and hence has a lower waged associated with the value generated.
No, that's exactly my point. Hiring would be occurring now because the economy is recovering from the recession, but at corrected wages that do not reflect an artificially bloated cost of living in particular localities.
Is this surprising at all?