Anyone who's seen my You Used Python For What? talk knows that I often try to implement stuff in Python to better understand it.
I've often found that writing implementation for computer often forces a greater understanding of concepts in part because you have to be so explicit.
Gerry Sussman wrote:
It is surprisingly easy to get the right answer with unclear and informal symbol manipulation. To address this problem we use computer programs to communicate a precise understanding of the computations... Expressing the methods ... in a computer language forces them to be unambiguous and computationally effective. The task of formulating a method as a computer-executable program and debugging that program is a powerful exercise in the learning process.
(elided to make the general point)