What's in your SW Developer toolbox?
Tags: beginners, programming, tutorial, productivity
Published: 2022-07-16 20:53:32

Let's assume you know a programming language and are proficient with it. 

Is it enough to be a professional SW developer?

No, it is not.<br>
The programming language is your primary tool. It is the brush of the painter and the hammer of the carpenter.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4znd6e43af9z8p1smalv.jpg)
But you'd need to master other tools to collaborate with other developers and contribute to complex applications.

In Italy, there is a saying which goes like this:
"I ferri fanno il mastro"
which means "the tools make the master craftsman".

If you take it literally, it is not very accurate. You also need the experience to use the tools.

In this context,  "having the tool" means being able to recognise when it's good to use a specific technology and to be able to solve the problem using it.

What should be in the toolbox of a developer?
It depends. Web developers, mobile developers, and data engineers (and so on) use different tools.
For example, knowing about ELT process might not matter for a Web developer, but it's crucial for a data engineer. On the other hand, Html and CSS are essential for a web developer.

If you are a Ruby developer, at the very core, you must know:
Ruby on Rails, RSpec, a Ruby version manager (RVM, asdf, ...)
and to fill a senior position, be sure to put a bunch of gems, a good knowledge of OOP, and SQL in your toolbox.

There is no limit on the tools you can have, but it requires time to acquire them, and that's your limit.

*Choose carefully the tools you want to put in your toolbox based on the career you want.*

I've spent many months studying Data and ML to get the GCP Data Engineering professional certification.

After a while, I realised that it was irrelevant to my career. I had a vague idea of moving toward a career in data engineering, but my approach was wrong.<br>
A better way would have been to learn Python and ML libraries and start an actual project using them.

The GCP Data certification does not add much to my employability. It's just not required for a Ruby Engineer.
What's in high demand - for my profile like mine - are DevOps and CI/CD skills, for example.

After a few errors, I've developed a few ways to choose a new subject to learn.  These are:

## Notice what slows you down in your daily job

Sometimes, you are already using a tool, but your knowledge is shallow, and you spend lots of time on Stack Overflow to find responses, which you'll forget in a few days.
It might be Git or SQL, for example. Find the time to master the tools that you use often.

## Analyse the typical job specs

Visit an online job board, and insert your job description in the search box.
Then, open the results relevant to the position you are interested in.

Your goal is to find the IT skills that are most present in the various job spec (or, in other words, the keywords with the highest frequency).

Those are the skills that you should consider learning

## Website showing the co-occurring IT Skills
Similarly, some websites allow you to find skills related to a particular skill.
 
The website *ItJobsWatch* calls them "Co-occurring IT Skills", and it finds them processing thousands of job specs. 

It is similar to the previous method but applied at scale.

For example, the following link shows skills most related to Ruby On Rails:
[Ruby on Rails - Related skills](https://www.itjobswatch.co.uk/jobs/uk/ruby%20on%20rails.do#related_skills)

and they are:

- Javascript
- Docker
- Git
- SQL
- React

Those are indeed the most required skills for a Ruby On Rails developer.

(Surprising, the list also shows Java, which is not correct, in my opinion)

## Find out common skills
The last technique is analysing a broader set of job descriptions and discovering what are the skills in common.

For example, if you search for "Back End Developer", regardless of the programming language, you'll find the following skills (among others):

- OOP (Object Oriented Programming)
- Testing
- Docker
- Git
- SQL

Those skills are fundamental because they will remain relevant in your career, even if you switch to a different programming language.