Once upon a time, encouraging a system administrator to learn a programming language might have been wonky career advice. Programming languages are for programmers, after all—you know, the people who write code for a living. The sysadmin just keeps everything up and running.
That’s a reasonable but dated thought process. In today’s multi-cloud and hybrid cloud environments, which are increasingly automated and managed with code, strategically learning a language (or several) is often a smart move. This fact doesn’t mean you’re now doing double duty as an application developer, but rather that in modern IT environments some traditional sysadmin duties have become more code-driven. Factor in related trends such as containers, microservices, and orchestration, and you begin to understand why automation has been such a hot topic in IT. We need automation to keep things running smoothly as systems scale in production, all the more so given today’s distributed computing environments.
If you’re a sysadmin, you could learn any programming language just for the heck of it. No one’s stopping you. But some languages make particular sense. Your mileage may vary depending on factors like your infrastructure, applications, codebases, toolchains, and so on. Let’s look at seven languages worth considering for today’s sysadmin.
The Bash command language (which is short for Bourne Again Shell, a reference to the Bourne Shell that it replaced) has plenty of hardcore IT fans. This language is a particularly good pick for sysadmins to learn, says Rob Hernandez, CTO at Nebulaworks, because it suits some of the fundamental job responsibilities.
"A lot of the situations sysadmins find themselves in requires having to glue processes or existing tools together," Hernandez says. That’s often easier said than done: "Typically the systems have constraints and your ability or access to installing an interpreter or compiler might be limited."
Enter Bash. Hernandez notes that this shell is available on most Linux distributions and UNIX OSes out of the box. (And, he adds, the original Bourne shell (sh) is there—"if you must.") Moreover, the Bash command language is well-suited to the kinds of problem-solving that sysadmins do on a regular basis.
"[Bash] provides the glue necessary to solve countless problems without much [of the] boilerplate that's required from more sophisticated languages," Hernandez says. "This quick ability to prototype and even solve the initial problems is typically the first tool us trusty, experienced sysadmins reach for. And with its inclusion into Windows via WSL, it most certainly isn't going away anytime soon."
Hernandez notes that there comes a time when a shell script approaches its maximum possible complexity. "I measure this by asking a single question: 'Do I need a dictionary?'" Hernandez says. (Dictionaries are a data type in Python; Hernandez points to the Python docs for a good definition.) "If so, I would say it’s time to look into another language."
For Hernandez, that next-level language is Python. Here’s why: "Python provides a good set of advantages over the shell (dictionaries being one), as well as the ability to allow you to properly write unit tests," Hernandez says. "[Python] is available to install on any modern UNIX OS or Linux distribution and the syntax isn't overbearing. I've found it to be an approachable alternative to those familiar with the shell."
Hernandez also offers advice if you’re new to the language: "Start with Python 3.6 since Python 2.x has, for the most part, reached end-of-life. The syntax changes slightly between the two versions but this way you're learning the good habits right off the bat."
All that we've discussed here explains why, as a scripting language, Python has become a popular choice for automating manual and repetitive tasks. There’s even a Udemy course called "Learn Python: The Complete Python Automation Course!" In fact, Python is featured in a number of online courses (including free options) designed for people with little to no coding experience.
"The resurgence in Python over the last few years means even more internet resources for learning are available and up to date," says Jack Bedell-Pearce, managing director and co-founder at 4D Data Centres Ltd in the UK. "Python is a must have for all systems administrators. It’s cross-platform and caters for any complex task."
As we noted above, the right language for you depends on the environments you’re working in. PowerShell is a good example.
"PowerShell is invaluable for Windows system administrators," says Bedell-Pearce. "PowerShell gives access and control to the whole system from the command line. Administration tasks can be fully automated, saving time and minimizing human error. Powershell scripts can be scheduled to automate out of hours of repetitive tasks with ease."
Azure Powershell is ostensibly an extension of PowerShell for the public cloud, this language may be a good fit for sysadmins working with Azure, especially in multi-cloud and hybrid cloud settings.
"Azure PowerShell provides a set of cmdlets that use the Azure Resource Manager model for managing your Azure resources," says Jared Sikander, CTO at NetEnrich. "Azure PowerShell uses .NET Standard, making it available for Windows, macOS, and Linux."
OK, OK, Kubernetes isn’t a language in the traditional sense. But this platform has become one of the top choices for managing containerized applications, and is likely to grow in popularity as more companies deploy containers in production environments. And while we’d typically call Kubernetes a container orchestration or management tool, it does have it’s own native command-line interface, kubectl, which comes with its own particular syntax for managing your Kubernetes clusters.
Speaking of clusters, Kubernetes has its own literal language or lexicon of key concepts and features. The Kubernetes project site includes a glossary, as well as a kubectl cheat sheet for running commands. And to throw one more actual programming language in the mix here, consider Go (aka Golang), particularly if you’re looking to build your credentials for a role administering containerized applications and their infrastructure. Kubernetes was written in Go, as was Docker and rkt.