The speed which the code can be understood says much more about the writer than the reader.
I think the point is that you hold the writer of the code invariant, and then substitute different code readers; the rates at which two different people can understand a given piece of code says something about their ability as programmers. More than just rate of understanding, I think depth of understanding is just as important: a novice might read some code and say "it does X", whereas an expert will understand X, observe that the code really meant to do Y, and that it might have memory leaks, deadlocks, or incorrect corner cases, for example.
I think Gates has a very valid point: there are lots of circumstances where you need the ability to wade into an unknown code base and understand how it behaves (and how it ought to behave). The ability to read through code and understand non-trivial properties of the code really takes some experience to develop -- that is directly relevant to code review, for example.
There's a huge difference between a "needing the ability to wade into an unknown code base and understand how it behaves" and "one of the finest tests of programming ability".
Perhaps Gates overstates the case slightly, but I would say that there is a strong correlation between "X is a good programmer" and "X is an effective code reviewer" -- and the ability to quickly and accurately read code and to understand deep, non-trivial properties of the code has a lot to do with being a good code reviewer.
I think Gates has a very valid point: there are lots of circumstances where you need the ability to wade into an unknown code base and understand how it behaves (and how it ought to behave). The ability to read through code and understand non-trivial properties of the code really takes some experience to develop -- that is directly relevant to code review, for example.