Note: the following is opinionated.
Every DevOps Engineer should have a deep understanding of at least one operating system and if you have the option to choose then I would say it should definitely be Linux as I believe it’s a requirement of at least 90% of the DevOps jobs postings out there. In addition, Linux is almost integral part of any sub-area or domain in DevOps like Cloud, Containers, etc.
Usually, the followup question is “How extensive should my knowledge be?” Out of all the DevOps skills, I would say this, along with coding, should be your strongest skills. Be familiar with OS processes, debugging tools, filesystem, networking, … know your operating system, understand how it works, how to troubleshoot issues, etc.
Not long ago, I’ve created a list of Linux resources right here. There are some good sites there that you can use for learning more about Linux.
My personal belief is that any DevOps engineer should know programming, at least to some degree. Having this skill you can automate manual processes, improve some of the open source tools you are using today or build new tools & projects to provide a solution to existing problems. Knowing how to code = a lot of power.
When it comes to interviews you’ll notice that the level of knowledge very much depends on the company or position you are interviewing for. Some will require you just to be able to write simple scripts while others will deep dive into complex algorithms and data structures.
The best way to practice this skill is by doing some actual coding - scripts, online challenges, CLI tools, web applications, … just code :)
Also, the following is probably clear to most people but let’s still clarify it: when given the chance to choose any language for answering coding tasks/questions, choose the one you have experience with! Some candidates prefer to choose the language they think the company is using and this is a huge mistake since giving the right answer is always better than a wrong answer, no matter which language you have used :)
I recommend the following sites for practicing coding:
Starting your own project is also a good idea. More on that later on.
This is also an important aspect of DevOps. You should be able to describe how to design different systems, workflows, and architectures. Also, the scale is an important aspect of that. A design which might work for a dozen of hosts or X amount of data, will not necessarily work well with bigger scale.
Some ideas for you to explore:
In general, you should be able to describe some designs, projects, architectures, … you performed.
Some interviews will focus on specific tools or technologies. Which tools? this is mainly based on a combination of what you mentioned in your C.V & those that are mentioned in the job posting and used in the company. Here are some questions I believe anyone should know to answer regarding the tools he/she is familiar with:
Let’s deep dive into practical preparation steps
This is a very common way to interview today for DevOps roles. The candidate is given a task which represents a common task of DevOps Engineers or a piece of common knowledge and the candidate has several hours or days to accomplish the task.
This is a great way to prepare for interviews and I recommend to try it out before actually interviewing. How? Take requirements from job posts and convert them into scenarios. Let’s see an example:
“Knowledge in CI/CD” -> Scenario: create a CI/CD pipeline for a project.
At this point, some people ask: “but what project?” and the answer is: what about GitHub? it has only 9125912851285192 projects…and a free way to set up CI to any of them (also a great way to learn how to collaborate with others :) )
Let’s convert another scenario:
“Experience with provisioning servers” -> Scenario: provision a server (to make it more interesting: create a web server).
And the last example:
“Experience with scripting” -> Scenario: write a script. Don’t waste too much time thinking “what script should I write?”. Simply automate something you are doing manually or even implement your own version of common small utils.
Starting a DevOps project is a good idea because:
Same here, don’t overthink what your project should be about. Just go and build something :)
Make a sample list of interview questions on various topics/areas like technical, company, role, … and try to answer them. See if you can manage to answer them in a fluent, detailed way.
Better yet, ask a good friend/colleague to challenge you with some questions. Your self-awareness might be an obstacle in objective self-review of your knowledge :)
For those who attend technical meetups and conferences, it can be a great opportunity to chat with people from other companies on their interviewing process. But don’t start with it, it can be quite awkward. Say at least hello first… (:
Doing so can give you a lot of information on what to expect from an interview at some companies or how to better prepare.
It may sound trivial but the idea here is simple: be ready to answer any question regarding any line you included in your resume. Sometimes candidates surprised when they are asked on a skill or line which seems to be not related to the position but the simple truth is: if you mentioned something on your resume, it’s only fair to ask you about it.
Be familiar with the company you are interviewing at. Some ideas:
From my experience, this is not done by many candidates but it’s one of the best ways to deep dive into topics like operating system, virtualization, scale, distributed systems, etc.
In most cases, you will do fine without reading books but for the AAA interviews (hardest level) you’ll want to read some books and overall if you inspire to be better DevOps Engineer, books (also articles, blog posts) is a great way develop yourself :)
While not a preparation step, you should know that landing DevOps as a first position can be challenging. No, it’s not impossible but still, since DevOps covers many different practices, tools, … it can be quite challenging and also overwhelming for someone to try and achieve it as a first position.
A possible path to becoming a DevOps engineer is to start with actually a different (but related) position and switch from there after 1-2 years or more.
Some ideas:
DevOps interviews can be very different. Some will include design questions, some will focus on coding, others will include short technical questions and you might even have an interview where the interviewer only goes over your resume and discussing your past experience.
There are a couple of things you can do about it so it will be a less overwhelming experience:
Some people tend to look at interviews as a one-way road of “Determining whether a candidate is qualified” but in reality, a candidate should also determine whether the company he/she is interviewing at, is the right place for him/her.
Good luck :)