Learning through teaching
Date: 2009-04-21 07:38:36

I've been watching one of the podcasts recorded from the Alt.NET Houston conference titled 'http://highoncoding.com/Podcasts/544_Houston_ALT_NET_Open_Spaces_Why_Blog_and_Open_Source_.aspx[Why blog and open source]' and one of the interesting ideas that stood out amongst the opinions express is that people write about their experience in order to understand the topics better themselves.

I've found this to be a very valuable way of learning - in fact it's probably more beneficial to the teacher than the student, somewhat ironically.

I've noticed that there are a few opportunities that we can take advantage of in order to increase our knowledge on topics by teaching other people about them.

By 'teaching' I mean explaining your understanding of a topic to other people rather than the traditional classroom approach where the 'teacher' is the expert and the 'students' are mostly passive learners.

== Writing/Presenting

Blogging was the topic being discussed on the podcast, and I've found that writing about a topic is a pretty good way of organising your thoughts on that topic and seeing whether you understand it well enough to construct some opinions that you would have the ability to defend.

I've often found that when I start to write about a topic I discover some things about it that I hadn't previously considered and of course the ability for people to give you feedback on what you write means that it can become a two way conversation. There have certainly been a http://www.markhneedham.com/blog/2009/03/07/ddd-bounded-contexts/#comments[couple] of http://www.markhneedham.com/blog/2008/09/19/should-we-always-use-domain-mode/#comments[occasions] when people with more knowledge of a topic than me have pointed out where my understand of something can be improved.

The same thing applies when presenting about a topic although the feedback will be more immediate.

== Book Clubs

One approach we've been trying out in our http://domaindrivendesign.org[Domain Driven Design] book club recently is to split the sub chapters between each of the members of the group and then everyone presents their part in the next meeting.

The advantage of this approach is that everyone gets the opportunity to teach the rest of the group in a topic area in which they have more knowledge and/or have studied more recently.

If you know you need to explain something to other people then I think it encourages you to approach the subject differently than if you are just reading through it for yourself. You also need to understand the topic more clearly yourself and be able to put it into your own words to explain to other people.

== Pair Programming

I think one of the situations that can be the most frustrating in pair programming is when you understand something really well and your pair doesn't understand it as well.

The temptation is to http://www.markhneedham.com/blog/2009/04/10/pair-programming-the-code-fairy/[wait until they're not around to implement your ideas] but this misses a great opportunity to explore how well you really understand the topic area.

The questions posed by someone with less knowledge on a topic than you will force you to come up with good reasons for your opinions that you can explain in a more simple way than you may be used to. We may be forced to come up with metaphors that make it easier to explain something and certainly coming up with these metaphors may improve our own understanding.

== In summary

I think there are a lot of opportunities in the world of software development to teach what we know to others and although it may seem that we are doing a favour to other people, I think we will find that we learn just as much as them from doing so if not more.

Of course it's not the only approach to learning but I've found it to be a surprisingly effective one.