I thought the following passage by Richard Feynman was a nice statement of problem-driven learning. Don’t read passively: try to figure out how to solve the problems yourself, using the book or article as a touchstone to check your ideas. (Feynman was one of the leading physicists of the last generation.)
In this quote, Feynman is initially referring to learning the basic theory of a computer as a set of commands that can perform operations. But the main point is how to learn from problem-solving.
Now there are two ways in which you can increase your understanding of these issues. One way is to remember the general ideas and then go home and try to figure out what commands you need and make sure you don’t leave one out. Make the set shorter or longer for convenience and try to understand the tradeoffs by trying to do problems with your choice. This is the way I would do it because I have that kind of personality! It’s the way I student — to understand something by trying to work it out or, in other words, to understand something by creating it. Not creating it one hundred percent of course; but taking a hint as to which direction to go but not remembering the details. These you work out for yourself.
The other way, which is also valuable, is to read carefully how someone else did it. I find the first method best for me, once I have understood the basic idea. If I get stuck I look at a book that tells me how someone else did it. I turn the pages and then I say ‘Oh, I forgot that bit’, then close the blook and caorry on. Finally, after you’ve figured out how to do it you read how they did it and find out how dumb your solution is and how much more clever and efficient theirs is.! But this way you understand the cleverness of their ideas and have a framework in which to think about the problem. When I start straight off to read someone else’s solution I find it boring and uninteresting, with no way of putting the whole picture together. At least, that’s the way it works for me!
Throughout the book, I will suggest some problems for you to play with. You might feel tempted to skip them. If they’re too hard, fine. Some of them are pretty difficult! But you might skip them thinking that, well, they’ve probably already been done by somebody else; so what’s the point? Well, of course they’ve been done! But so what? Do them for the fun of it. That’s how to learn the knack of doing things when you have to do them.
Richard P. Feynman, Lectures on Computation (Perseus Publishing: Cambridge, MA), 1996, p. 15.