markdown guide
 

Because it's not Windows.

I mean, literally:

Feature Linux Windows
UNIX CLI tools Yes No
Terminal-based OS Yes No
Packaging system (natively) Yes No
Distributions giving a solid choice regarding update cycles Yes No (update = trouble, far too often)
Robust Yes Debatable
Free ($$$) Yes No
Free and open-source Yes No
Lightweight (I have a shitty laptop) Yes No
Same environment on a server Yes No (unless you use Windows Server, but... seriously?)
Alternative Window Manager/Desktop Environment Yes No

That's not to say "Linux > Windows", but all those features are things that I need to work efficiently, and Windows just does not provide those things (or not as I would want them).

And to be fair, most of those are UNIX features, not Linux. I could have most of those things with a BSD distribution or OSX... but I'm neither crazy nor rich ;)

 

I haven't used Windows since the early days of Windows 7, so my view might be a bit outdated. There are three main reasons I switched to Linux and never looked back.

1 Unix shell

I can't live without the shell and bash. I know these tools and it's simply too easy to automate repetitive tasks. Plus, it was a pain to ssh to Linux servers, which my job has always required, from Windows.

2 Package manager

Whatever Linux distro you are using, it's very easy and straightforward to install and manage libraries and tools with the package manager. Back when I used Windows I always ended up with half a dozen different versions of C++ runtime and I had no idea what they were used for. My package manager not only tells me what additional dependencies it's going to install, but it also tells me when a package is not needed anymore and I can just remove it with autoremove.

3 Customisable

It's ridiculous how little you can customise Windows or Mac OS compared to Linux. Granted you need to know your way around the system and you're going to screw it up every now and then, but I think it's worth it.

Bonus: you own your system

It annoys me a lot not having full control over my computer at work and with Windows it's just too easy to restrict things. I used to work at a company where we didn't even have admin rights in our computers, so we couldn't even install the development libraries we needed. Most of us either used a virtual machine with Linux or installed Linux directly on our computers. I recently heard that they might disable USB ports on all computers through some active directory thing at my current workplace, which is a bummer for my colleagues that are using Windows, but guess what, my Linux computer won't be affected.

 

Windows as an end-user operating system is targeted primarily at users for whom computers are a means rather than an end: your average desktop user just wants to communicate with someone else, lay out a spreadsheet, play a game, look at an inventory report. They don't care so much how the computer and the programs they use work as long as they work and are minimally obtrusive about it. And they shouldn't have to care -- if everyone had to compile their own kernel and set up their own boot loader before doing anything else, we'd have made little progress since the heyday of mainframes! But the systems and abstractions and tooling that streamline the experience for regular users tend to get in the way for programmers, and systems and abstractions and tooling that help programmers do more faster can be impenetrably arcane or even dangerous from other perspectives (you can wipe out a *nix OS in nine keystrokes).

Linux can be friendly enough to non-programmers if you add more layers to mediate the user experience, but consumer Windows operating systems have those layers baked in and it's difficult to peel them back.

 

I currently use Windows, but there are two big things I preferred about the time I spent using Linux as my daily driver for web development.

1) Tooling. I suspect this is a case of "everyone uses Unix (Linux/mac), so everyone develops for and supports Unix" rather than any actual superiority of the system, but I have always found tools and libraries much easier to install and configure on Linux systems than on Windows. Trying to get a ruby on rails development environment set up on Windows can be pretty tough. A lot of the time the solution to getting stuff working is "install cygwin", at which point you might as well just be booting into Linux anyway.

2) Linux systems rule the roost when it comes to web servers. If you're deploying a website or web application, chances are it's going on a linux server. Keeping your development environment similar to the deploy environment reduces the number of unexpected hurdles you're likely to face. There are things like docker, vagrant, etc. which are intended to fill that role, too, but in my experience you often spend as long trying to get Docker to work properly as you spend on the project itself.

I've been enjoying rails development on Windows a lot recently with Windows Subsystem for Linux, but... that's just a roundabout way of saying that Windows is better the closer it gets to being Linux.

 

If you have a laptop/desktop pc with low resource a linux distribution would make it usable.

I used to have a laptop with a processor dual-core 1.0GHz and 4gb RAM, it was painfully slow with windows. When I started working full time I changed to dual boot with Zorin OS lite as my secundary OS, with Zorin I was able to work faster and better (some tools had better support on linux). I use it for about a year before changing the laptop for something (slightly) better.

 

Windows 10 runs like crap on my old laptop, but Kubuntu has no issues at all.

Classic DEV Post from Sep 24

How Architecture Improved My Coding Skills

We all our skills in different ways. The path to becoming a senior engineer is never the same. This is an example of how mine involved writing less code than most.

Ghaleb Al-Nakhlani profile image
Passionate web developer