Three Core Skills
Tags: firstyearincode, productivity, codenewbie
Published: 2019-12-16 23:01:26

__This Post originally was published in the Junior Dev Insights Newsletter. Sign up here to receive more of these every week: https://learn.21-lessons.com/junior-dev-insights__

---

Becoming a software developer is an ambitious goal. It takes time, practice and patience. When you start out, one of the first things you start to learn is a new way of thinking: How can I break down these problems into manageable pieces for the computer?

![The first Core Skill Sketchnote](https://thepracticaldev.s3.amazonaws.com/i/3thljyhqf074wspx7f2u.jpg)

You get familiar with your first programming language, its features, strengths and weaknesses. Your first language, together with the skill of breaking down problems helps you move forward. 

![The Second Core Skill Sketchnote](https://thepracticaldev.s3.amazonaws.com/i/b0p6makapw0thkedrtt0.jpg)

But then, there's another skill that you might not be aware of: Learning how to Learn. This is crucial. It is even more important than knowing the In's and Out's of your first programming language. It is the skill that will keep you in the game.


Simon Sinek talks a lot about Finite vs. Infinite Games. ([Most Leaders Don't Even Know the Game They're In | Simon Sinek at Live2Lead 2016](https://www.youtube.com/watch?v=RyTQ5-SQYTo)). Quoting his definition from the linked video:

A finite game is defined as a game with fixed rules, known players and an agreed-upon objective (i.e. Soccer or Baseball, the player or team with most points win).
The infinite game is defined as having known and unknown players, the rules are changeable and the objective is to play to keep the game going. The only way a player drops out is when they lack the will or resources to play. 

When I grew up, I was told that getting an apprenticeship after school is the way to go. One would train for three years and once finished, hopefully the company offers you a contract that lasts until retirement. 
You learn once and draw from that knowledge for the rest of your professional career. According to old standards, this would be considered a win - winning the finite game.

![The Third Core Skill Sketchnote](https://thepracticaldev.s3.amazonaws.com/i/36l5f241t4vhq7eu5c0s.png)

Today's landscape is different. The world is changing faster than ever. For us software developers, this means that new versions of programming languages get released more frequently and new libraries and frameworks pop up every day. It's very likely that we get in touch with new technology almost every week, even every day. 
There's no chance to "win" this - to know enough so that you don't have to learn anymore. Instead, our objective is to stay in the game. 
That requires a different mindset compared to the idea of learning once and benefiting from that knowledge until retirement. When we don't know something, that's okay. We need to develop tools and strategy to master new programming languages, tools and frameworks. 
Let's say you want to learn a new programming language. The first step is to check out their website, install it on your computer, then reading the first tutorials. Additionally, you start to look for tutorials via Google and YouTube to get better. Also, for the major languages, there are a lot of well-written books available. 
The information is there, what matters is how you consume them. 

What is your strategy to learn new things in Tech? Reply to this email and let me know.