I've been focused on infrastructure for the majority of my career, and the specific technical skills required have shifted over time. In this article, I'll lay out five of the top programming languages for DevOps, and the resources that have been most helpful for me as I've been adding those development skills to my infrastructure toolset.
Knowing how to rack and stack servers isn't an in-demand skill at this stage. Most businesses aren't building physical datacenters. Rather, we're designing and building service capabilities that are hosted in public cloud environments. The infrastructure is configured, deployed, and managed through code. This is the heart of the DevOps movement—when an organization can define their infrastructure in lines of code, automating most (if not all) tasks in the datacenter becomes possible.
Advanced levels of automation enable Continuous Integration/Continuous Delivery (CI/CD) practices that weren't possible in the past. CI/CD workflows make application delivery frictionless—a developer can push his or her code to a source repository, and infrastructure is automatically deployed to support test processes that can push an application all the way to production without human intervention. The work of a technologist crawling under the tiles of a raised floor to plug in new network cables is no longer in the critical path for production application deployment.
Python has become an all-purpose language in infrastructure. It has been used to build cloud infrastructures projects such as OpenStack, and even supports web applications through frameworks such as Django. Python is an approachable language with a wide range of uses.
Safari Books Online training: From there, I moved on to Jessica McKellar's excellent Introduction to Python course on Safari Books Online. The Safari service is expensive, but there are often membership sales that can give you as much as 50% off. SafariBooks also has O'Reilly conference videos, including talks and labs. The talks provide an opportunity to find interesting niches in each language.
Online conference videos: Search online and you'll find interesting talks at various developer conferences about how to use languages in ways you may not have otherwise considered. PyCon conference videos, for example, are available on YouTube.
Ruby is used in a number of infrastructure projects. ManageIQ, for example, is a Ruby on Rails app. At my job at Red Hat, I often joke with customers that with ManageIQ (and CloudForms), users are only 10 lines of Ruby code away from doing anything.
Codecademy: As with Python, I picked up my Ruby knowledge primarily from Codecademy.
Documentation: The other resource that helped me understand Ruby in more practical terms (i.e., for my job) is Peter McCowan's book Mastering CloudForms Automation (available as a free PDF). Working with CloudForms building state machines and advanced automation workflows helped shape my understanding of the constructs inside Ruby.
The Go language was introduced in 2009, and has made quite a splash in the market since its introduction. The designers of the language were focused on making a statically typed language that is human readable, but that also performs well at scale.
golang.org: I've only started my time with Go, beginning with the tour at golang.org.
Safari Books Online training: I'm focusing more on Go in 2017, as it underpins a number of important web technologies, such as Docker, Kubernetes, and etcd. The learning path at Safari Books Online is another great resource, including Master Google's Go.
C is a language I have tried to learn several times. Each time I approached C, I didn't have any particular goal in mind. I wanted to learn the language because so much of the code in the world is written in C, and many of the constructs in the language are reused in other languages. When I joined Red Hat, however, I quickly learned an adage that's been in the FOSS community for a very long time: The best documentation is the code. As I have sought to understand projects such as KVM, libvirt, and QEMU, I realized that I need to learn C to understand what's happening at a fundamental level.
Learn C the Hard Way: To learn C, I've picked up Learn C the Hard Way, which has proven to be a unique approach to the language. I like the author's writing style and the no-nonsense approach to coding exercises. You can read the book online for free, or buy book to also get the code examples and movie files.
My current job is focused on talking to customers about cloud solutions, but I've been invested in the IT community for a long time and I feel obligated to give back. One of the things I'm focused on in 2017 is helping to educate current IT staff on the trends in the market, and how to participate in the new world of IT that is starting to come into focus. I hope you are able to take some of the resources provided in this article and transform the bullet point on your resume that says "building servers" to "building code."
Which programming languages are you focused on learning now? Let us know the about the resources that have been most helpful to you in your programming journey.