At some point in their career, most developers will need to make a choice: commit to becoming an expert at a single programming language with a focus on one area of development, or broaden your skills to become a full-stack developer.
If you fall in love with a specific language like Java or C++, specializing might be an easy decision. Conversely, if you dream of joining an early stage startup, going full-stack might feel like the right move, so you’ll have the skills to do pretty much anything.
But what about other developers for whom the choice isn’t so clear—particularly young developers fresh out of school or coding bootcamps? Do you really need to specialize to succeed in your career? And if so, when is the best time to do that? Or should you cast your net wide and learn as many languages as you can for the entirety of your career?
The Case for Specialization
The idea of a “full-stack” developer is disputed in some corners of today’s tech world. From the perspective of Jonathan Campos, for example, CTO at ride-sharing company Alto, companies aren’t going to recruit full-stack developers because, in his opinion, companies rarely need someone with in-depth knowledge of four or more languages. In most cases, they want a programmer who knows one language really well.
Specialization, Campos argues, makes you more valuable to tech companies like his. And in specializing, you come to realize how much deeper your learning can go, which in turn makes you a better developer.
Don’t want to limit yourself to just one language? Campos urges developers to add a second language only after fully mastering a first. That progression will teach you how to approach learning a new language and will help you manage your expectations around the process.
Campos has first-hand experience with this: He thought he was a pretty good front-end developer; he could make sites work. But as he continued learning he discovered performance best practices, automated tests, code organization, framework architecture, and many other things he had never considered before. All of these skills served him well in his transition to other areas of development.
Another reason employers like Campos want to work with developers who specialize? Technology is becoming too complicated for developers not to. “We are in the midst of a rapid shift to more complicated technologies,” says Peter Yared, founder and CTO of Sapho.
These kinds of technologies are built across multiple intricate platforms, and experts in each are required in order to weave them together into a single seamless application. Becoming that proficient in one niche technology takes time and will preclude a developer from pursuing other frameworks, which is why developers are faced with a true choice to specialize or stay general.
Clearly, some CTOs (like Campos and Yared) encourage the former, and say it behooves developers to spend their time and energy becoming experts in a narrow range of technologies. And CTOs aren’t alone. Front-end developer Andy Shora agrees. Stacks are a lot bigger than they used to be. Ten years ago, a full-stack developer was someone who knew PHP or Python, plus JQuery, HTML, and CSS. Today, says Shora, a full-stack software engineer is more akin to a systems architect.
It’s a big ask for a developer to be able not only to do all of this technical work themselves, but also to liaise with every other team that engages with that stack—like designers, content creators, and UX professionals on the front end and product or engineering managers on the back end. Of course, there are some very talented individuals out there, and it can be done, but especially as your career progresses, most people find it less taxing to focus your brain and limit both your scope of work and, as a result, your emotional output, as you liaise with other teams. That’s why Shora specialized, focusing on the front end instead of becoming a full-stack developer.
The Case for Generalization
Given the case we’ve outlined so far, why do so many people choose to generalize? You only have to look at Stack Overflow’s 2018 developer survey to see that “full-stack developer” is a common career choice: Almost half of the developers who responded to the survey identified as such.
Are these developers foolish for trying to learn so many different languages? Not according to Silicon Republic’s Jenny Darmody, who writes that most experts agree it is in fact best not to specialize—at least at the start of your career.
Companies like Campos’ Alto, which hires developers with niche skill sets, are not the norm. The reality is that very few programming jobs require you to know only one language or framework—even if you know it through and through. That’s why focusing your attention on several of the most popular languages is a better approach for the aspiring programmer. The broader your knowledge, the more opportunities will be available. (Remember: a company’s CTO is speaking to his or her own business priorities, rather than speaking to the bigger-picture consideration of your individual career.) Plus, you can still choose to specialize later on in your trajectory.
Going broad could lead you to become a better programmer too, says full-stack developer Mubashar Iqbal. Iqbal, who was named Product Hunt Maker of the Year in 2016, believes that being a generalist makes him far more agile than other developers and specifically able to create products more quickly than a specialist would.
Knowing how to code in several different languages will almost certainly help you succeed over the course of your entire career. Software developers are often required to learn new languages on the fly in order to complete certain tasks, says software engineer José Estrella-Campaña. New programming languages can become popular very quickly, making it almost certain you’ll have to learn a new one at some point. At the end of the day, languages are tools, and the more languages you know, the easier it is to learn yet another.
Just make sure you’re proficient before moving onto a new language, says Automic’s Scott Wilson. You don’t have to be the greatest of your generation, but you should be above average—and at the very least, competent—before moving on. Being familiar with multiple languages is not an excuse to be mediocre at any or all of them.
Still Not Sure? Become a T-Shaped Developer Instead
Both sides of the debate present good points. On the one hand, we’ve seen arguments that tech changes too quickly to generalize, and that you should become an expert in one language before learning others. And on the other hand, there are people who feel learning multiple languages keeps you upwardly mobile and open to opportunity.
So, how can you give yourself the best chance of success in your career? The answer, according to blogger and programmer John Sonmez, is to do both.
Specialization is important, but there are no specialists who weren’t first generalists. In Sonmez’s opinion, it isn’t possible to become a good specialist without first building out a broad base of knowledge. This progression is referred to as “T-shaped” learning: Students first become proficient in a wide range of languages, before specializing in a single area of expertise.
Software engineer Sam Jarman takes this idea further. Using an analogy he heard on The Soft Skills Engineering Podcast, Jarman encourages developers to become “paint stroke developers” and visualize their careers as several T-shapes over time.
In the same way that a “soaked paintbrush moves across the canvas, and little amounts of paint drip downwards,” so should developers’ careers have several areas of depth as they grow and evolve. As time passes, your breadth of knowledge (the line of paint at the top) continues to grow, and you develop more areas of deeper knowledge (the drips).
At many bootcamps, the approach is often a combination of all the above in what might be called an “upside-down T.” That’s the idea that when you’re transitioning from one career to another, as many bootcampers are, trying to learn eight different languages at once is going to be overwhelming and won’t prepare you to get a job, where you’ll need to have expertise in at least one single stack.
Since there’s no way to know which company will ultimately hire you and what their stack will be—or what it might become six weeks into your tenure—the best approach for bootcampers is to learn a single stack all the way through so that you come to understand not only what it takes to learn a whole new language, but also how you, specifically, learn best.
Once you’ve figured out your own styles, your own strengths and weaknesses, and how one set of technologies fits together to work as a whole, you’ll have everything you need to learn another stack once you’re out in the world, but you’ll also be able to demonstrate to employers a deep understanding of whatever stack you’ve learned—which is impressive to most recruiters and engineering managers, even if your stack isn’t directly applicable to their work. They’ll see you have the ability to learn a lot in a short amount of time, and they’ll know you can learn anything they throw at you next week or next year.
And Don’t Forget About Soft Skills
Because coding is so tech-focused, there is a tendency for developers to put their technical skills before everything else. However, soft skills, like emotional intelligence and conflict resolution, are crucial for long-term success in any position, and especially important if you ever want to progress into a more senior role.
In order to grow your career and take charge of teams, for instance, you must learn how to negotiate and communicate with others. David Boyne, application architect at Compare the Market, says software engineers who can communicate with others offer more value to businesses than those who can’t. It’s why he recommends that all senior software developers work on communication skills if they want to progress to technical leads.
Senior software developer and Udemy instructor Andrei Neagoie agrees. In his words: “You can know all the cool functional programming techniques in the world, but if you are unable to communicate well with your team, or you are not able to focus on delivering actual value to a customer, you are not a senior developer.”