In today's post, I'm going to talk about an age long topic... should you spend all your time becoming a master in a specific technology, should you concentrate on gaining a broad range of experience, or should you specialize in a specific skill? So, let's begin.
With the release of the new Avengers' Infinite trailer, I feel like a Marvel analogy will suffice today... 'if all you have is a hammer, you'll only be able to look at every problem as Thor'.
So, what does this mean? If you have a limited knowledge base, then you will only have a limited number of ways to solve a problem. A frequent phrase that you'll hear me say, is that when it comes to designing software the biggest things that will hinder your progress is your own lack of knowledge.
When it comes to software design, you can only design things based on your current understanding. When you try to solve any development problems, your lack of knowledge is your biggest weakness. All of us solve problems based on the amount of knowledge we possess at that point in time, however, this also means that whenever you solve a problem you must also appreciate that it is highly likely there are alternative solutions some of which will be better. To become better at your job then it is a constant quest to expanding your knowledge.
I'm pretty certain every developer reading this will have a horror story of some bug or a feature that kept you working till either late into the night, or over a weekend. In most of those situations, by the time you figured out how to solve the issue, I'd bet the solution was fairly straightforward to resolve the problem. Only this week, I was messing around with a build script. I've been trying to automate some unit test using a package that isn't documented very well. I managed to get it working eventually after a few days, however, if I started from scratch with the knowledge I now possess, I'd probably be able to solve the whole thing in under 2 hours.
Don't get me wrong, I think becoming an expert and specializing in something is a key skill to having a successful career. I didn't really find success until I started working for myself, specializing in one CMS. On the other hand, when I started specializing in that one bit of software, I already had 6 years working on a number of different platforms and in different roles (support, development, leadership development, project management) so I also had a broad range of experience.
I was at a BBQ the other day and someone asked me for some career advice. The guy had two job offers. One had longer term prospects but required specific knowledge for him to get a better offer, the other offered to pay him less but he could learn a broader range of skills. This is generally how the game is played and these are the types of decisions that will make or break your career. If you want to know what I told him, read on.
So to recap; imagine if Thor had all the Avengers' powers, he'd be such a bigger badass compared to some bloke with a hammer. In development, the more things you know, the better work you'll be able to produce. The better work you can produce, the more money you'll be able to charge.I think at the beginning of your career you definitely need to focus on getting a broad range of experience rather than specializing. In my opinion, anyone with less than 3-4 years of experience should focus on learning the fundamentals inside and out, learn and understand what SOLID means, learn design patterns, good coding standards and focus more time on learning different ways of solving problems. This is the essential knowledge that you will use throughout your career so it's a good investment of time. After 4-5 years in the industry, you definitely want to specialize in something. You need to become an expert in order to make the most amount of cash money that you can. After 3-4 years specializing in that thing, to reach the next level, you need to become an expert in something else.
This something else should be similar to your expertise, whether it be a different CMS, a different language, framework etc... This learning something else is going away from specializing and concentrating on widening your experience. Understand the different ways to solve problems with different platforms will boost your knowledge no end.
If you've been working on a code for 3-8 years you should be specializing in something. With your design skills and a specific specialist subject, you'll be able to charge at the higher end of the pay scale. After you spend 1-3 years specializing, it's easy to get comfortable, so at this point in your career, you need to start from scratch and become a master in something else. From this point onwards, every few years you need to spend the time to become a master in something. It's this continual cycle of learning that will ensure your skills are never absolute and that you can get paid in the higher bracket.
I'm hoping you can see that the question's a bit stupid. Depending on where you are in your career which path should you take? The question isn't a black and white one. Broad Vs Expertise, is actually more like a constant cycle. You focus on one for a while, then you flip to the other. If you follow this principle, then there's no doubt in my mind you'll have a successful career, enjoy!
Software Architect, Programmer and Technologist Jon Jones is founder and CEO of London-based tech firm Digital Prompt. He has been working in the field for nearly a decade, specializing in new technologies and technical solution research in the web business. A passionate blogger by heart , speaker & consultant from England.. always on the hunt for the next challenge