Hot Take: You Don't Need To Learn Everything (Yet)
Tags: beginners, codenewbie, webdev, learning
Published: 2021-11-04 01:24:38

Learners often begin their journey with a simple Google search: "How to become a software developer". That search often leads them to complicated skill trees listing hundreds of different technologies and concepts, a swath of Reddit posts, Medium articles, and YouTubers that claim that you need to know the frontend, backend, DevOps, 3 frameworks, 6 languages, and every data structure and algorithm you can think of in order to become a professional programmer.

Job descriptions are no more helpful when a newbie is trying to understand what you **must** learn in order to become a professional. Similarly to the above skill trees, job listings are often notorious for listing nearly every technology under the sun for a role. In fact, it's practically a meme these days.

Not only is the idea that you need to know a heck of a lot to get hired discouraging, but it's *unrealistic*. And we should change the narrative. 

Here's a little secret, for the uninitiated: *you don't need to know everything- yet*.

## Git Gud
It can be overwhelming determining exactly what you should learn, given the above issues with skill trees and job descriptions. How can you possibly be proficient in 10 different technologies, languages, and frameworks? The real answer is- it's hard, nearly impossible to be good at *everything*. So what can you do to be competitive, then? 

**Answer: Git gud**.

I argue that **depth > breadth** when it comes to gaining a strong programming foundation and working towards that first developer role. 

We've all heard of the following phrase (most often only the first clause):

> **A jack of all trades is a master of none**, *but oftentimes better than a master of one*.

I think the entire quote is valid, to a point. Developers inherently need to learn many different things in order to keep up with the ever changing landscape of technology. Being rigid in your stack might not be feasible when trying to reach for growth not only professionally, but technically. To be clear, I believe that in order to be a great developer, having the ability to learn a lot of different things is basically a requirement. So yes, as a professional, "oftentimes better than a master of one" is pretty key.

But when you're just starting out, fundamentals and learning how to learn so you can be that great developer who can quickly ramp up on different technologies is far more important than trying to split your attention between multiple languages and tools. 

Let’s think back to that first clause of the above quote- “a jack of all trades is a master of none”. It’s very easy to learn the basics in many things, but to develop competency and prove that to employers means moving past those barebones basics. Similarly to tutorial hell, we want to avoid the trap of being a perpetual beginner, while still growing that mindset of being a perpetual *learner*. 

## It's all transferable!

Believing that learners need not learn every new framework and tool of the month prior to searching for a job, or during their initial learning does not mean that those learners will be less equipped as professional developers. It also doesn't mean that one *shouldn't* have that sense of curiosity about other technologies. Ideally, learners should strive to get into a mindset where they can easily transfer their skills in one framework or tool to another *if they need to*. What's important is you have strong fundamentals.

Core programming concepts are frequently transferable across languages. If you know how to write a loop in one language, it's really just a matter of learning the syntax to write it in another. You've done much of the heavy lifting of learning the *concept of a loop* when you learned your first language. At this point, it's all about making sure what you type is syntactically valid.  At the end of the day, a language, framework, or technology is just a tool. But it's a lot easier to learn a new tool if you have **strong** skills and depth in another already.

## The Rockstar Developer 
As I said above, we've all become familiar with the "rockstar ninja master Jedi" job listings that seem to ask for 10 years of experience in tools that have been around for 5 years, knowledge of four different languages, and 3-5 years of experience for an entry level role. 

I can understand the kind of anxiety this may inspire that leads one to believe that to have a shot at this field, you **must** know tons of different tools and languages. That said, it may surprise you that often these things are wish lists, or things you'll get *paid to learn on the job*. Now, is it great to know these tools, languages, and frameworks before you apply? Sure. That's absolutely a plus to know those things. But it's entirely possible to gain employment in roles outside of your preferred stack, and honestly, it's common.

In my own experience, I was all in on the MERN stack. I was targeting companies that used that stack, for the most part. I had multiple interview processes (even getting to the final round!) where the stack was not MERN. My current employer uses a completely custom front/backend framework, TypeScript, and CoffeeScript. The only thing I had in common was that they used Node and MongoDB. 

I lacked confidence that I would do well in the role even though I knew my skills would be transferable. I got the job anyway despite not knowing any of those tools! I'm currently working with technologies such as Kafka and Redis, which are also completely new to me. Despite all of these technologies and tools that I didn't know prior to my role, I’ve been doing great. This isn’t to say that there haven’t been hiccups, but it’s nothing the documentation, drawing on my fundamentals, and asking great questions can’t solve. We should give ourselves more credit for being flexible and able to learn. 

# Conclusion
Being a developer is committing to a career of constantly learning. You'll probably find that you're learning daily in the first few months of your first job. It's more imperative to learn how to learn so you can tackle the novel challenges you will face as your team works on new projects, rather than trying to figure it all out ahead of time. You don't need to know everything in advance. You'll often find that your team, regardless of their individual seniority, is learning right alongside you, and if they're humble, they'll shout it from the rooftops.

That said, don't sweat it when it comes to facing what seems like a mountain of "need to knows". Are all of these things great to know? Sure, knowing things well can be very helpful. 

But if you're just starting out and aren't strong in any given technologies just yet, laser-focus your learning commitments and get *really great* at some key skills. Express your skills through some *really great* projects. Honing in on fundamentals and core skills will pay dividends when the time comes to branch out after you get that first job, and propel you forward towards that first job *much* faster than splitting your attention amongst an impossible number of tools too early. Git Gud- The rest will come. 

Let me know your thoughts about this searing hot take below.