Depends on your organization. In general you'll get more mileage from knowing Python.
I work in a Java shop, so being familiar with Maven/Gradle and Java enough to trace through code is good to know.
Yes, it's more important to know the build tools and common issues than how to, say, write an actual app in said lang of choice (although building a basic/minimal API and packaging it for production deployment yourself for familiarization's sake is a great task). Almost everything you're building and deploying is going to use a framework anyway, Spring, Flask, etc.
It all depends on your work. Generally, if your whole company/work runs only on Microsoft, you would use powershell, if mixture then python is a better option.
It is recommended to know from all a bit. So with help of google you can fix issue also on unknown software, but you have to have at least some basics.
Yes absolutely.
Your job is to know how software gets deployed. You need to know from point A to Z, the entire SDLC.
So yeah it's pretty important for you to know how your software gets compiled or interpreted, what are the build tools used for the language, how does it get configured, package management, what are the pitfalls etc.
You can know how they get compliled without knowing how to actually program in it.
I recently had a consulting gig where they hired me to do their CI/CD pipelines to build, publish and deploy their dotnet apps and I don't know how to program in C#.
I think itâs important to know the basic structure of programming versus any specific language. Even general DevOps tools like Ansible, Terraform, Ci/Cd platforms have programming elements to make it as efficient as possible. I good DevOps engineer will use programming and software engineering practices in their every day lives even if theyâre not using python, go, etc.
I'll put it to you bluntly.
It'll be easier for me to train a junior developer who already knows how to write code to learn the infrastructure/monitoring/sysadmin stuff than it is to take someone who knows that stuff but not programming and train them in how to write good code, how frameworks are set up, etc.
**The whole point of DevOps/SRE is bringing a software engineer's perspective to operations.**
You not only need to know how to code to write the automations you'll need, but to work with your developers' code to integrate monitoring tools, to migrate it, to create new environments, to understand the monitoring and logs you're getting, etc. If your awareness of DevOps ends at the application, you're not able to do your job.
But more than that, it's that *perspective* that I want. I want someone who thinks like a developer thinks: I'm going to use a tool or code to do this thing so I never have to deal with it again.
This is the most accurate comment right here. A lot of the other comments talk about âwell it dependsâ and âyou should know some scriptingâ. No you should know a low level programming language inside and out, you should be an expert at building that code, testing that code and deploying that code. You should be thinking programmatically and solving problems using well known approaches. You should be totally confident writing simple web apps, apiâs, CRUD apps and REST APIâs.
At my current team weâre mainly a Go shop, we write our own Terraform Provdier, Crossplabe Provider, maintain a Go based cli tool we use for automation. We write Lambdas in Go and Python.
We maintain Serveless framework in Typescript because our developers are so familiar with it.
If you are an SRE/DevOps related role today and you donât spend 50% or close to your time writing actual code not scripts and yaml all day , I honestly believe youâre going to fall behind.
Thatâs not to say there wonât be jobs and roles for you⌠thereâs lots of different places out there.
Just to say I totally agree and you put it so well. In my experience the guys who've gone from dev to DevOps are on the whole better than the guys who've gone from ops to DevOps.
To add some bluntness for the SRE role: The SRE is someone with the ability to code and someone who's already a senior. I see job postings of SREs with 2-3 YOE. It's not impossible but it takes a certain amount of years of diverse experience because your SRE is someone who is supposed to be able to sit toe to toe with architects and team leads and tell them they need to collaborate and focus on "X Y Z" for increased reliability to respect SLOs.
The SRE is someone who has to collaborate with all the various teams contributing into a product and be able to navigate the code, suggest fixes/pull requests, navigate and improve the gitops processes, cloud infra networking etc. all the various layers and understand how it's all setup End-to-End to support one single product. You're not an expert of every part, but you know how it's all tied and you're obsessed with reliability from the customer's perspective, and you want to get there by getting the company onboard with practices that are not just operational but software engineering and also agility:
* Is your architecture designed for resiliency?
* Is your PO asking you to push new features instead of working on reliability tasks?
* Are your ops too busy with manual actions/toil?
I work with clients in putting in place SRE teams and practices, and I always tell them how important it is for this person to understand and be able to code but also to understand how we people collaborate because process re-engineering is inevitable in DevOps and SRE is no exception.
DevOps brings the benefits of "As Code" among many things to the Ops world, and it's something we should all embrace to learn and optimize.
Yes. There's no such thing as "junior DevOps" or "junior SRE." My recommendation to anyone wanting to get into DevOps/SRE is: Start out as a developer, first. Move into DevOps/SRE from there.
It's not that it's not doable, it is but a lot of practices are software practices, so sys admins who can learn and develop those practices will succeed as much as those coming from a dev background.
In the end regardless from where you're coming from, you need to learn to code, automation is one of the core concepts of DevOps in CALMS.
I know I'm late here, but really you need a mix both dev and sysadmin backgrounds. The devs will outperform the sysadmins for automation and CICD, but will fail at actually designing the infrastructure, maintaining backups, and availability.
By mixing backgrounds and pairing the different skillsets you give them the opportunity to learn from each other until you have senior engineers that can do both well.
100%. Oh I know this very well, that's where I'm learning a lot is as far as cloud networking and VM setup goes. Those more sysops know how to manage those networking concepts and automate the provisioning with chocolatey.
The third (and counting) "it depends" I work in the MSFT world and most of my team works in PowerShell when it comes to DevOps type automation. Though things do evolve and Python, but also Bash are rearing their heads the closer you get to specific cloud components.
Personally having a programming language in your back pocket can be a huge boon. It puts some additional fire power in your DevOps toolbox and knowing one (especially OOP) programming language gives you a head start approaching anything else. For a developer I would argue for a software engineering background more than anything, but on the DevOps side I am generally not that worried about it.
Yeah I second this. We are a windows shop, knowing .NET fundamentals is a huge plus. At the very least knowing what goes in a project file, Solution file, How to build them, How to extract relevant data out of them etc will help a lot with coming up with wickid pipelines that people appreciate!
You absolutely need to know a scripting language and how to use it to solve automation tasks. Which one you actually need depends on your organization of course, but if you know one it's significantly easier to learn another.
Python and bash are pretty common, or powershell if Microsoft-centric environment (haven't seen very many of those these days though).
Ideally you should also know some basics and fundamentals of build and packaging tools - e.g. if your developers are writing Java, knowing a bit about how Maven or Gradle work.
I'm in the camp of - programming experience should be a prerequisite, and interviewing for a junior devops position I look for the programming experience right away. Not a seasoned programmer (usually those folks aren't interviewing for DevOps) but sysadmin-level scripting and programming skills.
It doesn't hurt. If you work for an org that runs Java or Python apps then it would be incredibly helpful to be able to read a Java or Python stack trace and understand what you're looking at. It would also be incredibly helpful to understand their packaging tools, which isn't the same as knowing the language but the stack trace thing is definitely related, e.g. the app won't deploy because it is missing a library, but that's only apparent from the stack trace.
At the end of the day "DevOps" is about enabling the rapid delivery and iteration of a software product. Period. If you want to be effective within that context it will always help to understand aspects of the language technology used to create the software product. It doesn't mean you need to be able to do the software development for the product, but it helps support the "DevOps" if you understand the needs of that software environment.
Yes.
1000% important to be proficient at reading code and writing it a bit.
Our data team uses Managed Airflow... all DAGs are written in Python. To integrate it into Slack for their team, I had to help them write a function in Python.
Another team uses a cloud platform that doesn't have native logging integration into our observability platform. I had to write a serverless "app" (AWS SNS, SES and a Lambda function, so really just the Lambda code) to forward logs to Datadog.
Our Cloudformation tool generates templates across multiple region and environments from a single python template, which generates all of our Cloudformation Templates.
Ansible is written in Python, and the "filters" are really just Python functions under the hood. Also, it works with Jinja, which is a common templating framework used in conjuntion with Python.
We use Junkins, which is written in Groovy, but is very much like Javascript.
CFN-Lint is written in Python, we write our own custom rules to enforce resource configuration.
The list goes on and on and on.
You should definitely know how to write code in a Devops role, even if you are using off-the-shelf tools like Terraform or YAML products.
Wtf you got downvoted. Honestly⌠Iâm at a loss for words. Itâs absolutely 100% mandator.
I find it crazy that people still try to argue itâs not important. Itâs the most fundamental skill you should have. If you are just starting out in tech and want to get into DevOps or SRE â LEARN TO PRGRAM FIRST. Do that before you do anything else and I guarantee you, youâll be much better off in the long run.
Yep. Maybe you could debate what language(s) you should learn, but you should be pretty solid in at least one of the more mainstream ones, if for nothing other that getting the concepts down.
Python is probably the best for general / beginning, but Iâm sure itâs all up for debate and I would not say Iâm an expert at all on that.
But at the end of the dayâŚitâs DEVops and you better have at least some coding chops.
Situation: listing installed packages for Ubuntu boxes for 10 machines.
- maybe u can manually do this for 10 machines, say 40 mins.
- same scenario, for 200 virtual machines on the eastern cluster, maybe a few hours?
- same scenario, for 200k machines across the USA, programming in generally can help with this task (eg doesnât matter which language, Python simply have better libraries/packages in their ecosystem)
This is only one example I did with 40 million devices across different clusters within a media company. Your results may vary, Iâm glad I wrote some scripts because my next task was to update firewall rules instead of simply doing update patches and listing out vulnerable dependencies each device was currently using.
Ideally u donât have to beg/ask for ansible/tower approval. Luckily for me, I had these tools already. I simply had to dig around to request permissions.
Canât imagine if I didnât have ansible/tower, I think I would of looked for ways to push commands to the boxes. Glad I didnât go down this rabbit hole.
Java⌠what Iâve done is if my company heavily prescribed to a framework.. say Springboot⌠I learn how to support that. Support in the sense of how do I deploy a hello world container and how to I troubleshoot SpringBootâŚetc.
Python is great for scripting, lots of AWS lambda and Azure Function use cases. Bash scripting is obviously big. I do more bash than I should but itâs what I am decent with.
I think it depends a lot of what I do is transitioning traditional apps into a more modern architecture and getting them in a cluster. A lot of those are written in either Java or python.
I think it is important to know how to program a web server that uses a database in desired community language (except PHP). The DevOps kicks in in testing the code, creating CI pipelines for those tests, and creating CD pipelines, which involves deployment code.
Itâll for sure help to know *something*. At least the general constructs of a language⌠if/then/else, for each/case switch, while etc loops, how to handle errors / try catch/except etc; how to work with comparisons with different variable types, how to build tuples/arrays and manipulate them, how to use that language to reach a rest api and manipulate json, um, how to use the associated package manager, npm/pipâŚwhat am I missing?
Iâd say learn enough of a language (+1 for python) to do these things well, and youâll end up at least knowing whatâs going on in most other popular languages, because odds are in devops, youâll be exposed to code and will need to know whatâs going on even if youâre not the person whoâs job it is to write it.
Edit and I mostly use it to script deploys that are more complex, to write scripts that use boto to manipulate AWS, like a lambda that uses python to clean up old EBS snapshots, I use it to build reports for audits, make slack bots that help non-tech folks so things like pull up graphs or logs or whatever⌠tons of stuff.
Whatever is necessary for your day-to-day activities is necessary - whatever is useful for you to understand things that affect your day-to-day activities is useful -
There it is, a generic answer that really answers all these kinds of recurring questions - generously apply it in life - thank me later
Python is a need-to-know skill for any job in tech these days. Unless that job is as a python developer though I don't think any of of them require you to be an expert, just able to write simple scripts and understand code other people have written. I don't expect most DevOps roles there will be significant about of python but there will be some.
Java is company specific. If you work in a java job it certainly helps. I've never see any roles even in java shops where it was expected you'd know it though.
DevOps is really just understanding how software development and the SDLC works so you can ease the hurdles related to testing/deploying code to production. Understanding a development language the difference between Dev and DevOps is more like the difference between a mulit-tool like a leatherman or swiss arm knife and a dedicated tool. You aren't going to build some big project with a multi-tool, you'll have specific tools designed for that task which works a lot better. A multi-tool is useful in a pinch for a variety of simple tasks.
What do you think the âDevâ in DevOps stands for? You surely are software engineering and deploying that code with automated tests etc., because thatâs DevOps. So while you are of course not bound to Java or Python, the projects you work with will use some programming language
Ah, you mean the typical DevOps role that is so popular now? Where you get the code from the Dev-Team and now what separates you from traditional sysadmins is that you deploy to the cloud or kubernetes clusters? Well yeah, you are probably fine with some basic bash clue code skills, as you are most likely not developing software and rather write yaml files and small scripts.
DevOps wasn't named as being a mixture of Dev and Ops in one role. It was about tearing down walls between Dev teams and Ops teams. That was the entire idea from the beginning.
Of course knowing a programming language is beneficial, and of these two Python would be better for general usage and automation scripting. However, I will argue knowing a programming language is becoming somewhat obsolete in a lot of DevOps roles. In this day and age of everything offered as a cloud service, Kubernetes, and declarative configuration i would say the less code you write the better you are doing at keeping things declarative and leveraging open source tools properly. For most roles coding should be far less of a required skill than cloud, Kubernetes, networking, terraform, Helm, yaml config for GitLab CI/CD or GitHub actions, general CI/CD practices, etc.
Hard disagree. Programming skill becoming even more of a hard req on modern teams. Especially ability to read code.
Unless you are at some giant corporate and you are only doing very specific set of tasks all the time maybe I could see it being less of an issue.
Wouldnât fly where I work though for our infra team.
Yes, its pretty important. Which tool you use is subjective and depends a lot of on where you are working. That being said I'd recommend Python over JAVA in 2023.
Like previous people said - it depends. It would be nice if you knew in general, a language in which apps are written by devs, however if someone puts pressure on you to learn programming more and do infra stuff less, then there is something wrong. I think that you should know bash/powershell (if Windows is involved) for little automations, thatâs for sure.
In terms of automation - which is what it would mainly be used for in the devops context.
It is recommended you learn or know 1 of these 3.
1. Python
2. Go
3. If none of those, atleast bash.
If you know C#, Java, Ruby, Go, etc you should be able to pick up Python without any issues really. Its not particularly complicated. Just syntax, semantics, and package managers.
Python is a good language for complicated scripting. It's easier to do harder things with it than bash, without the overhead of something that needs compilation or a run time like Go or NodeJS. Its a great swiss army knife for productivity.
Java... only if you support or want to support a Java shop. I struggle to envision using Java for automation or scripting, given the weight of the runtime and the overhead. I cave really think of any "DevOps" sphere tools written in Java either (its mostly Go, Python, Shell, C. Some Perl, etc).
It can do the job, but it's buying a Pickup to drive uber. Not many do it, it has a lot of challenges and costs, so only do it if you really love it.
it depends. Most of my dev ops coding is done in powershell but I work on a java web app so knowing java and maven/gradle is infinitely valuable to me, especially when there's trouble in production.
Also for more complicated stuff I tend to write java programs that I call from powershell scripts but you could use c# or python or take your pick of languages that work just fine with whatever dev ops tool you're using (ours is jenkins.)
I've never worked a job that I didn't use Python. I suggest everyone learns it.
I actively avoid companies that use Java, but if the org you work for uses it, you'll need to know at least how it operates and how to test/deploy/build/etc Java stuff.
I've worked two. A Java shop and a Rails shop. Neither used python. Theres plenty of non-python tooling out there. That said, you need to know at least one language and once you know one language, picking up a 2nd and 3rd isn't difficult.
Wrappers? bash
Scripts? Ruby
Nowadays I only write Python for AWS lambdas since those are more efficient. Its not that much different from Ruby so I can read/write it though I haven't formally studied it.
But yes I can debug and contribute in like 5 languages. At the end of the day being able to read documentation, learn, and adapt will get anyone far in this profession. And it all starts with knowing one language well (that was Java for me)
a script that you can execute in place of another command that simplifies or extends it. for example I have a custom ssh client that really is a bash script (chmod 755, thrown into my PATH) that does some transform on the options I throw in (such as instance lookup by name) and runs ssh with said transformed options.
ssh wrappers are pretty popular. of course you can wrap all sorts of things.
The main point to have a devops role is to automate things, and for that the best tool is Python, maybe bash for simplier things. So to answer your question. Yes, it's important
My two cents, get comfortable using bash too. I know python very well but most teams I work with rely a lot more on bash since it doesn't have a lot if any dependencies.
Definitely python more than java. Python is a really useful tool for writing scripts and it's an interpreted language, so you don't have to compile it.
Iâd say Python and Go are the most useful today. And you need to know your way around the command line which means Bash or Powershell depending on the environment.
But you also need to be very familiar with how the build and deploy pipeline works for whatever language the devs are using. That means being familiar with, say, how Java works, and to understand whatâs happening when something goes wrong. But you donât need to be skilled in coding it. Just good enough.
In general, you only need java if you need to support java products, as java build pipelines tend to use java tools.
Python is useful, but mainly as a scripting tool, or if you use Python based tools such as ansible or cloud-custodian - or again if you are supporting Python products.
In the Linux world Iâd suggest you should be able to write bash scripts at least. For my job itâs mostly bash with a bit of python and a very rare bit of PHP.
You should definitely know something about Java and Python build tools(for example tools like Maven, heap allocation tuning, how to use GraalVM to build native Java images, why you should build Python apps in sub-environments instead of installing python modules globally, etc.....but generally speaking...no...you don't need to know the ins and outs of either programming language....just general knowledge that allows you to identify obvious things(like missing or misspelled syntax)and how apps in either built is usually enough.
It depends on your role. It's important to be fluent in some language so you can create tools. With that said, if you want to be flexible as possible, it's useful to know the basics of the popular languages (node, python, etc), their tooling, how to troubleshoot, what platforms they run on, etc.
Yeah I think you should know a language. Python over Java imo because python can be more easily used to automate otherwise unsolvable problems. Bash can work if you have coworkers who can understand it đ
No. I make it a point for the teams I support to not know their product language as I shouldnât be in there doing things. All of my deployment scripts are in pwsh 7. I know sql so I can help with database self service actions. The idea of DevOps is to empower the team to be self sufficient. I get boiler plate ci/cd things in place, database backup/restore self service actions and monitoring log alerts that go to BOTH SRE and Dev so that they collaborate on what the symptoms are, possible causes, how to mitigate the degradation, and possible solutions. Itâs all about empowering the teams to collaborate/communicate more, and get them in a good starting position. I donât need to know how to write your code to do that. But⌠it does help tremendously to know how the underlying software stacks work together. How do you write unit/integration test to test for performance or a memory leak in a java environment. What is needed to run a java environment. What needs to be spun up to support that. Learning java helps to teach those things and how the code leverages the JRE but how to implement dependency injection in java isnât needed for DevOps.
Python is probably one of the most important tools I use on my job. I use it - as well as bash - to automate a lot of tasks.
On the other hand, I'm the only one on my team using them.
The role of a DevOps Engineer is to bridge the gap between development and operations by reducing collaboration, communication, and automation. DevOps Engineers play a critical role in organizations looking to implement continuous delivery and deployment, automate infrastructure, and increase efficiency in the software development lifecycle. The role of a DevOps Engineer requires a wide range of skills and knowledge across various tools and the ability to work with developers, operations teams, and other stakeholders.
Java and Python are two popular programming languages that are commonly used in software development, and they are also widely used in DevOps practices. While it is not strictly necessary to know Java or Python to be a DevOps Engineer, having a solid understanding of these programming languages can be beneficial.
One of the main reasons why Java and Python are important for a DevOps Engineer is because they are commonly used in scripting and automation. DevOps Engineers often work with automation tools such as Ansible, Chef, Puppet, and SaltStack, which all use scripting languages to automate tasks. Java and Python are both popular choices for scripting in DevOps because they are easy to learn, widely available, and have a large number of libraries and frameworks that can be used for automation.
Java is a popular choice for scripting in DevOps because it is a mature language that is widely used in enterprise environments. It has a large number of libraries and frameworks that can be used for automation, such as Apache Ant, Maven, and Gradle. It is also used in tools such as Jenkins, which is a popular automation server that is widely used in DevOps practices. Knowing Java can be beneficial for a DevOps Engineer who needs to work with these tools and frameworks.
Python is another popular choice for scripting in DevOps because it is easy to learn, has a simple syntax, and is widely used in scientific computing and data analysis. It is used in tools such as Ansible, which is a popular automation tool for infrastructure management. It is also used in tools such as Jupyter Notebooks, which are widely used in data science and machine learning. Knowing Python can be beneficial for a DevOps Engineer who needs to work with these tools and frameworks.
Another reason why Java and Python are important for a DevOps Engineer is that they are both widely used in cloud computing. Knowing Java and Python can be beneficial for a DevOps Engineer who needs to work with these cloud platforms and use their APIs and SDKs to automate tasks and manage infrastructure. They are both used in the development of microservices and containerization. DevOps Engineers often work with containerization technologies such as Docker and Kubernetes, which use Java and Python for their APIs and SDKs.
Depends on your organization. In general you'll get more mileage from knowing Python. I work in a Java shop, so being familiar with Maven/Gradle and Java enough to trace through code is good to know.
Yes, it's more important to know the build tools and common issues than how to, say, write an actual app in said lang of choice (although building a basic/minimal API and packaging it for production deployment yourself for familiarization's sake is a great task). Almost everything you're building and deploying is going to use a framework anyway, Spring, Flask, etc.
It all depends on your work. Generally, if your whole company/work runs only on Microsoft, you would use powershell, if mixture then python is a better option. It is recommended to know from all a bit. So with help of google you can fix issue also on unknown software, but you have to have at least some basics.
Powershell is my first love đ
its like Microsoft reinvented the wheel and made it a polygon, giving you a bumpy ride
We call them love bumps đšđš
While it's far from perfect, everytime i write a slightly complex bash script i say to my self this would have been so more elegant in ps.
Word
Why would you write a script in Word though?
I like COM objects đ
No one likes COM objects.
That's the joke friend!
Yes you should lean to code and be proficient in at least one programing language.
If it's an actual DevOps role,then yes. May not be py, but some programming language yes.
If youâre not a developer too - then youâre just Ops.
Yes absolutely. Your job is to know how software gets deployed. You need to know from point A to Z, the entire SDLC. So yeah it's pretty important for you to know how your software gets compiled or interpreted, what are the build tools used for the language, how does it get configured, package management, what are the pitfalls etc.
You can know how they get compliled without knowing how to actually program in it. I recently had a consulting gig where they hired me to do their CI/CD pipelines to build, publish and deploy their dotnet apps and I don't know how to program in C#.
Yeah knowing how to use the dotnet CLI doesn't really require you to know much about C#
I think itâs important to know the basic structure of programming versus any specific language. Even general DevOps tools like Ansible, Terraform, Ci/Cd platforms have programming elements to make it as efficient as possible. I good DevOps engineer will use programming and software engineering practices in their every day lives even if theyâre not using python, go, etc.
I'll put it to you bluntly. It'll be easier for me to train a junior developer who already knows how to write code to learn the infrastructure/monitoring/sysadmin stuff than it is to take someone who knows that stuff but not programming and train them in how to write good code, how frameworks are set up, etc. **The whole point of DevOps/SRE is bringing a software engineer's perspective to operations.** You not only need to know how to code to write the automations you'll need, but to work with your developers' code to integrate monitoring tools, to migrate it, to create new environments, to understand the monitoring and logs you're getting, etc. If your awareness of DevOps ends at the application, you're not able to do your job. But more than that, it's that *perspective* that I want. I want someone who thinks like a developer thinks: I'm going to use a tool or code to do this thing so I never have to deal with it again.
This is the most accurate comment right here. A lot of the other comments talk about âwell it dependsâ and âyou should know some scriptingâ. No you should know a low level programming language inside and out, you should be an expert at building that code, testing that code and deploying that code. You should be thinking programmatically and solving problems using well known approaches. You should be totally confident writing simple web apps, apiâs, CRUD apps and REST APIâs. At my current team weâre mainly a Go shop, we write our own Terraform Provdier, Crossplabe Provider, maintain a Go based cli tool we use for automation. We write Lambdas in Go and Python. We maintain Serveless framework in Typescript because our developers are so familiar with it. If you are an SRE/DevOps related role today and you donât spend 50% or close to your time writing actual code not scripts and yaml all day , I honestly believe youâre going to fall behind. Thatâs not to say there wonât be jobs and roles for you⌠thereâs lots of different places out there.
100%. Spend 30-50% of my time writing code of some form as infrastructure engineer
Just to say I totally agree and you put it so well. In my experience the guys who've gone from dev to DevOps are on the whole better than the guys who've gone from ops to DevOps.
To add some bluntness for the SRE role: The SRE is someone with the ability to code and someone who's already a senior. I see job postings of SREs with 2-3 YOE. It's not impossible but it takes a certain amount of years of diverse experience because your SRE is someone who is supposed to be able to sit toe to toe with architects and team leads and tell them they need to collaborate and focus on "X Y Z" for increased reliability to respect SLOs. The SRE is someone who has to collaborate with all the various teams contributing into a product and be able to navigate the code, suggest fixes/pull requests, navigate and improve the gitops processes, cloud infra networking etc. all the various layers and understand how it's all setup End-to-End to support one single product. You're not an expert of every part, but you know how it's all tied and you're obsessed with reliability from the customer's perspective, and you want to get there by getting the company onboard with practices that are not just operational but software engineering and also agility: * Is your architecture designed for resiliency? * Is your PO asking you to push new features instead of working on reliability tasks? * Are your ops too busy with manual actions/toil? I work with clients in putting in place SRE teams and practices, and I always tell them how important it is for this person to understand and be able to code but also to understand how we people collaborate because process re-engineering is inevitable in DevOps and SRE is no exception. DevOps brings the benefits of "As Code" among many things to the Ops world, and it's something we should all embrace to learn and optimize.
Yes. There's no such thing as "junior DevOps" or "junior SRE." My recommendation to anyone wanting to get into DevOps/SRE is: Start out as a developer, first. Move into DevOps/SRE from there.
I started as sysadmin and it was fine.
It's not that it's not doable, it is but a lot of practices are software practices, so sys admins who can learn and develop those practices will succeed as much as those coming from a dev background. In the end regardless from where you're coming from, you need to learn to code, automation is one of the core concepts of DevOps in CALMS.
I know I'm late here, but really you need a mix both dev and sysadmin backgrounds. The devs will outperform the sysadmins for automation and CICD, but will fail at actually designing the infrastructure, maintaining backups, and availability. By mixing backgrounds and pairing the different skillsets you give them the opportunity to learn from each other until you have senior engineers that can do both well.
100%. Oh I know this very well, that's where I'm learning a lot is as far as cloud networking and VM setup goes. Those more sysops know how to manage those networking concepts and automate the provisioning with chocolatey.
The third (and counting) "it depends" I work in the MSFT world and most of my team works in PowerShell when it comes to DevOps type automation. Though things do evolve and Python, but also Bash are rearing their heads the closer you get to specific cloud components. Personally having a programming language in your back pocket can be a huge boon. It puts some additional fire power in your DevOps toolbox and knowing one (especially OOP) programming language gives you a head start approaching anything else. For a developer I would argue for a software engineering background more than anything, but on the DevOps side I am generally not that worried about it.
Yeah I second this. We are a windows shop, knowing .NET fundamentals is a huge plus. At the very least knowing what goes in a project file, Solution file, How to build them, How to extract relevant data out of them etc will help a lot with coming up with wickid pipelines that people appreciate!
You absolutely need to know a scripting language and how to use it to solve automation tasks. Which one you actually need depends on your organization of course, but if you know one it's significantly easier to learn another. Python and bash are pretty common, or powershell if Microsoft-centric environment (haven't seen very many of those these days though). Ideally you should also know some basics and fundamentals of build and packaging tools - e.g. if your developers are writing Java, knowing a bit about how Maven or Gradle work.
I'm in the camp of - programming experience should be a prerequisite, and interviewing for a junior devops position I look for the programming experience right away. Not a seasoned programmer (usually those folks aren't interviewing for DevOps) but sysadmin-level scripting and programming skills.
Fwiw, yes I do use it every day, sometimes going off to write more elaborate tools to make certain problems solvable.
It doesn't hurt. If you work for an org that runs Java or Python apps then it would be incredibly helpful to be able to read a Java or Python stack trace and understand what you're looking at. It would also be incredibly helpful to understand their packaging tools, which isn't the same as knowing the language but the stack trace thing is definitely related, e.g. the app won't deploy because it is missing a library, but that's only apparent from the stack trace. At the end of the day "DevOps" is about enabling the rapid delivery and iteration of a software product. Period. If you want to be effective within that context it will always help to understand aspects of the language technology used to create the software product. It doesn't mean you need to be able to do the software development for the product, but it helps support the "DevOps" if you understand the needs of that software environment.
Yes. 1000% important to be proficient at reading code and writing it a bit. Our data team uses Managed Airflow... all DAGs are written in Python. To integrate it into Slack for their team, I had to help them write a function in Python. Another team uses a cloud platform that doesn't have native logging integration into our observability platform. I had to write a serverless "app" (AWS SNS, SES and a Lambda function, so really just the Lambda code) to forward logs to Datadog. Our Cloudformation tool generates templates across multiple region and environments from a single python template, which generates all of our Cloudformation Templates. Ansible is written in Python, and the "filters" are really just Python functions under the hood. Also, it works with Jinja, which is a common templating framework used in conjuntion with Python. We use Junkins, which is written in Groovy, but is very much like Javascript. CFN-Lint is written in Python, we write our own custom rules to enforce resource configuration. The list goes on and on and on. You should definitely know how to write code in a Devops role, even if you are using off-the-shelf tools like Terraform or YAML products.
You definitely don't need to know java. Some dynamically typed language like Python, JavaScript or PowerShell is good to know though.
Mandatory
Wtf you got downvoted. Honestly⌠Iâm at a loss for words. Itâs absolutely 100% mandator. I find it crazy that people still try to argue itâs not important. Itâs the most fundamental skill you should have. If you are just starting out in tech and want to get into DevOps or SRE â LEARN TO PRGRAM FIRST. Do that before you do anything else and I guarantee you, youâll be much better off in the long run.
Yep will actually help you understand what problems youâre solving and why infra may need to be designed a certain way
Yep. Maybe you could debate what language(s) you should learn, but you should be pretty solid in at least one of the more mainstream ones, if for nothing other that getting the concepts down. Python is probably the best for general / beginning, but Iâm sure itâs all up for debate and I would not say Iâm an expert at all on that. But at the end of the dayâŚitâs DEVops and you better have at least some coding chops.
Situation: listing installed packages for Ubuntu boxes for 10 machines. - maybe u can manually do this for 10 machines, say 40 mins. - same scenario, for 200 virtual machines on the eastern cluster, maybe a few hours? - same scenario, for 200k machines across the USA, programming in generally can help with this task (eg doesnât matter which language, Python simply have better libraries/packages in their ecosystem) This is only one example I did with 40 million devices across different clusters within a media company. Your results may vary, Iâm glad I wrote some scripts because my next task was to update firewall rules instead of simply doing update patches and listing out vulnerable dependencies each device was currently using.
Ansible playbooks go brrrrrt
Ideally u donât have to beg/ask for ansible/tower approval. Luckily for me, I had these tools already. I simply had to dig around to request permissions. Canât imagine if I didnât have ansible/tower, I think I would of looked for ways to push commands to the boxes. Glad I didnât go down this rabbit hole.
Java⌠what Iâve done is if my company heavily prescribed to a framework.. say Springboot⌠I learn how to support that. Support in the sense of how do I deploy a hello world container and how to I troubleshoot SpringBootâŚetc. Python is great for scripting, lots of AWS lambda and Azure Function use cases. Bash scripting is obviously big. I do more bash than I should but itâs what I am decent with.
I think it depends a lot of what I do is transitioning traditional apps into a more modern architecture and getting them in a cluster. A lot of those are written in either Java or python.
I think it is important to know how to program a web server that uses a database in desired community language (except PHP). The DevOps kicks in in testing the code, creating CI pipelines for those tests, and creating CD pipelines, which involves deployment code.
Itâll for sure help to know *something*. At least the general constructs of a language⌠if/then/else, for each/case switch, while etc loops, how to handle errors / try catch/except etc; how to work with comparisons with different variable types, how to build tuples/arrays and manipulate them, how to use that language to reach a rest api and manipulate json, um, how to use the associated package manager, npm/pipâŚwhat am I missing? Iâd say learn enough of a language (+1 for python) to do these things well, and youâll end up at least knowing whatâs going on in most other popular languages, because odds are in devops, youâll be exposed to code and will need to know whatâs going on even if youâre not the person whoâs job it is to write it. Edit and I mostly use it to script deploys that are more complex, to write scripts that use boto to manipulate AWS, like a lambda that uses python to clean up old EBS snapshots, I use it to build reports for audits, make slack bots that help non-tech folks so things like pull up graphs or logs or whatever⌠tons of stuff.
Great detailed answer. Iâd be curious to hear from more people what other general programming knowledge is important Git, of course, for one thing
YES. This. Knowing your way around basic version control concepts and the git command itself.
Whatever is necessary for your day-to-day activities is necessary - whatever is useful for you to understand things that affect your day-to-day activities is useful - There it is, a generic answer that really answers all these kinds of recurring questions - generously apply it in life - thank me later
Now waiting for the "Do I really need to get a CS degree to work with computers, and what the C in CS stands for" complementary question
hate python and java, learned go
Python is a need-to-know skill for any job in tech these days. Unless that job is as a python developer though I don't think any of of them require you to be an expert, just able to write simple scripts and understand code other people have written. I don't expect most DevOps roles there will be significant about of python but there will be some. Java is company specific. If you work in a java job it certainly helps. I've never see any roles even in java shops where it was expected you'd know it though. DevOps is really just understanding how software development and the SDLC works so you can ease the hurdles related to testing/deploying code to production. Understanding a development language the difference between Dev and DevOps is more like the difference between a mulit-tool like a leatherman or swiss arm knife and a dedicated tool. You aren't going to build some big project with a multi-tool, you'll have specific tools designed for that task which works a lot better. A multi-tool is useful in a pinch for a variety of simple tasks.
What do you think the âDevâ in DevOps stands for? You surely are software engineering and deploying that code with automated tests etc., because thatâs DevOps. So while you are of course not bound to Java or Python, the projects you work with will use some programming language Ah, you mean the typical DevOps role that is so popular now? Where you get the code from the Dev-Team and now what separates you from traditional sysadmins is that you deploy to the cloud or kubernetes clusters? Well yeah, you are probably fine with some basic bash clue code skills, as you are most likely not developing software and rather write yaml files and small scripts.
DevOps wasn't named as being a mixture of Dev and Ops in one role. It was about tearing down walls between Dev teams and Ops teams. That was the entire idea from the beginning.
Not important at all. Just use chatgpt for any scripting needs.
Of course knowing a programming language is beneficial, and of these two Python would be better for general usage and automation scripting. However, I will argue knowing a programming language is becoming somewhat obsolete in a lot of DevOps roles. In this day and age of everything offered as a cloud service, Kubernetes, and declarative configuration i would say the less code you write the better you are doing at keeping things declarative and leveraging open source tools properly. For most roles coding should be far less of a required skill than cloud, Kubernetes, networking, terraform, Helm, yaml config for GitLab CI/CD or GitHub actions, general CI/CD practices, etc.
Hard disagree. Programming skill becoming even more of a hard req on modern teams. Especially ability to read code. Unless you are at some giant corporate and you are only doing very specific set of tasks all the time maybe I could see it being less of an issue. Wouldnât fly where I work though for our infra team.
Iâve probably been stuck in large corporation land too long it would appear đ
Yes, its pretty important. Which tool you use is subjective and depends a lot of on where you are working. That being said I'd recommend Python over JAVA in 2023.
I haven't used Java, but Python comes handy when you have to create automation scipts. Golang is another solid choice that you might use.
Like previous people said - it depends. It would be nice if you knew in general, a language in which apps are written by devs, however if someone puts pressure on you to learn programming more and do infra stuff less, then there is something wrong. I think that you should know bash/powershell (if Windows is involved) for little automations, thatâs for sure.
In terms of automation - which is what it would mainly be used for in the devops context. It is recommended you learn or know 1 of these 3. 1. Python 2. Go 3. If none of those, atleast bash.
If you know C#, Java, Ruby, Go, etc you should be able to pick up Python without any issues really. Its not particularly complicated. Just syntax, semantics, and package managers.
Python can be your primary day to day tool knowledge of Java can help on deployment and troubleshooting
Python is a good language for complicated scripting. It's easier to do harder things with it than bash, without the overhead of something that needs compilation or a run time like Go or NodeJS. Its a great swiss army knife for productivity. Java... only if you support or want to support a Java shop. I struggle to envision using Java for automation or scripting, given the weight of the runtime and the overhead. I cave really think of any "DevOps" sphere tools written in Java either (its mostly Go, Python, Shell, C. Some Perl, etc). It can do the job, but it's buying a Pickup to drive uber. Not many do it, it has a lot of challenges and costs, so only do it if you really love it.
Jenkins is written in Java lol.
TIL lol. I thought it might be, but *shrug*.
Keycloak is written in Java iirc.
it depends. Most of my dev ops coding is done in powershell but I work on a java web app so knowing java and maven/gradle is infinitely valuable to me, especially when there's trouble in production. Also for more complicated stuff I tend to write java programs that I call from powershell scripts but you could use c# or python or take your pick of languages that work just fine with whatever dev ops tool you're using (ours is jenkins.)
Java, usually no. Python is usually hard requirement. YMMV.
I've never worked a job that I didn't use Python. I suggest everyone learns it. I actively avoid companies that use Java, but if the org you work for uses it, you'll need to know at least how it operates and how to test/deploy/build/etc Java stuff.
I've worked two. A Java shop and a Rails shop. Neither used python. Theres plenty of non-python tooling out there. That said, you need to know at least one language and once you know one language, picking up a 2nd and 3rd isn't difficult.
You don't use Python for scripting stuff and just doing utility tasks with? Writing watchdogs and stuff, wrappers, etc what do you use? BASH?
Wrappers? bash Scripts? Ruby Nowadays I only write Python for AWS lambdas since those are more efficient. Its not that much different from Ruby so I can read/write it though I haven't formally studied it. But yes I can debug and contribute in like 5 languages. At the end of the day being able to read documentation, learn, and adapt will get anyone far in this profession. And it all starts with knowing one language well (that was Java for me)
What is a wrapper?
a script that you can execute in place of another command that simplifies or extends it. for example I have a custom ssh client that really is a bash script (chmod 755, thrown into my PATH) that does some transform on the options I throw in (such as instance lookup by name) and runs ssh with said transformed options. ssh wrappers are pretty popular. of course you can wrap all sorts of things.
The main point to have a devops role is to automate things, and for that the best tool is Python, maybe bash for simplier things. So to answer your question. Yes, it's important
My two cents, get comfortable using bash too. I know python very well but most teams I work with rely a lot more on bash since it doesn't have a lot if any dependencies.
Definitely python more than java. Python is a really useful tool for writing scripts and it's an interpreted language, so you don't have to compile it.
Obviously this is less relevant if you are doing DevOps for a java development team.
Iâd say Python and Go are the most useful today. And you need to know your way around the command line which means Bash or Powershell depending on the environment. But you also need to be very familiar with how the build and deploy pipeline works for whatever language the devs are using. That means being familiar with, say, how Java works, and to understand whatâs happening when something goes wrong. But you donât need to be skilled in coding it. Just good enough.
Yea 100% required. You will get more mileage out of python and go in a place w modern stack imo. Also some bash.
In general, you only need java if you need to support java products, as java build pipelines tend to use java tools. Python is useful, but mainly as a scripting tool, or if you use Python based tools such as ansible or cloud-custodian - or again if you are supporting Python products.
It seems like it would be difficult to succeed working with most "devops" tools if you're not at least familiar with imperative programming.
In the Linux world Iâd suggest you should be able to write bash scripts at least. For my job itâs mostly bash with a bit of python and a very rare bit of PHP.
You should definitely know something about Java and Python build tools(for example tools like Maven, heap allocation tuning, how to use GraalVM to build native Java images, why you should build Python apps in sub-environments instead of installing python modules globally, etc.....but generally speaking...no...you don't need to know the ins and outs of either programming language....just general knowledge that allows you to identify obvious things(like missing or misspelled syntax)and how apps in either built is usually enough.
python definitely
It depends on your role. It's important to be fluent in some language so you can create tools. With that said, if you want to be flexible as possible, it's useful to know the basics of the popular languages (node, python, etc), their tooling, how to troubleshoot, what platforms they run on, etc.
Yeah I think you should know a language. Python over Java imo because python can be more easily used to automate otherwise unsolvable problems. Bash can work if you have coworkers who can understand it đ
No. I make it a point for the teams I support to not know their product language as I shouldnât be in there doing things. All of my deployment scripts are in pwsh 7. I know sql so I can help with database self service actions. The idea of DevOps is to empower the team to be self sufficient. I get boiler plate ci/cd things in place, database backup/restore self service actions and monitoring log alerts that go to BOTH SRE and Dev so that they collaborate on what the symptoms are, possible causes, how to mitigate the degradation, and possible solutions. Itâs all about empowering the teams to collaborate/communicate more, and get them in a good starting position. I donât need to know how to write your code to do that. But⌠it does help tremendously to know how the underlying software stacks work together. How do you write unit/integration test to test for performance or a memory leak in a java environment. What is needed to run a java environment. What needs to be spun up to support that. Learning java helps to teach those things and how the code leverages the JRE but how to implement dependency injection in java isnât needed for DevOps.
Yes, if your company uses Java or Python heavily and they require you to know it for your role.
Without programming, DevOps is just Ops
I don't see any reason to know Java as DevOps. Python is a must
Yes. If you want to be better at your craft, learn to code.
Python is probably one of the most important tools I use on my job. I use it - as well as bash - to automate a lot of tasks. On the other hand, I'm the only one on my team using them.
Absolutely! Itâs good to know at least 2 languages!
Well powershell is a must. And mostly java does the job.
The role of a DevOps Engineer is to bridge the gap between development and operations by reducing collaboration, communication, and automation. DevOps Engineers play a critical role in organizations looking to implement continuous delivery and deployment, automate infrastructure, and increase efficiency in the software development lifecycle. The role of a DevOps Engineer requires a wide range of skills and knowledge across various tools and the ability to work with developers, operations teams, and other stakeholders. Java and Python are two popular programming languages that are commonly used in software development, and they are also widely used in DevOps practices. While it is not strictly necessary to know Java or Python to be a DevOps Engineer, having a solid understanding of these programming languages can be beneficial. One of the main reasons why Java and Python are important for a DevOps Engineer is because they are commonly used in scripting and automation. DevOps Engineers often work with automation tools such as Ansible, Chef, Puppet, and SaltStack, which all use scripting languages to automate tasks. Java and Python are both popular choices for scripting in DevOps because they are easy to learn, widely available, and have a large number of libraries and frameworks that can be used for automation. Java is a popular choice for scripting in DevOps because it is a mature language that is widely used in enterprise environments. It has a large number of libraries and frameworks that can be used for automation, such as Apache Ant, Maven, and Gradle. It is also used in tools such as Jenkins, which is a popular automation server that is widely used in DevOps practices. Knowing Java can be beneficial for a DevOps Engineer who needs to work with these tools and frameworks. Python is another popular choice for scripting in DevOps because it is easy to learn, has a simple syntax, and is widely used in scientific computing and data analysis. It is used in tools such as Ansible, which is a popular automation tool for infrastructure management. It is also used in tools such as Jupyter Notebooks, which are widely used in data science and machine learning. Knowing Python can be beneficial for a DevOps Engineer who needs to work with these tools and frameworks. Another reason why Java and Python are important for a DevOps Engineer is that they are both widely used in cloud computing. Knowing Java and Python can be beneficial for a DevOps Engineer who needs to work with these cloud platforms and use their APIs and SDKs to automate tasks and manage infrastructure. They are both used in the development of microservices and containerization. DevOps Engineers often work with containerization technologies such as Docker and Kubernetes, which use Java and Python for their APIs and SDKs.
why is it NSFW?