I have something to confess. In the last year, I finished only two programming courses. How many have I started? Around twelve. Do I remember what I've learned in the courses I haven't finished? No.
Do you feel this same? Is there too much on your plate?
Software development is a demanding career; you have to update your skills constantly. When I started, you only needed to know HTML, CSS, and jQuery to get a job. You could learn few other things in the job, but it was almost enough to have a career.
Now job posts list a dozen of things you need to learn to become a junior developer. And as your career progresses, the list becomes longer and longer.
How are we dealing with it? By learning. A lot. Many developers buy several courses a year. We attend conferences or even go to boot camps to improve our skills. And we're reading. How many articles, blog posts, and tutorials do you have bookmarked?
Many software developers are stressed and overwhelmed. They feel like they're in the Red Queen's race - it takes all the running they can do to keep in the same place. To grow, we must run at least twice as fast as that.
We begin learning "the next big thing" just to realize there is the next "must-have" technology to learn. We jump from course to course and from conference to conference, trying to learn everything. In the end, we can't finish, and we learn nothing.
It's impossible to digest all that knowledge. Our learning to-do lists grow every day. Half a year ago, I mercilessly removed almost ten courses I saved to watch later. Yet somehow, the list keeps growing. Is there a better way?
Yes! The solution is simple - focus on one thing at a time.
What do you need to learn new technology, a library, or a language? Just two things - you have to understand its principles and use them in practice enough to make the new skills stick.
Usually, when programmers learn a new thing, they start with documentation or courses. This is a great first step, as we need an introduction to the new concepts. The problem is when we're jumping from thing to thing, we often skip the second step - using the skills in a real project. This is where focus comes to play.
When you're able to focus on learning one thing, you give yourself more time. You can use new knowledge in projects, experiment, and break things. Playing around with technology, discovering its strong points and limitations is what gives us technical prowess.
Spending more time with one technology also allows you to get unique insights. So you may write articles and create courses which enhance learning even more. You become an expert.
Imagine the difference between spending three months learning React and one month for React, GraphQL, and WordPress. One month is not enough to fathom complex technology, but experienced software developers can become comfortable using almost anything in three months.
What to focus on
We know the focus benefits. But the problem still exists - there are countless things to learn. How could you choose what's worth your time?
To decide, you must understand your priorities. To help you with it, I'll share my list of priorities and things to avoid.
My priority is mastering things I get paid for. As a front-end developer who uses mainly React and React Native, I focus on improving my React skills. React pays my bills, so I need to be as good with it as possible.
The next priority are things I use daily. It's the whole front-end ecosystem, with bundlers, linters, continuous integration/development tools, etc. The time spent to learn those is not wasted.
Further down the line are the things I'll use soon. In my case, it's serverless, so getting better with it is worth my time.
Skills useful to growing career are next on the list. These skills are usually adjacent to my area of expertise. They include writing and design, as they help me communicate better and create great user interfaces.
My final priority are things I'm interested in. Learning should be fun, so we can't focus only on being productive. I'm interested in mastering the command line, so it will be my next step.
Besides priorities, I also have a list of things to avoid. They may be tempting, but learning them is not a good time investment.
A huge time waster is learning new ways of doing this same thing. For example, React ecosystem has multiple libraries responsible for routing or state management. Learning all of them is not practical, especially as many will be forgotten in a few years.
My great sin is learning things I'll not use soon. I tried to master many things "just in case." After all, I could need them sometime. Well, I didn't. Or I used them so long after first learning that I had to begin from scratch. The programming principle you aren't gonna need (YAGNI) is useful not only for writing code but also for planning your learning.
The final areas to avoid are things far away from my area of expertise. I don't have a strong mathematical or computer science background. I also don't use artificial intelligence, machine learning, or big data in my work. Nor will I in the foreseeable future. So learning those, though tempting, is not practical.
And how about you? Is your to-do list too long? How do you decide what to learn?
Did you find this article valuable?
Support Szymon Adamiak by becoming a sponsor. Any amount is appreciated!