Agree 100% (or more if I can). The best way for me to learn something is to have a need. Work, writing code? Requirements, what language? I'll do more than learn syntax. My best work/team stuff was me doing technical lead (system engineer) others implementing in a language I had minimal exposure to. I learned syntax so I could understand stuff for code reviews but that let me be more effective in telling the team "this is what the code needs to do"Classroom teaching and passing exams gives you some initial familiarity, but you really need to work on a real project or two that you can get your teeth stuck into, to learn much about programming; that's when it starts to "sink in". Best of all is to work in a team of other good people with different levels of experience and expertise, and learn from each other by doing real work solving complex problems. Of course this isn't unusual or unique to programming, most acquired skills work like this.
And yes it's not unique to programming. I would toss out "try cooking a family recipe with grandma watching" (yes I can sautee onions but....)