I think of the problem of "learning programming" in terms of basic conceptual difficulty. Programming is difficult mainly because of "how to build algorithm," "how to design data structure" type problems. The syntax and vocab of a programming language are there mainly to illuminate concepts that keep coming up over and over in your domain, and protect you from errors.
But to solve the conceptual problems, you have to "get the picture" about various models of data organization and how they might relate to each other. If, for example, you don't know how a list works or its practical utility, you're going to get stuck at a very low level of understanding of how the infrastructure of the program might be implemented. Similarly, when you are writing software for some class of end-user(e.g. "power users" who write bash scripts daily vs. retired grandmas that are scared of any error message or complex feature) you have to design an interface around _their_ most likely mental model, so that they can get the job done quickly.
And, of course, when one programmer reviews another's code, or a programmer reviews their own code years later, the initial reaction is always that it looks ugly because it inevitably uses a thought process different from their current one.
But to solve the conceptual problems, you have to "get the picture" about various models of data organization and how they might relate to each other. If, for example, you don't know how a list works or its practical utility, you're going to get stuck at a very low level of understanding of how the infrastructure of the program might be implemented. Similarly, when you are writing software for some class of end-user(e.g. "power users" who write bash scripts daily vs. retired grandmas that are scared of any error message or complex feature) you have to design an interface around _their_ most likely mental model, so that they can get the job done quickly.
And, of course, when one programmer reviews another's code, or a programmer reviews their own code years later, the initial reaction is always that it looks ugly because it inevitably uses a thought process different from their current one.