This hits the nail on the head. It's not that people don't understand the syntax or even the semantics of programming languages (well, some people can't write a for loop, but they're just hopeless). It's that they can't see how to use the language to get from point A ("I want a program that does x") to point B (an actual program that does x). For instance, when I first began programming, I struggled mightily with deciding how to represent real-world data. Other people might be able to decide how to represent data, but become hopelessly stuck when it comes to turning their verbal descriptions of tasks into actual algorithms. I think that this is why so many people go on programming interviews and then can't actually solve simple programming problems: they do fine when they're taking exercises from books, but they can't concretely conceptualize the solution to an even slightly ambiguous problem.