You start out as tech support and eventually land a help-desk role. In this position, you gain experience, maybe get promoted to help-desk level 2, and become an IT admin.
From there, you gain enough experience to start working on systems as a sysadmin or systems engineer. This is where people usually get to a fork in the role: “Should I focus more on code or operations?”
Well, if you’re a sysadmin looking to get into software or web development, DevOps is almost always the next natural step.
The primary goal for system administrators and engineers is to make it possible for employees in different departments to share information and work together more efficiently. DevOps engineers are very similar in that they provide efficiency and optimization, but they connect software-development teams with deployment teams.
Many people still have no idea how to break into software development and feel they’re stuck rebooting computers and fixing printers their whole life in ticket purgatory, but there is a way out (if you work hard.)
First off, let’s get two things out of the way:
1. This is not the only way to go from IT/operations to DevOps.
Nor is it the definitive best way, but it is _my_way. You may have had a different experience, and your mileage may vary. But this is how I went about it, and while it may not be the most efficient, it’s just how it played out.
2. We’ve all seen this before: “DevOps isn’t a job — it’s a culture!”. Yeah, sure. We get it. Some say DevOps isn’t a real job and that your development and operations teams should just work hand in hand. Whatever you want to say or believe — who really cares. There are people getting paid, and their title is DevOps. So it is what it is. If your company can afford a DevOps engineer, great. If not, start incorporating these philosophies with your current teams.
With that said, this is really for anyone who is in IT and wants to get more involved in software development, web development, or anything more on the production side of things.
Anyway, now with that out of the way, below are the key skills and technologies I focused on to put me on the path to software development.
This is pretty easy if you use a Mac as your daily driver. Since Macs are Unix-based, many, if not most, Linux commands can be used on Macs. This is great for when you’re doing Mac administration and you want to script and automate tasks you do daily or SSH into servers and machines to perform support. More on this topic later.
While not always applicable to every DevOps role, learning the LAMP stack helped me understand basic fundamentals of web applications from the operating-system level. We all use apps on a daily basis, but knowing how these main components of web applications work together helped me process what exactly is happening, when, and why.
There are other stacks out there, such as LEMP (Linux, NGINX, MySQL, PHP/Python), and MEAN, but I just went with LAMP because it’s one of the most popular (and I was already familiar with it). The bottom line is, learn how different portions of web applications work.
Whenever someone decides they want to get involved in web or software development, they almost always spend way too much time deciding which language they should focus on. While learning specific languages definitely has its benefits for particular roles, when you are just starting out and want to learn how to develop applications or software, just picking any language and sticking with it is the most important part.
With that being said, I personally think sysadmins and future DevOps engineers should really stick to Python. It’s probably one of the easier languages to learn and use: It’s human friendly, and you’ll find many security tools and frameworks which are written in Python. In reality, it doesn’t matter, though. In my first year of DevOps, I’ve already worked with Ruby, Python, Shell, and even some PHP. Just pick something and stick with it.
While Python is great, as a Mac sysadmin, one thing I took advantage of was Macs being Unix-based and having a terminal. As a Mac sysadmin, I wrote scripts to help configure systems and automate tasks I found repetitive (and also I was lazy and didn’t want to do the same thing over and over).
For instance, I wrote scripts that would create users, install apps, and configure printer settings when on boarding new users. Normally this task would take several hours, but who has time for that? With a Bash script, I could configure five or even 10 machines at once through a tool like Apple Remote Desktop, cutting my onboarding time down to minutes, not hours.
Ansible is an open-source IT automation engine, which can remove drudgery from your work life and will also dramatically improve the scalability, consistency, and reliability of your IT environment. You’re going to want to learn Ansible for provisioning, configuration management, and application testing and deployment.
Once I got to scripting things like user onboarding and application installations, I started combining my scripts with tools like Apple Remote Desktop(ARD) and AutoDMGto automate the imaging of machines. When I discovered Ansible, that combined more of my tasks into one single playbook I could execute. Playbooks are like recipes (think Chef or Puppet) which end points are then configured by.
Vagrant is a tool for building and managing virtual-machine environments in a single workflow. Vagrant provides easy-to-configure, reproducible, and portable work environments.
Need an Ubuntu 18.04 instance for testing? How about a CentOS instance for a staging server? Vagrant gives you a disposable environment and consistent workflow for developing and testing infrastructure management scripts.
Continuous integration (CI) and continuous deployment (CD) is one of the most important parts of DevOps, yet is also one of the most complex to grasp and understand. Jenkins may not be the best tool for CI/CD, but it certainly is one of the most popular and definitely an industry staple, especially being open source.
As an automation tool, Jenkins is used to build, test, and kick off deployments of apps, making it easier for developers to integrate changes and bug fixes to software continuously, eliminating the dreaded “push to production and pray” mantra.
If you are at all serious about DevOps, get to know Jenkins inside and out, as you will be staring at it a lot.
When it comes to cloud infrastructure and services, Amazon Web Services (AWS) is king. AWS helps companies reduce costs, cuts deployment times, and increase operational scale by not needing to worry about server provisioning and physical asset limits. AWS is a must if you are trying to break into DevOps or software development (Azure and Google Cloud both exist but pale in comparison to the market share of AWS).
AWS offers hundreds of services, but it’s important to get to know the core services such as EC2, S3, RDS, Route53, and Lambda.
A good resource for AWS and DevOps projects is right on the AWS website.
The best way to really understand the ins and outs of software development and DevOps is to start your own projects. You can watch YouTube tutorials all day and read Medium posts all night, but until you actually start writing some code, configuring servers, and pushing deployments, what you learn won’t stick with you.
If you’re looking for some project and tutorial ideas, AWS has a great resource right on their site.
Some projects I worked on at home that helped my learning:
- Start with a fresh Ubuntu install and configure a LAMP stack and deploy your own website
- Install and build a Jenkins server, and practice pushing code for deployment
- Create a free AWS account, and start messing around with EC2s, S3 buckets, and other AWS services
- Start building scripts to automate some of your everyday tasks.
- Build scripts that organize files on your desktop by file extension, or build a script that moves files from one location to another automatically
I spent five years in IT, and I learned a lot. But if I had known what I just went over, I could’ve cut my software-development journey in half and reduced the time to learn tremendously.
Good luck, and keep coding!
Jovan is a web developer and DevOps engineer who loves tech, automation, movies, and video games. Visit his site at www.jovanshernandez.com
This post was featured on Better Programming