This is my custom-built Windows PC, it's powered by the AMD Ryzen 5 3600, 16 gigs of ram, a 1 terabyte NVME SSD, and the Nvidia 2070 super. At the moment, its only use is occasional gaming, and video editing simply because it’s the most powerful computer I own.
This on the other hand is my 2019 13 inch MacBook Pro. It has an intel i5 processor, 8GB of ram, a 128GB SSD, and integrated Intel graphics. The only reason I own this thing is for cross-platform development. As you might be aware, Apple restricts the development of anything Apple to their own suite of software, which only runs on Apple devices. That’s also the only reason I own an iPhone, which most of the time is sitting on a desk full of dust.
These are both incredible tools and they serve their purpose, however, when it comes to software development, I much rather use this.
This is my 2015 XPS 13. It rocks an intel i7 processor, 16GB of ram, a 512GB NVMe SSD, and integrated Intel graphics.
So having multiple options, why do I prefer to use a much older machine?
Well because unlike the other two options this one is special. Why? Well because it runs Arch Linux!
So in this blog, I want to show you why I prefer to use Linux as a programmer.
1) You can learn so much more about computers!
I’ve been using Linux as my main operating system for over 6 years now and throughout that time I have learned so much! My first introduction to Linux was with Elementary OS. I just thought it looked really cool, so this is why I chose it.
As a way to force me to learn Linux, I decided to wipe Windows. And soon after installing Elementary OS, I broke the installation by trying to configure lightdm, which is the display manager that comes installed with Elementary OS.
So not knowing what I was doing, I resorted to reinstalling the entire operating system, and not even 30 minutes later, I broke it again.
So I reinstalled it and after breaking it again I thought to myself, there has to be a better way to fix this without having to reinstall the whole thing again every time. So after a lot of online searching, I was eventually able to fix my problem.
The point of this story is to note that throughout the years of encountering problems and fixing them, I have been able to learn a lot of principles that have transferred over to the work I do today. For example, with my Linux knowledge, I can now deploy servers to host full-stack applications and when I encounter problems, which does happen, I generally know where to look to fix those issues because of those experiences.
This level of system administration is something I know I would not have learned using macOS and Windows.
2) Linux teaches you to be flexible!
I grew up using Windows, so from experience, I can tell you that when you make as dramatic of an operating system switch as I did from one day to another, you quickly realize that a lot of the software you use on Windows, just doesn’t work on Linux. Because of this, if you want to get any work done, you have to adopt different software.
Now, this might sound like a nightmare, but honestly, it’s one of the things that has helped me grow so much as a software developer. You see, when you’re not reliant on specific tools that you can only use in certain environments, you learn to adapt to different situations quickly! And as a software developer quickly pivoting and navigating around tools you don’t have for a project is super powerful! This is a great segway into reason 3.
3) The world of open-source software!
When you don’t have the tools you need, it does not take very long for you to discover the world of open-source software! Now sure, open-source software is not specific to Linux, but because the majority of public Linux software is open source, you find yourself learning a lot about it.
This is actually how I found out about sites like Github, which host millions of open-source repositories of wonderful software. Now, if you’re watching this video, chances are that you already know about Github, but do you know how to build software from source? I sure didn’t before I started using Linux.
If you’re like me and you grew up using Windows, your usual program installation procedure probably looks something like this:
Download the exe file from a website Go to your downloads folder and double click on that executable file Press next Ignore the terms and conditions Keep pressing next until the program’s installation finalizes
Because we have grown accustomed to this sort of installation, when it comes to having to build the source code for a program, you probably have no idea where to start. But as a software developer you should know how to do this at some point in your career because before you can build that easy to install exe file, you need to know how to build that source code.
In addition, knowing how to build software from source increases the software that you have access to because not every developer bothers to distribute executables.
However, it’s not just about learning to build programs from source, when you’re exposed to open-source software, you find yourself learning a lot from all of the code you are exposed to.
4) The Linux terminal!
If you have tried Linux before, you know that a lot of the Linux ecosystem revolves around the terminal!
And sure, more user-friendly Linux distributions like Ubuntu, Linux Mint, and even Elementary OS give you desktop tools to limit your exposure to the Linux terminal, but as a software developer or power user, there is just no avoiding the command line.
And honestly, the command line tends to turn a lot of beginner developers away from Linux because it takes time to learn, and to begin with it might not be as intuitive as your GUI interfaces.
However, the Linux command line is the best tool I have ever used in my career as a software developer. After you get the hang of it, you realize how useful it is! In essence, the terminal is just a program that gives you access to other programs, but it’s these programs that you have access to that can make your workflow so productive.
It also makes you realize something else - not every program needs a user interface. From an end-user point of view, it makes sense to have a GUI to navigate a program.
However, from a developer’s point of view, sometimes it makes a lot more sense to use a combination of arguments and flags to use a program in the command line compared to having to navigate a bunch of cascading menus with a bunch of options.