That said, we build concrete skills around how to make the best use of those abilities. We build memory skills to be able to quickly bring things out of short term memory back in. We build abstractions and concepts that allow us to efficiently analyze complex situations. We learn to think better with the capacity that we have. However our capacity doesn't seem to be readily changed.
As a concrete anecdotal example, several who have taught CS for decades tell me that most students simply can't "get" pointer arithmetic or recursion. Their brains don't go that way no matter how much they try. People who do master it learn those things fairly quickly and then can move on. The specific abstractions can be taught, the ability to think through those types of abstractions seems innate.
None of this minimizes the effort needed to become a good programmer even if we have the capacity. However the fact that most humans can't become programmers is why there is a job that typically pays 6 figures where many who are successful in it are self-taught with no more than a high school degree or GED.
Or maybe they're just bad teachers.
Luckily, since I really wanted to learn, I had to seek alternate resources. I was fortunate to stumble on Stanford's Cs106a taught by Mehran Sahami and it changed my life forever. That man is the gold standard for what a teacher should be. He broke down complex ideas and made them look so simple.
Since then, I use a combination of different resources to learn said "difficult concepts". Recursion, got it...pointers, got it too. I have used Standford courses, Berkeley course, udemy, Udacity, Coursera and even youtube to learn. These sites have some really good teachers.
I have since come to understand that CS is really not that difficult. All is takes is a willingness to learn and a good resource to learn from.
Maybe so, maybe not. However I never had trouble when they tried to teach me things. And have heard good things from others who they taught.
One of the people who expressed this basic opinion to me is https://www.amazon.com/Randal-Schwartz/e/B000APA744. He is also someone whose expository abilities are widely recognized as being excellent. And he is also an example of a self-taught programmer with no degrees beyond graduating from high school.
The above is a slight simplification, but I think it's a fair summary of the current consensus among intelligence researchers, given the word count.
The upshot was that genetics is probably more of an upper limit on IQ, and that for children raised in poor conditions, environment plays a much bigger role than genetics.
Plenty, of smart, dedicated people have been trying for decades to devise interventions to permanently boost IQ among children raised in poor (for the first world) conditions, and unfortunately not much has turned up. Instead, there is a familiar pattern of small pilot studies that show initial promise, but whose gains tend to wash out when the program scales up to a less than one-to-one child/child psychologist ratio, or even when the children are followed up on in adulthood.
The gains from permanently boosting IQ among low-IQ children would be so great that it might still be worth banging our heads against that wall on the off chance that we find something that might work. But we should keep in mind the base success rate of past interventions.
And isn't it the most amazing coincidence that those who are thus exceptionally gifted are uniquely placed to benefit from the demand for those very abilities in an extravagantly lucrative profession?
I mean, imagine what would happen if everyone could program! Where would those six-figure salaries go then?
I mean, imagine what would happen if everyone could program! Where would those six-figure salaries go then?
That was the exact point that I was making.
There is no coincidence. It is economics 101. In a free market, the salary is set by the laws of supply and demand. If people who can program are in short supply and create lots of value, the supply/demand curves will meet at a high price point. That is good for programmers. If everyone could program, then the price point would be lower and programmers couldn't collect those salaries. Programming has low explicit barriers to entry AND high salaries. This could not continue without implicit barriers to entry of some sort.
How low are the explicit barriers? I personally know several programmers who were homeless teenagers, later received GED degrees, and are self-taught in programming. These are mostly highly paid professionals. (One that I know decided as an adult to go back and pursue university now that she could. She's only 30 - by the time she's my age I'm confident that she'll also be a highly paid professional.)
Let's continue with economics 101. When you move a person from a non-programming job to a programming job that pays more, it is obviously good for that person. It is also good for society as a whole - that person is doing something more productive. It isn't so good for other programmers, though, because it reduces their salary.
Speaking personally, I grew up in poverty. My life is much better than I feel I deserve, or than I need. I also like seeing the lives of others around me improve.
Therefore I have encouraged many to take up programming, and spent untold volunteer hours answering questions from people who want to become better programmers. I have zero interest in limiting who gets to program.
For a political example I completely oppose H1B programs in their current form. I think that we should allow free immigration for competent people AND once they arrive we shouldn't restrict them from finding the best job that they can. The current quota system which provides incentives for companies to swear up and down that they are paying a competitive wage, while in fact they are paying under the market price, and then trap the people that they import in jobs that don't make full use of their talents.