I was reading the above article about how a programmer felt that "normal" humans were blocked from programming, and I wanted to initially think to myself "Of course they are!" After this initial feeling of personal superiority, I realized all of the examples of how false this is.
The great majority of good programmers that I know in the field are not fantastic savants, they are regular people doing a job. The only caveat I have in programming is the difference between a programmer, and a good programmer. Your average, run of the mill, programmer that can do most tasks, and do research to find basic solutions, is someone who is either self trained or had a small associates degree in software development. The good programmer is one who enjoys it, loves finding out new problems, and has a good memory for how things have been solved in the past and can see how to use their experience to solve new problems, and can also determine when a new approach SHOULD be used, even though an old one CAN be used.
An average programmer will approach a problem in the "I have a hammer, everything is a nail" solution. Lets take something like SSIS. A lower level SSIS developer, trying to figure out how to get data from one system to another, and needs to do a lookup against a very large data set on the same data base, might pull both sources in and use a join or lookup transform to get the required data. A good programmer, with experience in both (and finding out the SSIS package chokes on such large sets) might make the next step and just use a select statement with a join against the data from the sql server database.
This seems obvious that these two solutions exist, but in the real world you will see hundreds of examples of people using a non optimal, obvious to them, solution repeated over and over simply because it works, but not because it is good, or easy to understand to anyone else.
In reality everything has a good, better, best solution set, but no one is going to ever hit the "best" solution for non trivial problems, especially the first time. What you pay for in a "good" programmer, vs your regular programmer, is the experience to get "close" to the better solution, and sometimes even between the better and best categories. Your software will be more reliable, your hardware less strained, and your coding time much shorter, and it will be worth every penny, but in the end you don't have real access to truly good programmers with enough experience in all of the technologies you have to really shine in this field.
There are so many factors in the idea of "good", "better", "best" in programming that the ideal of having some kind of elitism toward the entire field as shown in the article doesn't make sense. Programming is a trade, most of the jobs in programming are trade style jobs with specific scopes of specialty. You aren't going to take an ETL developer, toss him at a web development problem, and have as good an experience as using a dedicated web developer, even if the ETL developer is "the best ETL developer you have ever had!"
Programming is NOT rocket science, you can be very competent at programming if you have the ability to visualize your problems and properly define them, at some point it just starts to be syntax, and the competence to know what needs to be created vs re-used.
Kind of a ramble, but I just wanted to get my views on it out there on my little informal blog space.