John Skeet answered a question on SO
related to how to learn good programming in terms of learning good software design.
I liked John's statement which btw explains pretty much why to have a technical blog like this one here
[...]Write. Blog about what you've done and how well it's worked. This goes beyond looking carefully - just working out how to express your successes and failures will make them clearer in your own mind. Be warned: writing can be addictive and time-consuming.[...]
Actually this is a pretty good known concept: learn by reflecting about it (remember retrospectives
in agile development ;) ). And that's what you do when you explain things to others (like when you blog about a topic). For doing so you really have to have a deep understanding, unless you're just pointing out things of course.
Questions? Thoughts? Hit me up on Twitter