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.
Infrastructure teams are now shifting their capabilities away from racking and stacking servers to supporting this CI/CD pipelines, which means learning code. Templates files built in YAML, infrastructure deployment scripts in Python, and applications in JavaScript deployed through pipelines defined in Groovy. The application code itself is getting closer to the infrastructure. Now application developers can build routines in their applications for scaling and handling failovers through infrastructure APIs. This is why I've started to invest a non-trivial amount of time in learning to code.
I decided to focus on learning the development languages involved in DevOps, and settled on five that are most relevant: Python, Ruby, JavaScript, Go, and C. At this point, I am by no means a full time developer, and I'm not even sure I could call myself a hobbyist. But thanks to the resources I present in this article, I have moved beyond the point of basic knowledge.
Python
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.
Codecademy: I started learning Python at Codecademy. The Codecademy Python program provides a great introduction.
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
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.
Podcasts: I also listen to the Ruby on Rails Podcast, and Ruby Rogues.
JavaScript
The ecosystem of JavaScript frameworks and projects continues to grow at an astounding pace. From client-side JavaScript to server-side frameworks, huge swathes of the Internet run on JavaScript.
FreeCodeCamp: JavaScript is a language I am continuing to learn, mainly through FreeCodeCamp. FreeCodeCamp has an excellent free program that provides real-world examples and pushes students beyond the typical type-these-words-and-run-wheeeeee experience. As you progress through the program, you receive less prescriptive guidance and instead are given tasks to complete. The lessons I've learned the most completely in my journey have been from this "start in the deep end" style of teaching. I can't recommend it highly enough.
Podcasts: I also listen to JavaScript-focused podcasts, such as JavaScript Jabber and FiveJS.
Go
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.
Google Developers channel on YouTube: I've also started watching videos on the Google Developers channel, including Go for Pythonistas, Get Started with Go, and Go Programming.
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
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.
15 Comments