So, is there anything which has overcome the double tassel distribution which programming has always had?
For literally decades, it's been "these people get it, these people don't" with very little in the middle.
Have we fixed this? Have we found way to teach it which prevent this? Have we even explained it?
The thing is, the same people who have trouble with programming also have trouble with other varieties of logical thinking. We need to be teaching kids the necessary reasoning skills at a young age while their brains are still flexible enough to learn them.
At a high level, programming a computer is essentially the same thing as explaining how to perform a task, albeit teaching the task to an incredibly naïve and pedantic student with a very limited vocabulary. I wonder how we could possibly mimic such an environment in the real world in such a way that young kids can learn programming skills before they have the discipline to actually write code? After all, there aren't any incredibly naïve and pedantic people with a very limited vocabulary in primary schools, are there?
I think you see where I'm going with this. Want more programmers? Start by taking two preschool classes and teaching them different tasks that involve repeating certain actions. Then pair them up so that the kids in one class have to teach the kids in the other class how to do those tasks and vice versa. Maybe even have one kid teach several kids at a time and instruct the other kids to try to find ways to misinterpret what the teacher is saying.
Over the years, make the tasks more and more complex, and require that the students write down the instructions, then give the piece of paper to someone else to perform those instructions, and let the students watch in horror as the instructions are followed to the letter, resulting in completely unexpected results. Then have them adjust those instructions and try again.
The end result will be programmers, complete with appropriate levels of disdain for clueless people.