Every Dev Should Know Linux
"Every Dev Should Know Linux," is something of an abrasive headline, I know. I don’t mean it in the sense that every developer “should” know Linux, but that every developer deserves to know Linux or Unix on at least a basic level.
I work in a company filled with a few front-end guys, a good handful of people who make the back-end, and then our DevOps group, which includes me in a roundabout sort of way. There are three of us — a salty-as-you’d-imagine Navy vet who firmly believes in BSD, a guy who’s been around long enough that I’m pretty sure he used actual SysV back in the day, and myself.
Now, I’m a lover of all things Unix-y — I actually resurrected the local Linux/Unix User Group and I’ve been using Linux of various sorts since high school, so perhaps I am, actually, a little bit biased, but I can’t help but notice all of these occasions where our developers have been completely caught up by things that seem really basic to us, like file permissions or cron.
This is a disservice to these genuinely amazing colleagues of mine, some of whom have built things I can barely wrap my head around, because it means that they are fighting the machine on a daily basis, any time they want to do something new or different.
There is this gap in knowledge that a lot of developers have about how to actually use the tools that happen to be on the same machine as their code. They are missing out on the beautiful simplicity of the old Unix paradigm of “do one thing and do it well.”
The first time I felt like I really understood computers was when I was able to figure out how Gentoo (yes, that’s right, I’m one of those) installed. It was at this point that I realized that computers aren’t actually all that difficult, and that if I could understand the building blocks — the bootloader, the kernel, block devices, etc. — at a high enough level, I could use that to learn how the entire system works.
It’s something that has literally changed the way I interpret systems of all kinds now, from computers and programming to economics and politics: there are no black boxes anymore, only boxes we don’t fully understand yet.
Understanding how something as complex as a full operating system or a browser can be built out of these components that aren’t all that difficult to grasp is liberating — these things are no longer monolithic and terrifying, they’re exciting and just waiting for us to tear them apart and learn everything we can about the building blocks that they’re made of.
Unfortunately, a lot of developers come out of school or bootcamps with very little idea of this concept, and the monolithic way so many people write code is evidence of that. Developers are, without even knowing it, being done a disservice, simply by not learning the way something so elegant as Unix works.