Everyone in the tech industry knows that every few years (months?) a new technology or framework enters the market.
Angular, Ember and JQuery were good enough until React came up. Not that people don’t use Angular anymore, but everyone wants to learn React now.
Same is true for every other computer science field: Deep Learning and Reinforcement Learning became extremely popular in the Machine Learning (ML) field once neural networks started improving computer vision applications.
It goes for the trending tech as well: Social media apps made web and mobile development very popular. Then ML and AI entered the market along with Blockchain and IOT.
This is how the general trend goes.
A novel technology arrives –> everyone starts using it –> It becomes the Industry favorite –> A novel technology arrives
Now the question is, in this forever evolving world of technology, should you specialize in one field or try many?
First let’s see what both terms imply:
According to wikipedia, A generalist is a person with a wide array of knowledge on a variety of subjects, useful or not.
According to dictionary.com, A specialist is a person who devotes himself or herself to one subject or to one particular branch of a subject or pursuit.
In the tech world, we have similar equivalents of this.
So who should you be?
I know everyone uses ‘it depends’ when they don’t have a complete answer to a question. You guessed it right, same is true for this article. What anyone should aspire to be depends a lot on their personal goals, skills and aspirations. So instead of assuming anything, I’ll mention the characteristics of each so you can decide on your own.
Generalists are the ones who experiment with everything. In tech equivalents, they are knowledgable in more than one field. They generally refrain from spending their entire career on one thing.
A generalist which masters multiple areas is also called a Polymath. Why are they important you ask? Because they change the world.
In ancient civilizations, becoming a polymath was a sign of greatness. The leaders excelled at politics, art, sports, was among many other things. The same is true for the field of tech. Famous entrepreneurs are good at coding, sales, marketing, hiring etc. As an engineer, you probably don’t need sales experience, but being good at design along with UI development makes you a killer frontend engineer. You get the point.
Famous generalists includes geniuses like Steve Jobs and Elon Musk. Generalists are simply great at innovating new things.
Let me remind you, generalists don’t just simply excel in every thing they are interested in, but they apply the concept of Transfer Learning:
Transfer learning (TL) is a research problem in ML that focuses on storing knowledge gained while solving one problem and applying it to a different but related problem.
Once they master the basics of one field they apply them in every new field they join. This is why VPs of Engineering and CTOs have careers spanning over various technologies, domains and and even different fields. They apply their knowledge and experience gathered over various years to solve every new problem they encounter and learn every new technology that emerges.
Generalists focus on solving problems, tools don’t matter to them.
Software Generalists have the same attitude, they don’t get tied to one single thing. They focus more on the product they are building. They carry the lessons learned and apply them in every new problem they encounter.
On the contrary, specialists are focussed. They work hard and move forward in a single field. They are the torch bearers behind whom generalists walk. Specialists like to learn everything about one area and keep researching, experimenting and learning to get better at it.
Most of the advancements in technology happens because of them. Researchers and Engineers who developed and enhanced ML, web, mobile, infrastructure, middleware and all the other tech domains are specialists working for years on these.
Specialists learn the basics as well as advanced topics of a field which takes years of working in the same domain. There’s no shortcut to hard work.
Famous specialists include the father of ML, Geoffrey Hinton. Most of the discoveries and developments in every field are done by specialists.
Software Specialists work with the same tech stack for years. They know in and out of their domain. They become the Industry experts and explores new ways of doing things.
Being a software specialist doesn’t strictly mean you have to stick one thing. You can explore as much as you want. But why waste time when you exactly know what you’re passionate about. There’s no harm in learning React if you are a ML Researcher, but it would make sense to learn as much as required by your job.
Now coming back to the question.
So who should you be?
It’s better to be somewhere in between.
If you’re highly interested in one area of technology like Deep Learning or Frontend, it makes sense to master every aspect of that area but don’t limit yourself. You can always choose between the two extreme ends.
Many people devote their career to a specific area like consumer apps or SaaS services. Some choose frontend or backend. Some keep on experimenting. Everything is acceptable. You don’t have to commit to one language or domain or even computer science.
Define the area in which you want to play and then try everything inside it.
Here are two points you can use to reach a conclusion:
Interests: Though it helps to narrow down fields but it’s better to try different areas to gather new skills before settling down for one thing. If you’re passionate about ML, read academic papers and implement models for Reinforcement Learning or Computer Vision or Natural Language Processing. You can choose to try some or all of them before deciding which one you want to excel in. But if you’re not sure if ML is for you, try application development, mobile, web and everything else you can get your hands on. Gain skills in these domains and ship features, apps and services. By the virtue of transfer learning none of the learned skills and experience will ever got to waste.
As David Epstein, author of Range: Why Generalists Triumph in a Specialized World says:
Breadth of training predicts breadth of transfer. The more varied your training is, the better able you’ll be to apply your skills flexibly to situations you haven’t seen.
Experience: Becoming a specialist requires years of experience and usually is a good decision for people who have already spent a couple of years in the industry. For people starting afresh, It makes more sense to try as much as they can and remain a generalist for as long as they can. Trying different things exposes you to new situations and that experience will definitely help you later in your career.
As mathematician Freeman Dyson said:
We need both frogs and birds. The frogs are down in the mud looking at the granular details of everything. The birds are up above and don’t see those details, but they can see multiple frogs and can integrate work.
Just a word of caution, don’t give up on something as soon as it becomes difficult. Generalists are not jack of all trades because they can’t become master of anything. They prefer learning one trade, in and out before moving on to next. This tweet thread by Erik Torenberg, explains this concept quite well:
In conclusion, try developing UI for web applications and infrastructure for backend and even implement ML algorithms from research papers. In the beginning of your career, try to learn from different areas of computer science. As the years pass by and your skills compound, look for areas you can innovate in and specialize in them.
If you think this article is good, let me know. If you think this article is bad, definitely let me know!