Originally DevOps was mode of operation in which Developers and Operations worked together.

It was created because in many companies there were silos: Developers, (Maual) QA engineers, Operations and the communication among these silos was less than ideal. (also know as "really bad").

The DevOps movement eliminated the silos, made the whole process much smoother.

Unfortunately many companies instead of eliminating the silos have just renamed the Operations team to be DevOps and expected them to wirte some code to their operations.

Some companies were even worse and created a new silo called DevOps.

Anyway, today we are here and there is a job title called DevOps Engineer and there is a huge lack of good DevOps engineers. So what do you need in order to become one?

The content of this job is also very different among organizations. Some places they mostly do "Cloud System Administration". In other places they do the job of what used to be "Configuration Management": build systems, CI (Continuous Integration) systems. In some places they might be responsible of the branching and merging strategy of the developers. In some places they are the ones deploying the applications, in other places thet create only the tools and the teams themself actually handle the deployment.

So there is no good definition of what a "DevOps enginner" does and needs to know.

Non-Technical Skills

Before we get to the technical part let's talk a bit about the non-technical skills.

A DevOps engineer must be able to communicate well with their co-workers throughout the organization. The DevOps team is in many cases the glue connecting the various technical teams. It is a service team that provides service to many other teams.

It also means the DevOps engineers will get requests from around the company, not just from their manager. A DevOps engineer needs to be able to handle this. Find a way to be able to say no to all the urgent requests.

In many ways it is also a rather thankless job. Most people will only come your way when they have some problem. When something does not work. And then it is urgent.

As a DevOps enginner you'll have to learn about tons of technologies. You won't really have the time to delve deeply in any of the technologies, but you will be expected to be the expert.

This can be both overwhelming and extreamly fun. I personally love experimenting with tools. I wish I could do more of it.

Most likely you'll also need to explain many tools, and the limitations of those tools to a lot of people in the organization, so you will need good communication skills.

Yes, I know Sysadmins or Operations people have a bad reputation of being uncommunicative. So if you are someone who can communicat you'll have a clear advantage over them.

Technologies

I have another page where I listed tons of technologies used by DevOps, way too many. Let me give an overview here.

Version Control

The base of every good operation is to be able to track changes. Git is the de-facto standard open source Version Control System (VCS) so I recommend you become very familiar with it.

It is also usually importanto to deal with the "Git server", that is GitHub, BitBucket, GitLab or some similar system.

Linux

The majority of companies use Linux as their servers. You must become familiar with Linux via the CLI (Command Line Interface). I mean the shell.

The specific distribution matters less, though in most places I've encountered CentOS, RedHat, and Ubuntu.

Networking

It is probbaly quite important to have a good understaning of Networking protocols. Starting from TCP/IP up to higher layers of the Internet protocols.

Virtualization - Containers

These days Docker and Kubernetes are all the rage.

Programming languages

The two most frequently used languages by DevOps engineers are Bash, the Unix/Linux shell and Python.

Others

There are tons of other technologies for DevOps I've already listed elsewhere and that list is probbaly also missing quite a few items.