The hardest point of learning programming, especially doing it yourself, is going from "OK, I understand the basic concepts and I can easily do exercises in the textbooks" to "I can take some sort of novel problem and decide how to solve it and then implement a solution." Unfortunately it'd take someone more clever than me to figure out how to actually teach that skill to beginners reliably. I think that's where many quit.
>Unfortunately it'd take someone more clever than me to figure out how to actually teach that skill to beginners reliably.
The biggest issue is that there's a canyon between the easy-to-solve issues (think CRUD applications) to very good solutions of the world's best applications/sites today (linux kernel, MS Office, Gmail). There's not a lot of "medium difficulty" projects in my experience. So if you come to the field looking to climb a ladder of skill like you did for K-College education, you run into a lot of difficulty mid way.
Just learning your tools and using them well is a long trek. Never mind finding out new and interesting ways to use them.
That's not really the chasm I mean though. I mean more like the difference between "sort some strings in some order to demonstrate mastery of this concept" and "implement a simple CRUD app," and I'd argue it's just as wide, if not wider, than the one you're talking about.
The hardest point of learning programming, especially doing it yourself, is going from "OK, I understand the basic concepts and I can easily do exercises in the textbooks" to "I can take some sort of novel problem and decide how to solve it and then implement a solution." Unfortunately it'd take someone more clever than me to figure out how to actually teach that skill to beginners reliably. I think that's where many quit.