How to Become an Expert Developer
I've been asked several times about how to become an expert developer, so I decided to finally answer this question to the best of my ability. Of course there is no single path to expertize that works or is right for everyone. It depends a lot on what industry you are developing software for, and what tools your company uses etc. Anyways, in this text I'll present a general "path" to expertize which you can adapt to your own situation.
This text contains my view of how to become an expert developer. If you have anything to add, correct, clarify, suggest etc. I'd be happy to hear from you. Go to the About page and find an email address, and send me your feedback.
Keep in mind as you go through this text, that there is a difference between being an expert, and being perceived as an expert. Lots of people are being promoted as experts, who really aren't. But, if people believe they are, they still make lots of money, being only mediocre. Additionally, there are many experts that nobody knows are experts. If you truly are an expert, your next move would be to also be perceived as an expert. How to become that is out of the scope of this text though. That's a different story about personal branding etc.
What is an "Expert", and How Long Time Does it Take to Become One?
Before I start discussing how to become an expert, let me spend 30 seconds on what an expert is, and how long time it takes to become one.
No, you are not an expert after 3 months of using a skill, nor after 3 years. According to the book "Outliers" by Malcom Gladwell, it takes 10.000 hours on average to become a true expert. A virtous if you like. 10.000 hours! That's 10 hours a day, every day, for 3 years. Or, more likely, 5 hours a day, 200 days a year, for 10 years. 10 years!
Along this claim, I've noticed that I believed I was an expert or sernior developer already after about 3 years of experience. Now, in 2010 with about 10 years of experience, I've learned how much there is to know, and how much I still don't know, and now I don't feel like such an expert anymore.
Additionally, the industry (Java enterprise development) has changed a lot over the last 10 years, so the skill I used to master, are not all that "cool" anymore. So even if you are an expert, you may find yourself becoming obsolete, and having to start over.
One more thing: You are seldomly an expert in everything, meaning you may be better than person B in one skill, and person B may be better than you in another skill. It's not like you are either better in every skill than someone else, or worse. You can almost always learn something from everyone. Several developers I have met act as if they know everything best, even when the clearly don't.
In fact, this is often a way to spot a noob. The believe they know it all, and will argue to death either online or offline. They will argue in absolutes, like "This is ALWAYS better than that", or "This is THE way to things" etc. Experts rarely do that. They know, that it all depends on situation, skills your developers have, tools chosen by your company, company policies, personal preferences etc. Inexperienced developers (and people in general) tend to believe the world is black and white. Experts know, it's full of gray scales, and even lots of additional colors and shades.
How to Become an Expert
For most skills you need to learn, there are four steps that will help you become an expert. Most often you will go through these steps in sequence, yet with iterations up and down the steps on the way too. Here they are:
- Learn it
- Do it
- Discuss it
- Teach it
Before you can master a skill you must learn it in theory. You can do this via books, tutorials, via education, or by messing around with it.
Once you have learned the skill in theory, you need to apply the skill in reality. By applying your skill in reality, you learn where the theory you learned is right, and where it is wrong. Yes, often universities will teach you theory that doesn't work in reality, or that doesn't apply in your situation.
Once you have used your skill for a longer period, and find that you were able to solve pretty much any problem thrown at you, which required this skill, it is time to discuss the skill with other experienced people. Discuss what the best ways to apply the skill is, where the limits of the theory are, what could be added etc. In short, discuss how to push the skill even further (e.g. an API. How to make it better / different etc.).
Through discussion you will learn a lot from other people, even if you thought you new it all.
Teaching your skill to others is a really great way to polish the last corners of your skill. There may be many things to just do, without thinking about why you do them like that. Having to explain your ways and methods forces you to think about why you do what you do.
Additionally, there may be corners of your skill that you have never needed to master (say, corners of the web service specification). Having to teach your skill will force you to also master these corners too, making you better than you were before.
How to Become an Expert Developer
Now that I've talked about becoming an expert in general, I'll talk a bit more about how to become an expert developer.
As a developer you will most likely be developing software for a specific industry (at least for a while), and using a specific platform. If not, if you are switching tools and industry constantly, like some web developers do, you will most likely never become a real expert. You will become a Jack-of-All-Trades, which is also useful in some situations. If you are not focused on platform and industry, and you want to become an expert, you need to focus.
I started my career in 1998 doing web applications, and I found myself constantly changing tools, meaning I didn't really become good a the tools. I was just fighting to learn new tools all the time. Then I decided to focus on an object oriented language, and a platform, and chose Java. .NET was not yet out then. Since 1999 I have worked with Java only.
On your path to expertize, you will have to chose a platform, and possibly an industry too. Industry is less important, but having business domain knowledge really strengthens your profile.
When learning a platform you will start out with the language. For instance, the Java language. After the language you need to learn the platform (all the API's and tools). In Java, the platform is divided in two: The standard edition and the enterprise edition.
Once you begin to master your platform, you should start learning platform independent skills, like design patterns, distributed system design, architecture, usability etc. As you get better, you will spend more and more time learning these skills. This is a good thing. These skills are more easily transferable to a new technology platform.
Finally, you may move away from software development all together, moving into different business areas like project management, an architect job etc. Just remember, that once you stop using your developer skills, you will slowly stop being an expert.
Here is a diagram of your "path to expert developer". You start at the bottom, and move up the layers. The blue layers are platform independent layers. The other colored layers are platform specific layers. Even if your platform isn't on here, you would probably be able to fill it in yourself.
|The learning path from language, up through platform, to platform independent skills, on the way to becoming an expert developer.|
You have to fill in the concrete tools, techniques etc. for your industry, your company, and your platform. This is not something I can do once and for all, for everyone.
A good way to find out what you should learn is to look at job ads. What tools and techniques are they requiring most often? Read software magazines online. What technologies are they talking most about? Read forums. What technologies are people asking most questions about? And, what technologies are people buzzing most about? In other words, what will become hot tomorrow?
Here is an article related to the topic of this text:How To Become a Hacker