Developers these days are under increasing pressure to master DevOps--or, at least, to familiarize themselves with its core principles. That’s because many organizations are no longer looking to hire people who can simply code. They want coders who, in the spirit of DevOps, can also collaborate closely with other IT staff in deploying and managing applications. What’s a programmer to do in the face of this demand for DevOps skills? Part of the answer, of course, lies in understanding the DevOps philosophy, but the other part of the answer is to learn the specific skills that DevOps work demands of developers. That is harder to do because there are few guides out there explaining what, in a technical sense, a DevOps-minded developer needs to know.
That’s why it seems worthwhile to list the main areas of expertise that are required to do DevOps. The following list isn’t exhaustive, but it’s a good place to start if you’re a programmer trying to figure out which skills you need to master to gain a leg up in a DevOps-oriented world.
1. Containers (and Kubernetes)
One key technology is containers, and everything that goes along with them.
It’s hard to become a programmer without learning at some point how virtual machines work. But it’s a safe bet that many people working in development today haven’t yet familiarized themselves with containers, since containers are not often closely associated with coding. Instead, they’re a technology that the IT Ops team deals with. It's for that very reason that it’s important for developers today to learn how containers work, what makes them different from virtual machines, and which tools you use to deploy and manage them.
And, to be clear, when I say developers should learn containers in order to do DevOps, I’m referring not just to container frameworks specifically (such as Docker), but also to the complementary tools that are used alongside them (like Kubernetes and other orchestrators).
Serverless functions are another technology that IT teams are increasingly using to deploy parts of their applications.
Some developers may already be writing serverless functions for their companies. But if you don’t yet know what a serverless function is or how to write and deploy one, learning will help you thrive in a DevOps-minded organization that focuses on agile deployment technologies.
Identity and access management (IAM) frameworks, which control access to resources in cloud-based environments, are another key ingredient for many modern application delivery chains. Developers don’t frequently need to deal with IAM in their core work because few applications interact directly with IAM systems. IAM is something that is configured within an application environment, rather than within the application itself.
However, if you want to be able to play a role in deploying, managing and securing the applications you write--which you do, if you are part of a DevOps-focused team--understanding IAM is crucial.
Ideally, you’ll learn the ins and outs of the IAM system of whichever cloud (or clouds) your organization uses, since each cloud provider offers a somewhat different IAM solution. But, at minimum, you should understand how IAM works in general, and which special access control requirements arise in cloud-based environments.
Like IAM, application performance monitoring, or APM, is an essential task that is typically overseen by the IT team.
Historically, developers wrote code, then IT deployed it and used APM tools to monitor and help manage it. In a DevOps world, however, developers need to be plugged into the APM process so that they can lend a hand in analyzing and resolving performance issues that arise within applications post-deployment. That means developers need to understand which APM tools their organization uses, how monitoring data is collected and how issues detected by APM tools are communicated back to developers.
5. Test Automation
Automated software testing tools are another crucial part of the solution stack for DevOps teams. When you are continuously delivering software, it is often not possible to rely on ad hoc tests or tests that require manual effort. Teams must instead rely on automated testing frameworks that can run numerous tests in parallel.
Testing is usually performed by quality assurance engineers, at least in larger organizations. But developers have important roles to play in testing, too. In addition to helping to identify and fix bugs discovered during testing, they can use their coding skills to help write automated tests.
For this reason, familiarizing yourself with automated testing frameworks, like Selenium and Appium, is a good way to enable better collaboration with other team members along the continuous delivery pipeline.
6. Unix Tools
Last but not least are Unix tools, by which I mean command-line programs that run on Linux and other Unix-like operating systems. These tools may seem old-school, but they often prove very useful for interacting with server and cloud environments, provisioning infrastructure and automating tasks that would otherwise take very long to complete. That’s especially true when the tools are in the hands of developers, who can incorporate them into powerful scripts.
So, if you think programs like sed, awk and grep don’t have a place in the cloud-modern age, think again. They do, and they are a crucial part of many DevOps pipelines.
For developers, contributing effectively to DevOps is partly about adopting the right mindset, culture and philosophy. But DevOps also requires some specific skills. Today, those skills involve technologies like containers, IAM frameworks and test automation. If you’re a developer looking to bolster your DevOps credentials, learning these technologies is a good place to start.