Something that Joel Spolsky wrote way back when on his blog (can't find the article now) really stuck with me regarding this:
He said how code is not natural human language, but as programmers, we are easily lulled into thinking that it is, and that we should be able to read it as such. Consequently, a lot of us look at new code and expect to be able to just "read it" and understand it immediately, as if it was a block of text in English.
So I think the key is to basically just be slow, methodical, and scientific. And as others have said - comment it (and even refactor) as you go. Don't fall into the mindset of "I should just look at it and understand immediately".
Oh, and yes, I still fall into this trap myself sometimes. "Do as I say, not as I do", and all that. :)