Disclaimer: The article reflects my thoughts and understanding - others may disagree with the content 🙏🏽
What is DevOps (In my words):
- A cross-functional mindset that makes your team more agile
- The practice/culture to remove the barrier between developers (who develop apps, write code, are responsible for implementing feature requests, bug fixing, etc.) and operators (who deploy those apps, manage IT infrastructure/servers, and are responsible for uptime, security, stability, scalability, etc.)
- Collaboration between operators, system administrators, DB administrators, developers, testers, etc.
- A movement that essentially prevents people from saying "but it works on my localhost"
How to become a DevOps guy - a roadmap? (from a technical standpoint):
ℹ️ I have compiled the list in an order that I would follow if I am just starting
- Computer Programming (any language will do - primarily, you should be able to write scripts)
- Linux/Unix/Posix Compliant OS (get comfortable with it)
- Basics of Computer Networking
- Containerization (Docker, Podman, CRI-o, etc. - try to go for OCI compliant one)
- Container Orchestration (Docker Swarm, Kubernetes, Mesos, .etc)
- Cloud Platform (AWS, Azure, GCP, etc. - one important point here is that these cloud providers have so many products and it is assumed that you should be good in the ones that are needed in your workflow. For example, it is good to know how AWS Lex works, but it's not needed to become a DevOps engineer 🤷🏽♂️)
- Continuous Integration/Continous Deployment/Continous Delivery - CI/CD (CircleCI, Github Actions, Bitbucket Pipelines, Gitlab CI/CD, Jenkins, AWS Code Build, AWS Code Pipeline, GCP Cloud Build, .etc)
- Automation/Infrastructure as a Code or IaC (Terraform, Pulumi, Ansible, Chef, Puppet, Salt, Bamboo, .etc)
You don't necessarily need to learn all of the available tools/services in a given category. For example, in the Cloud Platform section, the three big cloud providers out there have the following managed services for Kubernetes:
Knowing more than one is desirable but not a requirement. I believe if you can deploy on one platform you should be able to deploy on the other as well.
Similarly in IaC, I would suggest you pick the ones that you generally enjoy working with or your potential employer/client is using.
Once you are done with the list your basics are completed and you are ready to take on DevOps engineer role. You will also discover new tools as well along the way, like:
Helm (Kubernetes manager), Containerd (container runtime just like Docker, CRI-o), Packer (machine image builder for multiple platforms), Vagrant (headless virtualization), Prometheus (monitoring), Grafana (data visualization like Tableau, AWS Quicksight, .etc), Envoy (proxy like HA, Nginx, etc.), meshes (AWS Mesh, Istio, .etc) ....and many more 🤯 (so just don't be afraid, once your basics are strong you can give any and every tool a try and see if you enjoy it and if it's improving your workflow or it's just hype)