Although DevOps engineers do not typically write source code, they do integrate databases, debug code from the development team, and automate processes. Automation is a critical part of what gives the DevOps lifecycle its speed, and a DevOps engineer plays an important role in implementing a DevOps automation strategy.
Additionally, a DevOps engineer should have a working knowledge of the languages their team is using to help them understand existing code, review new code, and assist with debugging.
Programming languages to learn include:
- Go (recommended)
- Ruby
- Python
- Node.js
Operating systems (OSs) are a crucial piece of the technology stack that a DevOps team needs to function. OSs, not only power the local machines that the team uses to communicate and complete tasks, but it also runs the servers that host the team's deployed applications.
As such, you need to learn the command line terminal so you are not reliant on the graphic user interface (GUI) to configure your servers. Command line simplifies tasks that would require multiple clicks in a GUI, and some commands are only executable through the terminal. Every OS is different, so learning more than one is advisable.
Popular OSs to learn include:
- Linux (recommended)
- Unix
- Windows
You'll also want to learn the larger strategies and rules that govern how OSs are built and run. As a DevOps engineer, technical knowledge and conceptual knowledge are equally important.
OS concepts to learn include:
- Process Management
- Sockets
- Threads and Concurrency
Any web-based application will use protocols to transfer and receive information from the user. This means it is necessary to understand how protocols support different request types.
Just as important, you need to know the risks of these transfer methods and how to secure them to prevent bad actors from intercepting your data or infiltrating your application. Cybersecurity is a critical skill no matter your role within the DevOps lifecycle.
Networking protocols to learn include:
- HTTP
- HTTPS
- SSL
- SSH
Infrastructure as Code (IaC) is a practice for streamlining the provisioning of infrastructure to support your application deployment. Networks, servers, and other infrastructure are configured and managed using template files to create an environment with your application's exact requirements. IaC allows you to automate this process for faster deployments and updates.
IaC strategies to learn include:
- Containers
- Configuration Management
- Container Orchestration
- Infrastructure Provisioning
Continuous Integration and Continuous Deployment (CI/CD) is a central principle that DevOps is founded on: the integration of development and operations as well as constant iterations. To achieve this philosophy, most DevOps teams turn to tools built to support the DevOps lifecycle. CI/CD tools support multiple phases of the pipeline and automate processes and handoffs to free up team members.
CI/CD tools to learn include:
- GitHub
- GitLab
- Bamboo
- Jenkins
Most — if not all — modern applications are hosted in the cloud. Cloud services provide many benefits, including the cost savings and scalability that result when you no longer need to host your own servers for your application. Naturally, it's important to understand the different cloud services available and their unique costs and benefits so you can select the best hosting provider for your finished applications.
Cloud providers to learn include:
- AWS (recommended)
- Azure
- Google Cloud
- Heroku
Cloud design patterns are the philosophies that produce the scalability, reliability, and security of cloud applications. Just as important as understanding cloud providers, you should also understand these patterns.
There are many lessons to learn from cloud best practices (e.g. high latency) that you can apply to applications hosted in the cloud and to your development approach before deployment. For example, backing up your source code in a cloud-enabled repository so you don't lose access if your local storage is unavailable.
Cloud design patterns to learn include:
- Availability
- Data Management
- Design and Implementation