If you can't explain it to a 6-year-old, you don't understand it yourself. - Albert Einstein
What is interesting about us developers is that we know how to do a lot of things, but it seems as though we struggle with actually showing others. There are a few exceptional people who are able to break things down to a simple level and explain them to others, but this unfortunately isn't the norm.
Until you can explain things so that a 6-year-old can understand you will never be as effective as you could be as a software developer.
As with anything we need reasons to why we should pursue an endeavor. Here are a few I think are worth exploring when it comes to understanding why we should be more than just information consumers. Let's be able to teach.
Anyone can Regurgitate Information
Regurgitation has become the default mode of learning. We think that because we can repeat it, we understand it. The problem is that we don't regurgitate information as well as we think we do. We are now secondary sources that are trying to remember what we know instead of showing others how they can better understand the topic at hand.
When we don't fully understand something, a question that seeks to dig deeper from those you are trying to explain that information to will cause further frustration in you and the seeker.
You Can Solve Deeper Problems
Software developers who fully understand the information/idea/concept/tool can solve more problems than the regurgitator. If we do not understand the who, what, when, where of a topic we won't be able to clearly see a path of usage.
When we are regurgitators, as above, we end up doing something because it seems cool but not necessarily solving a problem; just causing more confusion.
You Stunt Your Growth
Regurgitators can only get so far in their craft. You cannot solve new problems. In fact, you can only apply what you know, whether rightly or wrongly (you won't know because you don't fully understand). As a result, you won't be able to build on top of the knowledge you have attained.
How Can You Understand More?
Here are a few ways that you can seek to understand more and become a more effective developer.
Skim Read and Find the Purpose
When you find a new platform, software development kit, language, or idea, it is always good to understand why you should know it. There are few questions that you can ask so that you have a basis for understanding it more fully:
What was the purpose of creating this framework/design pattern/idea/theorem/etc?
Who is using this and for what?
What other similar things are out there that I could be using?
Highlight the Big Concepts
Before you begin reading, take note of the different sections that are highlighted. Make sure to write down their big ideas. This will get your brain to focus in on what the authors intent is and help to further understand what is going on.
3 is Key
Write 3 things per section that stood out to you and ask yourself these 2 questions. Do I understand this or Do I need to further examine this with other sources both internal to and external to what I am reading?
Repeat and Practice
Far too often I have come across developers in interviews who have read a lot, I mean A LOT. Yet, when you drill down just a little bit below the surface, it is clear that they do not understand the information at hand.
Running over your notes and practicing the things you have learned is the only way you will come to understand fully what you have just taken in as knowledge.
If I never engaged my wife and sought to understand why she feels a particular way, she would be able to say that I don't know her. I would know a lot of things about her, but I wouldn't know her. To truly know her is to fully understand her to the root of her being.
This is also the call of an effective developer. To know - is to understand - is to be able to teach others well.