In this blog article I talk about the challenge of learning multiple technologies and staying up to date with new ones in the DevOps field and how I personally manage not to be overwhelmed by it and make the learning process much easier. π―
I hope sharing my experience and tips on this topic will be useful for some of you π
This is the written version of my new youtube video βοΈ π
Why it's overwhelming π
As a DevOps engineer you need to learn so many tools to even start your job as a Junior DevOps engineer. So the minimum entry requirement is already super high. Which is logical, because DevOps is about creating end-to-end processes for the complete software development and deployment and there are many tools involved in creating these processes.
ππΌ More on that here
But in addition to having to learn 5 to 10 technologies right at the beginning, which is you can't just learn them in isolation, but you have to know how to combine them as well how to integrate them together to build those processes.
But it doesn't stop there. To add to this challenge the DevOps space is developing really fast and we see new technologies new concepts emerging all the time so many engineers feel pressure to learn new tools to use in their projects. π€―
So how can you keep an overview and not get too overwhelmed by all this but at the same time still stay up to date and know when a new tool comes up that can actually make your work easier and more efficient or help you and your team in your software development and deployment process. π€
Separate Concepts and Tools
First of all, when we're talking about developments in the DevOps space, there are two main categories:
- the concepts π‘ and
- the tools π
And it's important to separate them. Concepts are the foundational basis of DevOps processes, they are guidelines to how things should be done. Therefore understanding the concepts before learning the tools is super important.
Tools are just means to an end
It's also important to understand that tools are just means to an end. Every tool is there to solve a problem or to serve some purpose. Understanding the concepts helps you know what processes you have, what problems and challenges are in those processes. And when you have that as a basis, then you can start learning the tools that can actually solve those challenges or implement those concepts.
CI/CD Example:
To give you some examples, before learning any DevOps tool you should actually learn the CI/CD concept first:
π What does a CI/CD process look like?
π What challenges does it have?
π What is its purpose? which is to release application
improvements fast and in an automated way to the end users
π What does it include? What steps does it have? Like
building the application, testing, deploying to development, to staging and so on:
And then you learn the tools that implement this concept and help you achieve its goals.
So if you're just getting started in the DevOps field this will be the first step or the first concept to learn.
ππΌ Here a video exactly on the topic that you can check out
Infrastructure as Code Example:
Another example would be, before learning any Infrastructure as Code tool, you should learn the Infrastructure as Code concept first. Again asking yourself:
- Why is it needed?
- What is its purpose? Like doing manual work versus automated code for infrastructure provisioning, because manual work is more effort. It has more mistakes, it is less transparent and so on.
And also understand what are the challenges of the Infrastructure as Code concept and then again you learn the tools that implement these concepts and you also understand how these different tools address those challenges.
So now when you're learning DevOps tools or you know a bunch of them already and the new tool comes up, your first question to challenge that technology, is to understand what problem does it actually solve and is that problem relevant for you? So you have a big picture of the concepts and the DevOps processes, because you learned the concepts first, so now you can easily fit each tool into that big picture by just understanding the main purpose of the tool on a high level. π
Use Cases - What problems does it solve? π€
So when I start learning a new tool, the first thing I want to find out is, not the cool features that it has or the cool UI that it provides or that it can integrate with 100 other technologies in the ecosystem or that it's super cloud native, Kubernetes native with automated workflow or other fancy stuff π, but instead my first question is what problem or problems does it solve and where does it fit on the big picture of DevOps. π― The simpler the answer, the better.
And there are tools that solve one main problem, but there are also tools that solve multiple problems. In which case I want to find out, which one of those problems are the most important, the main ones, because a tool is usually good at 1 or 2 things and the rest of the use cases are additional bonus features. So in this step I investigate the use cases of the tool.
Once the problem is clear, then you can evaluate and measure how important or relevant that problem is to decide, whether you want to dig into that tool deeper and basically learn more about it.
Also for established tools
And for already established tools, like Kubernetes, Docker, Terraform and so on, which you anyways have to learn, it's still the first step. Because you may know that everyone is using Kubernetes and Docker, but you may not know why π€·π»ββοΈ and that's the first thing you should understand and find out when approaching any new technology.
How does the tool work? π§
After that you can dive in the 'how the tool solves that problem'. There are many tools that address the same issue but in different ways.
So if you are learning an Infrastructure as Code tool like Terraform, you should find out how it does its job, like:
Terraform uses state management
- It has modules and providers
- It uses declarative approach
- It has a command line interface with its own commands
- How it connects to the cloud platforms that you want to provision infrastructure on
- And also how does it compare to alternative tools that you may already know about
So you learn about the core concept of the tool itself on a high level overview.
Hands-On Practice with realistic use cases π©βπ»
Once
β
I understand the problem and the use cases of the tool,
β
now I know why I'm even learning it,
β
I also understand how it works theoretically
β
so i know more or less how I could integrate it into my existing workflow processes.
Now it's time to get started and actually use the tool, because the confidence comes from practice.
Learning with real use cases π
And here is a super important thing to understand about practicing a tool hands-on. You should always practice with an actual example use case, something you can actually apply in real life projects.
So the way I do it is, I first define the actual simple, but realistic use case with the tool, because starting with hands-on practice without an example use case can be demotivating and confusing.
Let me give you some examples:
1) Docker Example π³
If you want to learn how to use Docker, just take a simple application and dockerize it with Dockerfile to learn how this process works. Then think about how you can build and run this dockerized application. By implementing these simple steps you will actually learn much more than just randomly learning some concepts about the tool through the official documentation or some blog articles.
So you create a use case like, I have a basic Node.js application:
π I dockerize it
π I build an image
π Push it to the repository
π Then I run it and test that the application is accessible
And for each step you can learn how to do it and what are the Docker concepts related to implementing those steps π
Later you can expand that use case. Like you want to add a database connection to your dockerized Node.js application and you want to run multiple Docker containers. So you learn about Docker Compose and how to use it π
2) Kubernetes Example
Another example would be, if you're learning Kubernetes. Again think of a simple use case, like you already have a dockerized application with 2 other services. So you want to deploy all of them in Kubernetes with multiple replicas.
By doing just that one simple use case, you will already learn so much about how Kubernetes works and how to deploy applications in it and again you can expand on that use case and add more steps. π
Resources to learn from π
Now of course you need some resources to be able to learn how to do this, right? I personally go to the official documentation or blog articles and video tutorials to learn how to do each step individually. So specifically on that topic, because it's much easier to find out resources on specific individual steps, than just learning about the whole
setup.
And while I'm implementing that individual step, I also learn all the concepts related to that on the way or find tutorials and online courses, like ours, where the instructor guides you exactly through this kind of simple but, realistic use case that you can follow along:
π FREE Docker course
π FREE Kubernetes course
And again you can expand on that finding more advanced use cases at your work or just by yourself and trying to implement those as well.
Patience while learning π
Now there is another super important thing I want to point out, when learning the basics of a tool. Especially if it's a tool like Kubernetes or Docker that you know you will definitely need long term in your DevOps career and it is to: have patience while learning. So take your time β° when learning the foundational concepts of the tool in order to avoid leaving any knowledge gaps and trust me it always pays off at the end, because building on a good foundational knowledge is way easier, because you always have reference knowledge for new stuff and the more you learn the more things make sense, the things just click more and learning new stuff becomes more and more easier.
In comparison if you rush into things ππΎ, because you don't have patience or you don't have time without really understanding the main concepts and learning things kind of chaotically with lots of knowledge gaps, you may actually get more and more confused if you just add stuff to it. So learning new things may actually become more challenging. π€―
Embrace lifelong learning π
As an IT professional, learning never stops, because the tech world is rapidly changing:
- new versions of the existing tools are being released
- as well as new tools are being developed all the time
So with the above techniques that I mentioned you will have a good foundation for quickly evaluating new tools, whether they are relevant for you and worth learning but also if you have a good understanding of a specific tool, you can easily learn the new features of that tool as well.
So it's also a mindset of lifelong continuous learning. βΎ
How to stay up to date? π―
Finally you of course need to be aware when a new version of a popular tool gets released or a new technology is becoming more mainstream and popular so you have to adopt that.
For that you also have many ways to stay up to date with industry developments, like:
- π you can follow some industry peers on social media accounts or blog platforms that basically post about these kind of new developments
- π₯ you can join DevOps communities either online or offline communities, where people exchange this kind of information
- π¬ or you can also subscribe to Youtube channels like ours, but also many other channels that make really great videos on DevOps trends as well
- and much more ways like podcasts π€, newsletters π© and so on.
If you're interested, you will find a way to stay up to date that suits you.
How are you tackling this challenge? ππ½ββοΈ
Now I hope sharing my experience and tips on this topic was useful for you. π Please share below how you are tackling this challenge and generally share your experiences how do you keep up with technology developments and what are some of your tips on that? π€
Like, share and follow me π for more content:
Top comments (6)
I have been learning Web3 for a couple of months as I want to build games and social media on blockchain, thats why I am at DEVto as I have learnt so much already but I wish I read this post when I started, it could of saved me a lot of time but I have enjoyed my journey so far and thank you for your post :):):).
Thanks, this is really interesting way to learn these tools. I struggle with CI/CD at the moment
Love this Nana!
I like the use case based learning approach, rather than random videos. π
It is similar to how we learn so much on the actual job.
PS: I wrote this piece on the principles of a DevOps engineer for anyone that cares to be successful in DevOps
dev.to/ileriayo/want-to-become-a-s...
This post is just great.
Nana
You very fun
So where is a part telling us How to not being overwhelmed ?