Should software developers specialize or be language agnostic?
Ali Spittel, software engineer, teacher, podcaster, and Woman Who Codes, talks about whether developers should aim to be generalists or specialists (and how to balance both).
You may have been told that you need to become “language agnostic” to succeed as a software developer. Specialize, the theory goes, and you’ll pigeonhole yourself. You’ll have fewer tools to solve problems. Your career will stagnate.
Are you putting yourself at a disadvantage if you’re in love with one particular programming language? What if you’re just not ready to dive into more right now?
We reached out to Ali Spittel to provide her thoughts on this subject.
Ali is a (mostly) self-taught software engineer who has been employed in the tech industry since 2014, holding multiple software engineering positions at startups, and a distinguished faculty role at General Assembly’s Software Engineering Immersive. She blogs about her coding experiences and is passionate about making code more accessible for everyone. Her blog has had well over a million reads and has been featured on DEV’s top 7, the top spot on HackerNews, FreeCodeCamp, and in JSWeekly. She also cohosts a podcast, and is a regular contributor to Women Who Code DC. Her experience speaking with, working with, and teaching engineers has given her a unique perspective on the ideal balance of language agnosticism and specialization.
Language Agnosticism versus Specialization
We asked Ali to describe the value of each approach.
She said that knowing a variety of languages can be helpful since it enables a developer to solve all kinds of problems. The particular language that is being used doesn’t matter as much.
Polyglot developers are “specialized at solving problems, no matter what programming language they are asked to do it in.”
Being language agnostic allows an engineer to approach a situation from a high-level view. You can compare the benefits or drawbacks of different languages. You’re better equipped to choose the best language for a situation.
On the other hand, specialized developers are very knowledgeable about the fundamentals of a specific language. They understand the “behind the scenes” of the language, how it’s built and why it’s structured a particular way. For example, programmers may prefer to specialize when building libraries and frameworks. For those tasks, they tend to delve into the internals of the language.
Similarly, some companies need complex programming in specific languages. They require in-depth knowledge of the language and its API’s. In those cases, a specialized engineer will be best suited to accomplish the work.
Working at Startups
Since our team’s work revolves around startups, we asked Ali about the impact of these different approaches in the tech startup environment.
Based on her experience, Ali explained that when working at a startup, problems are often just thrown your way. You have to create a solution on the fly.
“There’s not a lot of hand holding.” Ali explained about startups. “The ability to teach yourself a new thing is crucial in that environment.”
In Ali’s experience, programmers with diverse backgrounds tend to thrive more in a startup ecosystem. Showing the ability to pick up different languages is a benefit to anyone hoping to code in a startup environment.
Striking the Balance: The T-Shaped Software Developer
As both language agnosticism and specialization have their benefits, we asked Ali if she had any recommendations for how developers could find the right balance? She explained that in her opinion, the best option is a hybrid.
Ali described this hybrid approach by comparing it to the “T-shape” model of developing skillsets. The vertical branch of the capital T signifies specialization in a specific language. The horizontal bar of the T represents exposure to an array of languages. The horizontal bar includes all the languages that a developer is familiar with but hasn’t gained a deep knowledge of.
Ali has applied this method throughout her career. As a result, she has become comfortable working with about ten different programming languages (the horizontal branch of the T) but has specialized in just two (the vertical branch).
Tips for building a T-shaped skillset
Ali recommends learning at least two programming languages to start building your T-shaped skillset. The first language can be your specialty – this will prove your skillsets and enable you to get the first job. The second language you learn will be important for two key reasons:
- To demonstrate how easy it is to pick up a new language once you have a foundation in coding.
- To solidify your knowledge of the fundamentals of programming (such as the idea of a loop and function).
Ali is constantly deepening her knowledge of programming, so we asked her to share some practical tips on how developers can keep growing their T-shape:
- Code Wars: Ali recommends the Code Wars puzzles as a way to keep your skillsets fresh.
- Advent of Code: These prompts tend to be more challenging but are a great way to boost your coding skillsets.
- Blogging: Ali has used her blog to write about the new technologies she is learning about. Blogging about the process is a great way to gain exposure to new things and reflect on the learning process.