It requires concentration: but note that being actually in front of a keyboard and a monitor requires concentration, too, since it's so easy to be carried away from the problem at hand.
I find it possible, and usually practice it when needed, to go through the steps of the problem at hand when I am offline (for instance, when I am commuting). It helps me to see the "essence" of the problem, without being distracted by the ";", the "->" or whatever syntax details are requested by the program. I have the freedom to actually check if I know what's going on or if I am lost in the implementation details and I am missing a larger picture.
In the majority of cases I apply this technique to a "current problem", but I also use this to think to something new (I did it when I was learning Haskell: thinking while commuting is a very good check to see if you have really grokked something). So first I read something new, and then, commuting or preparing the milk for the kid or washing the dishes, it was time to freely think about it.
Last, but not least, don't forget the beneficial aspect of thinking to something not directly related to your problems. This is "learning" too, since the disjointness may be only apparent. In the words of Irving Kaplansky:
spend some time every day learning something new that is disjoint from the problem on which you are currently working (remember that the disjointness may be temporary), and read the masters.