I'm not the guy that learns by reading the f***ing manual, I like to start working on something and read the docs only when I need to(however, I don't ask questions until I read the docs and I get to page 2 on Google, because I don't like to ask stupid questions). I always thought that practicing was the best way to learn something, but now I found a new way, learning by teaching. I know it sounds kind of silly, how can you teach something that you don't already master? Let me give you two examples from my experience:
I started to learn Git back in my 1st year of college, when a teacher said that we would receive extra points if we use it. I watched some tutorials, I made a Github account, and after that I couldn't practice software development without Git anymore. But as I said earlier, I didn't read all the commands, I started with the beginning, like initializing a repository, staging files, making a commit, push/pull, and that was all. Later, as I worked in team projects, I learned about merging and using GUI tools like Git Extensions(the best). My company decided to switch from SVN to Git, because SVN is what it is and no other explanations are required, but here you can find out more. Anyway, my boss asked me to make a training about Git. I wasn't a Git master(and I'm still not), but I could work pretty well with it and I was regularly helping some of my colleagues when they were having problems with Git. So I decided to make 3 courses, in the first one I discussed the differences between SVN and Git, why Git is better, and explained some basic stuff at the end of the course(git init, add, etc.) In the second one I dealt with branching, merging, checkout, etc. In the 3rd course, I had to teach advanced stuff, like rebase, hooks, pull requests. To be honest, from all the knowledge that I shared in these 3 courses, I only knew about 20% when I started preparing it. I knew only the stuff that I needed, but when you teach something, people ask questions, and you have to be prepared. The good part is that I learned new stuff that I didn't think I would ever need like git hooks, rebasing, amending commits, etc. Now they help me save a lot of time.
I recently watched an interview between John Sonmez and Jeff Atwood. Jeff was talking about how you can learn more by teaching, and he was using Stack Overflow as an example. When you give an answer on SO, you don't just write an opinion, it's a community based on science and facts as he puts it, so you better have something backing you up, usually documentation or articles. I liked this idea so I searched all the questions related with Windows and Windows Phone, and I started to answer. I realized that Jeff was right, when you give an answer, you have to explain it, and you have to be sure about it, so you read the documentation and maybe also post a link to that part. How cool is this? You help other people, and you also help yourself. Most of the questions were easy to answer because you probably find answers on Google, but for some of them I had to replicate the issue on my machine. It could take some time, but for me this experience is very rewarding and I'll keep doing it. I hope that I managed to explain in this article why teaching is the best way to learn for me. Who knows, maybe you learn better if you read a programming book, or by going to a training. If you like this idea and you want to teach other people you can:
- make a training about something, maybe at work or with some friends
- give answers on Stack Overflow
- write tutorials on a blog, or submit articles on websites like Code Project
and if you're really good at something, make a presentation at a conference
[twitter-follow username="thewindev" scheme="dark"]