Many people mention that this is a good practice, but the work pace of junior and senior developers are different and, often times, junior developers can feel intimidated by the constant presence of a more skilled professional alongside.
From the limited experience I have in instructing other programmers working alongside myself, in an academic setting, and under the assumption that deadlines must be met (a.k.a. time is precious) I would say the following:
- From the perspective of the junior developer, this might sound like a good idea at first, but they might quickly realize that the pace is too fast, as you have mentioned in your question, and will end up being frustrated that "they don't get it" (especially since the senior programmer will appear to be coding very fast, thus giving the whole process the appearance of "easy").
- From the perspective of the senior developer, a major point of pair-programming - that is, having the observer (which is likely the junior most of the time) spot problems with the code - is being lost, due to the junior's inability to understand the code "on the fly" and point-out less-than-trivial problems with it.
- From the perspective of the boss, this would not be a very smart resource allocation, since work-to-be-done usually takes precedence over the training/mentoring of new personnel.
As mentioned in the comments to the question - this highly depends on the individuals involved, their respective levels, patience, "people skills" etc.
A much better option in my opinion would be assigning some senior developer as "mentor", so that the junior knows there's someone they can turn to for questions (something like "office hours" but perhaps less strict).