'The best way to acquire a programming skill - by "skill" I mean a working understanding of a framework, a language or ... a "paradigm"'
These are coding skills, not programming skills. They merely represent the technicianship aspects of programming. Relying on technicianship alone is equivalent to having your new commercial premises designed by bricklayers rather than architects and civil engineers.
What we currently suffer from (in respect of functionality, performance and security) is software bricklayers being in full command. What we need to cultivate is programming as an engineering discipline which is conceptual and based on established fundamental principles, of which coding is a necessary but potentially small part. If that were achieved, we might be supplied with software that did not need a torrent of bug fixes, would be less OS and upgrade dependent and did not take seconds to launch dialogs.