How Linux made me a better developer

 

Disclaimer: Some parts of this post may seem exaggerated to some of you, but it is a (mostly) accurate description of my experience with switching to Linux. Consider it mostly opinionated

Linux is the OS of choice for a sizeable portion of the software development community, and is one of the two significant open-source operating systems in use today (the other being BSD)1. However, it can be quite challenging for someone who has used a certain other proprietary operating system (rhyming with ‘wind blows’) for most of their lives. Let’s call said operating system W for now. Thus the question arises - is it really worth the effort for me to learn to work on an entirely new platform, just taking the word of the Linux community (who have probably been using it for ages anyway)? Well I took that plunge two years ago, and can safely confirm that those Linux fanboys really do know what they’re talking about. Let me explain how developing on Linux made me a more complete software developer.

The Beginnings

The start is always the hardest. Coming from W, there’s a certain feeling of unease when starting out with Linux. Maybe you’ve read that you can’t use proprietary software (not strictly true btw). Maybe you’ve heard that everything needs to be done via terminal (again, not true). Maybe you’ve seen someone destroy their installation with one wrong command (yes). That feeling of unease was my first introduction to a developer’s intuition. In a real world scenario, there isn’t always a safety net in case something goes wrong. Sometimes your actions can have huge consequences. So now I think twice before I run a command, and the same is true for how I test my programs.2

Be one with the machine

As I continued to get more familiar with the Linux ecosystem, I realised things aren’t really as hard as they are made out to be (by some people). Programs suddenly feel easier to access, actions seem quicker to perform. But then I started exploring outside the confines of my home directory, and suddenly realised there’s a lot more I can access than just my programs and documents. I eventually understood (through reading, playing around and solving other bugs that led back to these) that I had access to a variety of low level drivers and hardware. This allows you to do cool (but entirely unneccesary) things like listening to randomness. Continuing my journey outside the protective (or restrictive?) bubble that W encloses users in, I gained a better understanding of how the hardware of my computer interacts with the software that I write.

A complete developer

Further in my journey, I realised two quirks of programming on Linux, which I feel are fundamental to the development experience. First, it was ridiculously easy to set up new software and programming laguage toolchains. Once you realise that practically everything you need is one shell command away, you’ll never want to use an installer again. And I’m sure even the most hardcore W users will agree that it’s much easier to set up a software by running a bunch of copied shell commands from the setup page than following a 10-step tutorial.

Second, Linux usually doesn’t handle a lot of the basic setup of the system, such as firewalls, additional drivers and such, which are usually done automatically (or not) by W and hidden away from end users. While that might be a good thing for trivial users, you don’t want to spend a couple of days debugging your web API only to realize that there was a firewall rule blocking access which you didn’t put in. And the fact that nothing is installed unless you want it ensures that you have lightning fast boot-ups and operation. More importantly, as a software developer, it makes you aware of all the factors that may affect your application, and provides a clean, standard platform where you know what to expect from the system. This, I think, is the main reason why most developers lean towards Linux for their development environment

tl,dr; Developing on Linux makes you aware of all the moving parts that interact and affect your application, which I think is an essential part of making good software. There’s also a very nice feeling which I can’t really explain, but try it out for yourself. Of course, if your development relies on a specific platform, you don’t really have much choice, but if that isn’t a constraint, give a Linux-based OS a try. There’s a very good chance you’ll enjoy it

  1. Before you purists start ranting at me, I know that Linux and BSD are kernels, not operating systems. But explaining that can be the topic of a whole other post, so let’s just assume they are for simplicity’s sake 

  2. Fun fact: The only time I really messed up my installation, I did something stupid on the W partition