Having to reimplement basic functionality is not as illuminating as reading and understanding a professional programmer’s implementation of it – “learn by doing” is good for muscular training. Programming is a process of thinking, so you learn by thinking, not by unthinkingly replicating the mere results of other people’s thinking. I also think every writer learns to write by reading observantly, taking notes, using a very large dictionary to discover nuances and details in meaning, and paying attention to details everywhere. I think this is what studying is all about – learning merely to repeat what others have done before you is not study.