There is a lot to learn about software development. I’ve heard many jokes about how many front end frameworks there are. Back end frameworks are joked about less often, but they’re just as numerous. Every month I also hear about a new programming language that I simply must try because it will solve all my problems.
There’s also a know it all blogger out there who thinks every developer should also have sysadmin experience.
How can one person possibly keep up?
You can’t.
I think the problem boils down to basic math. Over time the need for developers grows. People go into the field to fill that need. Eventually a number of those people are going to form strong opinions on how things should be. They will build new technology that everyone else simply must use.
I love this by the way. I think it’s great that there’s a diverse and growing eco system out there. It gives developers more choices. The problem is that the number of choices will continue to grow over time, but the amount of time a person has in a day to learn about those choices will be static: 24 hours. No more. No less.
Despite this, I also still think there is plenty to gain from cross-disciplinary knowledge. Context is important. That’s why learning about sysadmin work makes developers better at their own work even if they don’t do sysadmin stuff very often. Front end developers benefit from learning a little bit about back end development and back end developers benefit from learning a little bit about the front end.
The thing that makes learning about so many topics feasible is that you don’t actually need to be a master of everything to get context. You only need one focus that you actively enjoy doing research on. I enjoy backend development. I will play with new languages, new patterns, new data stores, etc. It is fun for me. I don’t enjoy being a sysadmin and I definitely don’t enjoy working on front ends.
Fortunately for me, I am rich in smart friends who do. I can rely on them to do research in those areas. We can come together and exchange knowledge. Instead of me spending 10 hours playing with back end tech, 10 hours playing with front end tech, and 10 hours playing with sysadmin tech, I can spend 30 hours playing with back end tech. My friends will do the same in their respective fields and we spend a couple of hours sharing results.
Since we are all focused, we will get more out of the amount of hours we spend doing research in our respective fields. This is because we start to specialize and gain a much deeper understanding of our chosen domains. The result is we have the ability to grasp much more complex concepts and find a way to explain them clearly. Two hours of research for a specialist may take 10 or 20 hours (or maybe even more) for a novice.
Utilizing the strengths of multiple people is the only way to escape the trap of being a jack of all trades. Becoming a master of one area makes a single individual extremely efficient at improving in that area. Getting a group of masters together allows them to share the benefits of their respective skill sets and get the context needed to make themselves even more efficient in their own domain. We’re all stronger as a group than we are as individuals.
This post was originally published on blog.professorbeekums.com
Top comments (11)
It's a common misconception, that the phrase "Jack of all trades, master of none" comes as a warning that being an expert in one area is the way to go, while the phrase actually has a second part, ".., but often times better than master of one."
Think about it - which will be the better developer, the one who know Java, the whole Java, and nothing but Java? Or the one that is flexible enough to understand databases, DevOps, front end, product, etc., even if on the day-to-day he works in Java? Who will bring you the most value, the one that will reply with "I don't work with Python"/"HTML isn't really a language", or the one that says "Give me a couple of hours, I'll get it done"? Who will you return to for the next job?
There might be better Java, Python, Front End developers; DevOps engineers; DBAs, but the one that has knowledge in all of these subjects, can give a better solution.
And this is the problem. You might end up doing all sorts of jobs for other people so they can slack off instead of learning themselves. Been there done that.
There's an implication here that I think should be explicitly stated: people should be able to work in any of the domains, it just doesn't need to be their specialty.
I'm in agreement with this. I think it's extremely important that a front-end coder actually knows how the full stack is put together, and would actually be able to contribute to any of the parts. Without this they risk becoming an isolated specialist and can no longer make decisions appropriate for the project as a whole. Same goes for the backend people, they need to know how UI coding works in order to build appropriate APIs.
This also ensures anybody can work vertically across the project. If this doesn't happen then you end up with a highly fragmented system where the components no longer fit together well.
I agree with this to the extent that a basic understanding of the stack is required. Other than that I think being able to work on the UI model together should suffice. Being able to contribute to any part not so much.
This is the best comment on here. Brought a balance to everything!
100% agree with you, but nowadays there is just explosion related to technology. I am a dot net developer and have learnt MVC+ WebApi+Entity Framework and worked on enterprise apps using these technologies.
But nowadays people want you know the above basics along with a JavaScript framework also they want you to know containers and some exposure to cloud like Azure.
Although I have explored Angular bit, but Azure and containers are huge technologies to learn and you just don't know where to start from.
Your post reminds me my grand father saying : "You can't do anything alone". That said, I found always hard to keep a sustainable group of thinkers/contributors on the mid and long term. Quite easy when you're student, harder when you work, challenging when you have family engagement.
Learning effort is one thing, creating and keeping strong ties with individuals sharing our interests requires a life long motivation.
I may have described the "group of thinkers/contributors" a little too neatly. I don't think it works out in a way where people can regularly get together and exchange information. Mostly I just ask people directly for advice when I need it and I take time to give advice when I'm asked. I don't really pay much attention to whether my exchanges with various folks is even and I don't think they do either. It's just nice to know that someone is available to help when I need it.
I think the central point in this article is knowledge sharing. You'll be a specialist in one area and will share your research to influence others. At the same time, you receive a baggage from other areas in a more summarized way, and thus, you will learn more about other areas to apply in your work and stand out in it, for example.
Quite agree with your viewpoint. Become a master of your own domain and be in the company of those who are masters of their domains!
Quite agree with your viewpoint. Become a master of one domain and be in the company of those who are masters of their own domains!