Recently I realized how teaching is important and how it beneficially affects not only person that is learning but also a teacher.
I was helping one of my friends with some design problems. Some of the questions and problems where trivial, but from time to time something awesome happened ;) My friend asked a really awesome questions that got me thinking. I realized that there is something that novice programmers have and more experienced ones are lacking, "Fresh Mind". They doesn’t know good practices. They doesn’t have experience (either the bad or good one). They doesn’t approach problems with solutions that worked before. They approach problems as something new, original and they will find ways / solutions that more experienced programmer will never find, because they tend to use their “cache”, for example design patterns.
My friend had a simple problem that for me, should be resolved with one obvious solution. Because of my experience I had a nice solution that proved to be working good. Of course my friend asked me why? Why this approach and not the other? To be honest I stopped thinking about this. These questions got me thinking, I had to analyze my approach and try to find answer. Apart from the answer, explanation was also very important. More experienced programmers tend to use thought “shortcuts” to explain ideas, Great example : Design Patterns. When someone says “Repository” you know how he is thinking and what he wants to do. Juniors doesn’t know this, so explanation of your solutions / ideas becomes harder.
Simple question why? was really awesome, I had to approach problem as it was something new to me. I had to refresh my cache. Good example of refreshing cache is code reviewing. You have to explain why this particular code is messy and problematic. This opens your mind and let’s you look at the code from different angle. It will also give you new ideas and inspirations.
As we are learning, we have this burden which is our experience. Most of the time this memory is crucial in our jobs, but from time to time we need to forget about it. Teaching and mentoring is really beneficial and important. It helps you, but it also helps your team. In our careers, we will have to teach someone from time to time. Don’t wait for this to happen, start now with some open source project or Stackoverflow. There are millions of developers, you will find someone who needs help everywhere