I'm in Poland right now, and I just got back to my apartment after a long day of teaching. I never thought I'd enjoy teaching as much as I do; I've always been a bit of a loner, so standing in front of a group of people was something that I had to work at. But, one thing that I've noticed over the years is that the best way to get interesting insights into an area of design or practice is to teach it. Often when you're in front of a group of people, reaching for an explanation, you find it.
It's not all fun, though. One of the things that I battle constantly is something that I call androgogical challenge. Andragogy is an interesting word. Many people don't realize it, but the root of the word pedagogy is ped, which means children. Andragogy is the corresponding word for the study of adult teaching. Adults learn differently, and some of our quirks, as adults, trip me up.
What are the quirks? Well, one of them is the need to relate to experience. When you're attempting to help people learn something in programming, choice of examples is critical. Unfortunately, it is very hard. If you pick something too easy or too stylized, some people will see it as a "toy example" and "turn off." They can't imagine how it relates to the work that they do. If, on the other hand, you choose something which is very realistic, you can end up with overload. It is hard to highlight the important points in a sea of detail.
So far, I haven't found any set way to tackle this problem, but I know that I constantly have to be aware of it when I teach and when I write. Examples have to be detailed and realistic enough to engage, but also fertile with interesting decision points. But, if you supply too much detail you can end up derailed, dealing with points that don't really have as much bang for the buck. It's a hard balance.