My wife always laughs at me when I refuse to take a job, because "it only pays $60 per hour". Her friends and her don't have any high tech education, and $20-30/hr is their ceiling, most of them making less, and at the same time the jobs they do seem so much more boring than creating websites or building apps.
We are truly lucky, guys. Enjoy the ride it while it lasts.
If you have a practiced skill that takes years to develop you are, in most cases, valuable because this is a rare thing. Truth be told very, very few people have the patience and enthusiasm to learn a skill well, so it's almost always valuable when someone does.
If he were offering the right money, welders would come out of the woodwork. They would leave other jobs or relocate.
The fact that it happens to align with a huge economic need, and that it's an amazing profession from every possible vantage-- that's just pure luck and historical happenstance.
Of course there are others who did go into programming for purely practical reasons. I had a colleague once whom I regarded as kind of a mediocre and passionless programmer. He was a cool guy though, and we got to talking one time. I started asking him about programming stuff and he stopped me. He said, "Man, I do this because it pays the bills and provides a nice home for my family. I'm a painter, not a programmer." To be honest, I had a huge amount of respect for that guy after that.
I guess depending on how broad your definition is, then it my scenario supports your assertion. All vocational people have a training period (modern version of an apprenticeship).
I'm not sure a lot of IT is actually that safe. Companies have a lot easier time outsourcing IT to another country then welders. Silicon Valley has inertia and good laws to foster innovation and startups, but others can change their laws and unfunded liabilities of the state government might not allow for stable conditions long term. SF's attempt at taxing might not be an anomaly but a trend.
On their planet, being able to calculate the area of a rectangle reliably, the first time, makes you anomalously good with math. The notion of programs as long strings of instructions, followed sequentially, with predictable results is a fantasy: computers are observed to operate mostly randomly, all of the time. Some days I go to my Googles and it's the Googles with the box in the middle,a some days I go to my Googles and it's the Googles with the box at the top. Why does Microsoft keep changing the Googles? THIS IS SO FRUSTRATING.
You and I might think there is a distinction between programs and data, and we could describe how these exist in different places in a hierarchical file system on a computer, which is an abstraction over sectors on a hard disk. Every technical word in that sentence is scary juju to most of the population. There are many otherwise intelligent people who cannot open MS Word without a document emailed to them first. If you took away the document, they wouldn't know how to open Word and wouldn't know how to correct that.
In addition, many folks who are unemployed or underemployed in the United States either cannot read this post or cannot understand enough of it to answer simple questions like "Does Patrick think that programming is hard?"
You can certainly become a passable programmer in 3 years starting from being well-educated, intelligent, and reasonably skilled at knowledge work in the information economy. If you're 3 for 3 on those, you don't have a problem right now.
This is why I hate to get into small talk with someone I've just met. One of the first polite questions I get is "so, what do you do?" and to judge by reactions its as if I immediately start talking like the adults in a "Peanuts" cartoon. And even if I try to be as nontechnical as possible ("I do website work") you can see they just don't want to continue the conversation at that point.
"Yeah, it's almost exactly that exciting. So what do you do?"
So true. I work in an industrial environment, so I end up helping a lot of people out with math. High school geometry might as well be wizardry.
> You and I might think there is a distinction between programs and data
I know you're talking about the difference between word.exe and data.doc, but you're probably going to excite the Lisp programmers with a statement worded that way.
And yet does anyone doubt that they could learn highschool geometry if motivated to do so?
Not if you are a Lisper.
Here's a fact I learned that has stuck with me for years since: in China, everyone learns algebra in 4th grade, no exceptions.
Now the point of this isn't that the Chinese educational system is so awesome (I actually think that there are some really bad tradeoffs they make), but rather that the thing that we think is so difficult for highschoolers can actually be done 100% by every single person in 4th grade. It's an existence proof that for quantitative knowledge it's just a matter of training and context.
Anyone who is reasonably conversant with a computer (in the sense that they know how to type, they can use a mouse, etc.) can be taught to program. It's no harder than algebra. It's within their capacity. The problem I think is that it's just not conceivable. It's not really taught in schools, and it requires you to learn an entirely new set of skills and vocabulary.
I will grant that perhaps 3 years is an underestimate; it might take 6 years. I haven't run any actual experiments. But programming is not cutting edge research; you're not writing a PhD.
I agree with you that most of of the population really truly does not understand computers right now, I just disagree that if motivated they couldn't learn and quite quickly.
 Well of course there are a lot of exceptions: the mentally handicapped, children who live on the farm, children who have to work in factories all day. But for students pushed through the system, they all learn.
Most skills are not as difficult as people think they are with consistent effort over time. People are not born with a drawing module in their brain that makes them different than you, and that's true for programming and pretty much everything else as well.
Just think of what it really takes to create even a simple dynamic website.
EDIT: To clarify, I hardly ever use math at the level I was required to study in my comp. sci. degree curriculum. Of course I use basic arithmetic calculations often enough.
Do we not use many of the concepts?
* boolean algebra / simplification of terms?
* vectors, matrices, tensors (er, strings, arrays, objects)
* functions? functions of functions?
* set theory?
* graph theory?
* "closure" of operations (e.g. - what are the limits / bounds of this operation / function? Can I encode every character / code-point in this output representation? -- no? prepare to get hacked, then)
I've written a few times here about how I interview people. Most of the candidates have BS degrees in comp sci, most of them have 3 to 15 years of work experience. Most of them cannot write a (correct) function to reverse a string.
We accepted any correct solution.
It never gets to edge cases. Most people can't even write the simple version.
I'm pretty sure nobody can write the unicode-safe version during the interview, even the smartest developers I've worked with (I guess that depends on the language though).
// Some in the IT field would have been selling snake oil, because they do it today.
I find that similar to programming: designing and improving a project in iterations, understanding how things work by analyzing their internals, remembering processes that work, etc.
So I guess that 100 years ago I would have been either into mechanical or electrical engineering or some other more traditional skilled work like carpentry.
As for what I would be doing, likely a farmer, as that is a job I still do today. Though I'm not sure I would want to give up some of my modern conveniences.