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. 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 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.
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.
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.
Top comments (0)