Great article. I think programming is a discipline that's especially susceptible to ineffective learning approaches because it's intimately bound up with utility. Part of this stems from the fact that we're not yet at the point where it's learned ubiquitously at a young age.<p>For example, compare programming pedagogy to the typical way in which children are taught to read. We begin learning to read at such a young age that the actually utility of reading is more or less completely factored out of the equation--we go to school, reading is a part of what we do there, and so we sort of just accept that and spend a great deal of time engaging in the activity intimately--exploring its nooks and crannies, playing with it, joking, discussing it with classmates. In the case of programming on the other hand, a lot of autodidacts have selected the discipline not for any love of the game (of course there are <i>several</i> who do have a genuine love for it) but rather for some perceived use-value it provides. For example, if I learn to program I can get a better job, or I can offload some menial task, or I can ultimately do some other thing that happens to require programming (e.g. making a video game is what I <i>really</i> want to do, and if I have to learn to program to do so, so be it). This sort of utilitarian frame makes it very easy to engage in behavior that frustrates learning--reading for information only, rushing through material, copying and pasting examples, seeking out solutions to exercises when stuck rather than exploring and working through them. In general it's much harder to be a good learner if you've attached some ulterior motive to your learning activity.<p>There's a lovely German word Mitgefuhl, which is often translated as compassion but literally means "feeling with". I think it's a fundamental concept underlying a great deal of successful human endeavors--just as you need to exercise compassion in order to really understand someone's emotions or perspective, I think there's a lot of merit to dwelling with, or, as ancient monks practiced, ruminating (chewing the words) intellectual material. Taking one's time is important, as is checking in periodically to ensure you're still consuming things consciously. When I read a book, no matter its subject, I like to imagine I've signed a lease to rent out an apartment with its author--to really get to know the consciousness behind the words--not in any psychological sense, but in a purely epistemic one, to achieve a better understanding--to learn how myself and this consciousness might live in harmony, to imagine conversations--to 'feel with.'<p>As someone who is self-taught when it comes to programming myself (and still has an incredible amount to learn) I can say my own experience of learning and the rate at which concepts solidified definitely increased once I broke my interest in the practice free from any concern over utility and decided it was simply something I found <i>interesting</i>--something I valued irrespective of its practical application.