What should you learn next as a developer
Tags: learning, skills
Published: 2022-06-22 05:40:14

In your software development career, you’ll never run out of new things to learn. Moreover, most developers are keen on learning—otherwise, they would never get this job. With so much eagerness and infinite possibilities, what makes the biggest difference is prioritizing the right things first. Let’s take a look at a simple model of how to evaluate the next step in the never-ending training!

## Relationship between abilities

Besides considering the virtues of the new skill you want to acquire, it’s important to think about how it will relate with the skills you already have. This is something that you need to evaluate yourself, or with someone who knows your situation well enough to keep in mind your current profile and abilities.

Let’s see how things can be related to each other:

### Complementary skills

The best option when you are learning something that will help you to utilize all the other skills you have so far. It could be achieved by learning skills from different categories:
* for very technical people, developing soft skills can make a lot of difference, or
* some extremely competent people can be leaving money on the table just because of a lack in negotiation skills

Or even inside the same category—just make sure you are not learning different ways of doing the things you already know.

### Overlapping skills

The other possibility is when you learn a new way of doing a thing you’ve already covered with another tool. So, for example, learning a brand-new language when you are already an expert in one and know relatively few others. 

It can be tempting to follow the footpath of what we already know how to learn successfully. If you learned one framework, you already have a recipe how to do it—for example:

* go through the official tutorial or the best-selling course on Udemy
* build some example applications 
* find a serious project to work on

You can reproduce the same steps for similar kinds of abilities—but for learning negotiation or communication skills, you need to look for a different approach.

The first tool in its category will make the most significant difference. So, your:
* first version control system (VCS)
* first framework
* first approach to present your ideas
* etc.
are what gives you the biggest return on investments.  

Learning overlapping skills will make sense in a few cases:
* when the new approach is significantly better than what you already know—preferably according to people who already did the switch. If the new tool is really worth it, you will hear from people happy after the change all the time.
* when your current skill is becoming obsolete. So, when you sit on the sinking ship of a framework, or nobody else uses your VCS anymore, start learning a new one.
* you have personal reasons to do so—you are bored with the technologies you use now, or your dream job is using different tools than you are used to.

## Variety of skills

What you are looking for is a variety of skills. Some things will be easier to learn, some more challenging. Probably the things that are the most uncomfortable for you, are the things you are worst with—so even a small effort at improving could bring many benefits.

Let’s see what skills you could consider, organized by broad categories.

### General workforce skills

Skill that will be useful when you work in programming; when you move to management or switch careers to marketing.  

#### Writing

Writing is an essential skill that I covered in [another article](https://how-to.dev/how-to-write-better-as-a-developer). It’s a necessary tool if you want to reach thousands of people with your message, or an extremely busy boss. As opposed to just participating in meetings, it allows you to invest more time into crafting your message—so the quality of your communication doesn’t depend entirely on your skills, but on how much time you would like to dedicate to it.

#### Public speaking

Even if you don’t _have to_ speak publicly, in your career you will have more opportunities if you are comfortable with it. You can increase your visibility at work by doing things such as:
* giving small presentations of your findings for the team and some guests
* showing the project internally or to the client
* showing the initiative and speaking in front of everybody during the work meeting

You can learn public speaking by:
* local Toastmasters meeting—if it’s especially challenging for you, or you want to focus on that skill
* giving talks at programming meetups. Usually, the organizers are constantly looking for a speaker. Just reaching out and proposing a topic gives you a big chance of securing a spot.

#### Communication

Both public speaking and writing are communication skills. Those are essential—there is no way of avoiding communication in one way or another, and how good you are with it will have a great impact. Even if you work as an indie hacker on your personal project, you will have to communicate with your potential clients in some way. The earlier you decide to work on any shortcoming you have in this area, the better.

#### Language

The key language for our profession is English. When the company language is English, and you struggle with it in speaking, you won't be able to participate fully in meetings. Without reading in English, you would not be able to read this and many other blogs—and many books or official documentation.

The other priority language would be the language of the company where you work. My client of 7 years is a Dutch company, and it would be easier for me to follow all the meetings if I were speaking their language. Luckily, in the Netherlands most people speak English; and if they don’t, they blame themselves for not being able to participate in a meeting that just switched to English. It’s not true for all countries—in Spain where I live I’m afraid it would be difficult to have a career without learning Spanish. 

I had my language learning phase when I figured out how to learn languages efficiently—at least in my case. Please let me know in the comments if you are interested in learning more about this—I have an article on this topic on my draft shelf. 

#### Negotiation

If you don’t negotiate your conditions, it means you’re really still negotiating them, but badly. There are wonderful resources made for developers, and you will get amazing return on investment for spending some time and money on getting your rate up. I wrote [an article about it](https://how-to.dev/how-to-get-a-pay-raise-in-it) earlier, and you can find more precise information there. 

### Programming in general

The skill that will impact your day-to-day work as a software developer: 

#### Git

Git is an essential tool that is used in countless projects. It’s what you use to deliver the changes you made to the project—it’s such a key activity that it’s worth investing some time in learning the tool you use for it well. In my other article, you can learn [how git stores data](https://how-to.dev/how-git-stores-data). 

#### Programming paradigms

It can be helpful to spend time on learning the big ideas about how code is organized. Things such as:
* object-oriented programming
* function programming
* reactive programming

In real-world applications, you are more likely to see those concepts in a bit of messy implementation, but it’s good to know the underlying idea and what people are trying to achieve by applying a given concept.

#### Programming methodologies

How the work of teams is—or could be—organized. It’s often discussed in the context of Agile—which is a family of methodologies, such as:
* Scrum
* Kanban
* Lean software development
* Shape Up 

Often, the most important thing is to know what people are using and why—as well as organizing the workflow of the team, combining the elements that provide what is needed in your organization.

#### Containerization

Docker and similar tools became universal in our industry over the past few years. Not knowing the basics will hurt you from time to time. It makes more sense to invest a bit of time to learn them on the side, and then use your new awareness whenever you have to deal with containerized deployments. 

#### Frontend

If your profile is on the backend, adding a bit of frontend skills to it can increase your value for the company. The end goal doesn't have to be to become an expert in the side of the internet connection—just to know enough, to do some small thing according to the team's best practices while other people are unavailable. The biggest challenge could be the visual part, but there is so much stuff on the frontend that needs none of it—just pure programming: such as modeling and transforming data and writing unit tests.

#### Backend

Similarly, for frontend people, a bit of understanding of the backend can help a lot. The biggest challenge can be database-related stuff if you never worked much with them—but those issues are often leaking to the frontend, so learning about them makes sense.

Often, as a frontend developer, you will double as a backend quality assurance person anyway. Getting familiar with the codebase on the other side allows you to start doing code reviews. In this way, maybe you will catch some issues before you go through the whole hassle of trying to make it work.

#### Data science

This is another way to either expand your career options or simply make you more capable in what you do now. Learning about data connects with backend—the database & how data is stored—or with frontend—how the findings are presented on charts. As the data industry is growing, this could be an interesting direction to develop your skill set. 

### On the frontend

When you focus on the frontend alone, you still have a lot of skill to consider.

#### JS

If you come from the visual side of the frontend, a bit of programming will open up new possibilities for you. On one level, you will be able to spice up your pages with dynamic elements made with JS. On another level, you will have more job opportunities—it’s more common to have a role where CSS is the priority, but a bit of JS is required as well.

#### CSS

This is the other way around if your focus is programming on the frontend, it can be helpful to have enough CSS skill to tweak the view as necessary. Before I got into JS programming, I did website building—setting up content management systems (CMS) and slicing layouts. Now I hardly touch CSS, but when there is a necessity, I can do whatever is needed. If you want to enjoy the same benefits, but you lack a similar background—basic CSS should be pretty easy to learn.

#### UI and UX design

The user interface (UI) is what users see when interacting with the application. I always considered myself half-blind on visual issues, but not everything in UI is a _feeling_. There are principles and rules that most designs follow, and just learning some basics of them will make you more capable and independent in the CSS work you do.

User experience (UX) is about how users interact with the application. It’s always intertwined with the screens that are built by the frontend developers. Similarly, as with UI—learning basic concepts of this art will help you resolve small doubts without bothering other people—making you more productive in the end.

#### JS flavors

There are plenty of valuable ideas in programming that are not available even in modern JS, or they are implemented in an awkward way. You cannot hope for many changes in the language or faster updates. The language is meant to be backward compatible, and changes to it have to be supported by many vendors. As a workaround for it, there are plenty of languages developed that compile to the JS—because often you can _feel_ the JSness of them, they are often called flavors of JS. Currently, the most common examples are:
* TypeScript
* Elm
* Flow
* CoffeeScript

### Angular world

Since 2013, I’ve been specializing in AngularJS/Angular applications. In this area, I see the following skills to be honed.

#### Framework itself
How to use the framework to build stuff, and how to do it correctly. The basis for anything else that you will do in your work, and the focus of most tutorials and courses you will find online.

#### RxJS 

A library that is used heavily by Angular. RxJS provides “observables” and operations on them. If you are new to it, it can require a bit of dedicated learning. Observable is a model of dealing with changes over time that requires time to grasp it well. It can involve mental gymnastics similar to learning promises for the first time—but as the tool is an order of magnitude more powerful, the same is true for its complexity and difficulty in learning. 

#### Karma and Jasmine for unit tests

Karma is a test runner, and Jasmine is a library for writing unit tests. If you use Angular CLI, Karma config will be started for you—but it can be helpful to be able to tweak it if needed. For writing unit tests, you will need to use Jasmine and become proficient in working with it. In my other article, you can find more about [unit testing](https://how-to.dev/how-to-write-unit-tests).

#### Tool for End-to-End tests

End-to-end are automated tests that allow you to check the whole application together—the frontend and the backend. They load the application in the browser, and interact with it in a way similar to the user. They can be difficult to develop and maintain—often it will be a developers’ task to take care of them, or at least to support tests when they get stuck with the technical part.

In the past, the Angular team maintained Protractor—an Angular-integrated tool for E2E. As framework-agnostic tools got better, the development of Protractor got stalled, and the community is moving towards other tools—especially Cypress. I made the switch myself as well, and I’m delighted with the new E2E setup.

## How about you?

Which skill do you think would make the most difference in your career right now? Please let me know in the comments—I’m truly interested in learning the perspective of my readers.