26

Not because I care how long it takes someone to read a book, but more because I'm interested in how people get the knowledge from a book (or I guess other sources) into their brains in the best, most efficient way.

Personally I take a multi-pass approach (from my answer to the original question):

  1. Skim through contents, dip in and read anything with an interesting looking heading and finally gawp at any nice diagrams and illustrations. I won't take much in at this stage, but it gives me a mental view of the book (an hour or so at most)
  2. First pass through the book, generally I'll read the opening chapters thoroughly for a book that is either very heavy going or introduces something completely new. For books that cover a subject I already know about I'll skim or skip bits that seem trivial. The remainder of the book I'll go through reasonably quickly but not so quickly that I'm just page flipping. (about a week)
  3. Not all books that I read make it this far, but if I find a book interesting or useful enough I'll then study it properly. I will go through the book at a slower pace and do some or all of the examples, try out code, etc. I will often skip entire chapters here unless the book is really good (1-3 weeks depending on the book).
  4. Finally when I've finished reading it and am reading other books I will often dip into it again and again to cross-reference, compare, look things up, browse, etc - so many of my favourite books don't just end up gathering dust on the bookshelf.

I rarely take notes when reading (although I may do some planning on paper if I'm working through something like a code sample). I've also considered starting to use a personal kanban for organising my progress, but have never quite got around to using that technique. Mindmaps are another thing I like the idea of but rarely do.

What other methods to people have? How successful do you find them? Are there any commonly recommended techniques that you feel are a waste of time?

1
  • I personally try to prove the author wrong or see if there are corner cases that break or I don't understand. IMO, any knowledge you learn but don't test for wrongness can be a double edged sword. Commented Feb 14, 2017 at 16:01

6 Answers 6

30

Do the exercises.

If there aren't any, invent some.

3
  • 3
    And after doing the exercises, re-implement them in your own code in your own way. Examples are fine and well, but nothing like a real-world implementation to fully comprehend a concept.
    – Hugo
    Commented Oct 18, 2010 at 1:04
  • +1: you can add this to the top of this answer: "Practice."
    – Klaim
    Commented Feb 19, 2012 at 12:07
  • All programming books these days towards the end come up with a short project. Doing that is biggest benchmark anyone can have of themselves to track the progress.
    – Venki
    Commented May 7, 2012 at 18:40
6

Make sure that you apply some of the techniques in your day-to-day programming as soon as possible.

I find that if I don't immediately apply things I've learnt I have to re-visit them when I do actually need them.

2
  • 1
    Absolutely. Also I think that it's only when you apply something in a context different to the one presented in the book do you really swap from memorising to understanding. Unfortunately it's not always possible...despite being the development manager where I work, so no-one's going to really question me if I can come up with a plausible reason why we should do such-and-such in Prolog or whatever, it's sometimes just not appropriate to bring things into day-to-day work. I guess that's what personal projects are for, but then you lose many of the benefits of cumulative learning.
    – FinnNk
    Commented Oct 17, 2010 at 20:51
  • @FinnNk - I didn't say it would be easy ;) That's the problem I've got at the moment with WPF. I'm doing a project at home, but don't get a great deal of time to spend on it so I'm constantly having to revise what I know.
    – ChrisF
    Commented Oct 17, 2010 at 20:55
6

Highlight anything that surprised you. It will make it easier to find it in the future.

Write in the margins extensively.

If you loan your book to someone, ask the person to follow these same rules, ideally in different colors. This adds value to your book.

2

Go over it with a friend. Better yet consider reading the book an exercise like Pair Programming, where you both try to explain it to each other. (And of course do the exercises as was said above)

1

Implement

Implement each new algorithm or technique your read about on your own, using only your memory of the description of the algorithm or technique as reference.

1

Due to an attention deficiency of mine, I find it hard to focus when I'm learning in a traditional, start-to-finish approach. I skip to the end of the chapter and go straight to the exercises, and then use a combination of the book and the internet as reference to solve the problems.

Once I put myself into a position where I have to use the book material as means to an end instead of studying it "because I should know it", the concepts become much easier to pick up and practice.

My focus issues also mean I don't type out the code examples directly, and instead think of my own examples and use the code in the book to help me realize them. Being creative with the learning process ensures that I'm having fun with it, and the uniqueness of whatever I create makes it easier to remember what I'm doing.

Not the answer you're looking for? Browse other questions tagged or ask your own question.