DevOps is commonly defined as a set of practices to automate processes related to operations in software development.
A DevOps Engineer is somebody who performs this kind of automation. They might write code and build tools to automate deployments or they might configure CI/CD tools like Jenkins, Gitlab, TeamCity, or CircleCI. They might set up servers and infrastructure to deploy code to (and they might automate this process as well with tools like TerraForm).
The purpose of DevOps is to bring together the operations + development parts of an organization. Traditionally there was a "development team" and an "operations team" (and I mean 10 or 20 years ago, DevOps practices are fairly standard now). When the development team working on software was done they would hand it off to the operations team and ops would be responsible for running the application.
You can imagine that the "chuck it over the wall to ops" mentality was not a very great way to ship quality software.
Usually when you are working on a software project there are pretty well defined phases. It usually looks like this if you are doing an Agile, iterative process:
The DevOps Engineer is mostly going to focus on Step 3 and Step 4. Modern software projects are deployed with the click of a button, or even automatically, and they might be deployed multiple times per day as people fix bugs. Because of this, it's important that everything around this process is as automated as possible.
A lot of other DevOps responsibilities are focused on supporting running applications. All applications of any importance should be actively monitored for issues, and there are a lot of ways to automate this. That includes setting up dashboards to monitor for things like running out memory, spikes in application slowness (latency), and sending alerts if errors are logged out from the application.
I wanted to just go ahead and explain some terms here so that you can get a good feeling of things you might see on the resume of a DevOps engineer. I'll start with CI/CD systems.
CI, or Continuous Integration is defined as a practice of merging in code to the master branch each day (and running automated tests on it when you do that to make sure it merged OK).
These days we often talk about CI/CD tools that in addition to running automated tests, they will also be capable of doing Continuous Deployment. Mostly that means that when code is merged to a master branch it will automatically be deployed to some testing environment.
People also do automated production deployments using CI/CD tools but usually there is still some human in the loop clicking a button to approve the release of new versions of code to production customers.
These big CI/CD tools and platforms often have APIs so they can integrate with many other systems and they usually have an ability to run scripts written in a variety of programming languages. You can automate just about anything with CI/CD tools so these are a central piece of technology you will find on DevOps engineer resumes.
You might have noticed a couple of these tools have to do with "containerization". Docker is a containerization system and it is such a big deal in the industry now, I wrote a whole post explaining it here.
AWS, GCP, and Azure have changed the game a lot. Amazon Web Services is continually coming out with services to automate away DevOps tasks themselves. You can think of what happened like this:
I'm being dramatic, but this is the way things seem to be going. Now there are people with the job title "Cloud Architect" that help set up AWS or Azure infrastructure and build everything using cloud services. I think this is where the devops is increasingly headed.
The takeaway here is that DevOps is a practice of combining software development + operations tasks. The primary goal is to automate operations tasks using software development practices and tightly couple the operations and development arms of a given organization.
DevOps engineers will likely know at least one programming language pretty well, some kind of CI/CD system, and some kind of infrastructure automation tooling system.
DevOps engineers should also have a good understanding of networking and security since a lot of job is connecting servers to each other and to the internet. Increasingly, I think you will see DevOps engineers specialize in one or more public cloud providers.