I taught programming from around 1980 to just a few years ago. I have to agree with the assessment of some of the studies. There are those who learn programming and those who don’t. I taught the class as through there were two kinds of students, those who understood how to program and those who could learn the rules and syntax of a language but not write a program. The first type were hackers and the second types, just good students.
Later on, I found that students were not interested in programming or studying, just passing the course, and the last few classes that I taught were frustrating in that the majority of the students would cheat if given the chance. Only one or two out of 20 would do the homework.
Strangely enough, I found COBOL easier to teach than things like PHP or Visual Basic. It is, perhaps, because COBOL was wordy and the sentences seemed to make some kind of sense as English language statements. Database, which did not require complex programming -just scripts to run against the database, was easier for the non-programmer. Students who could do things like create scripts for spreadsheet programs, were not as successful at writing a program, but could write an SQL query or procedure.
Some people never could figure out what was going on in a loop. Loops seemed to be the mountain that students could not climb.
When I taught loops I found that students did not like to follow the line by line procedural process that makes the look work. They tried to look at the shape of the loop, with the conditions and infer from that the outcome. If there was an if statement in the loop that could give a different value for each iteration, they were lost.
The students were too smart for the loop. I could not get them dumb down and follow the loop’s progress, step by step. The wanted to understand the “whole” and missed the granular activities that changed each time the loop executed. Hacker’s usually grasped this the first time through.
Programmers are not any smarter than those who can’t program. Programming works for a detailed, procedurally aware person. Programming does not work for those who want to understand a the higher principle of a program, usually because there is none.