Linux and Windows together split the vast majority of the market, in terms of web servers, hosting, and code frameworks. There’s a persistent image of the suave Windows environment and the Linux terminal where raw code streams across the screen. It can seem daunting to think about, let alone to learn, and it turns many people away.
Do you need to know Linux, or really any of the *nix family, in order to be a full stack developer?
A Simple Answer
You probably know that nothing in life is ever truly cut and dry. There’s never going to be a single simple answer that fits everyone. As such, our simple answer here is “yes”, but with qualifications.
The fact is, you can go your entire life without ever touching a Linux environment. If you’re sufficiently dedicated to it, you can go a very long time without ever touching a Windows environment either, but you’ll be significantly limited in what you can do. Windows is everywhere in the business world, but then, so is Linux. Linux is just, shall we say, better hidden.
One thing we need to stress is that the image above, of the GUI Windows environment and the code-focused Linux environment, is simply incorrect. Both technologies have come a long way since the 80s and 90s, after all.
If you’re working in a Windows environment, you’re just as likely to be exposed to direct terminal access. You’ll need to know your way around, say, Apache, the Windows command line, various command-line utilities, and direct coding like Powershell.
Conversely, not all *nix work is done at the code level. There are not just one but many GUIs for Linux, and some of them look so Windows-like that a layperson wouldn’t notice the difference unless they looked for it.
There are difficulties and challenges with both Windows and Linux environments. You have to learn general information and specialized knowledge about what you’re doing.
Why You Should Learn Linux
What, then, are the benefits of learning Linux?
First of all, the majority of web servers use Linux. Statistics from 2017 indicate that 2/3rds of all web servers are using a Linux environment. And, sure, if all you’re doing is hosting a website and using a few basic tools, you barely need to touch Linux directly.
But you’re not stopping there, right? You want to be a full stack developer; front end and back end and everything in between. That means you need to know the platform you’re working on, to make sure your code will work in the first place.
Linux is also very common as the core of a development environment. You can’t always develop and test your code on a local machine; you need an actual environment that simulates the real-world usage your app will get. You can’t deploy untested code into production and risk the company you’re working for, so you need to use a test environment. Usually, that means Linux.
One great benefit of learning Linux is that most of what you’ll need to learn isn’t very difficult at all.
- Learn how to install software packages.
- Learn the differences between Linux distros.
- Learn how to navigate the terminal, change directories, create folders, and manipulate files.
- Learn how to set permissions.
- Learn how to use basic tools to monitor server performance.
- Learn how to take basic security precautions and harden servers and apps.
There are a lot of real-world uses for basic Linux skills. If you’re going to do some development in Ruby on Rails, you’ll need to know how to unpack and configure it to set up your environment. If you’re developing code for a Linux environment, you’ll need to learn how to test it and diagnose the errors you get.
Linux is also very well documented. It’s extremely widely used throughout the tech universe, and there are literal decades of documentation available online, much of which hasn’t changed all that much through that whole time. If you have a problem, if you encounter an error, if you’re trying to accomplish a task and it fails, you can usually just search for an answer to your problem and have a very good chance of finding it.
In the cases where you aren’t able to find an easy answer, there are tons of Linux-focused communities around the web. There are support forums, there are Reddit subs, there are Twitter threads and hashtags you can ask, and more. Over time, you learn most of what you need to do, and you gain enough familiarity that you can intuit a lot of what you don’t know. For everything else, there’s the community.
On top of all of the above, Linux is natively very powerful. With Windows, you have a lot of layers of security and obfuscation in between you and what you might want to accomplish. Linux gives you the keys and puts you in the cockpit. It’s daunting at first, and there’s a very real potential to screw everything up, which helps teach you to think through your actions before taking them, to learn the pitfalls, and to develop responsibility.
Everyone makes their mistakes. Everyone accidentally wipes files, or pushes a broken file instead of a fixed file to an environment, or brings down a server with a faulty loop. That’s part of how you learn, experience, and grow as a developer.
Part of the power of Linux is that it’s simple and modular. The core of Linux doesn’t need much to function, and virtually anything can be built out from that core. This makes it very stable and very resilient to mistakes. On Windows, if you forget to cap a loop you crash your machine. If you delete a critical file, your computer fails to boot. Windows is like an elaborate house of cards crafted to hold up your app; if something changes or breaks, the whole thing fails. Linux is like a brick; it holds up what it needs to hold up, more bricks can be added to build out functionality, but a brick wall will stay up if you remove a single brick in almost all cases.
There are other fringe benefits to Linux as well. For example, it’s free and open source. If you want to dig into the guts of a core module of Linux and see how it works, absolutely nothing stops you. It’s entirely open to curious exploration.
Linux also has a lot of inherent security compared to Windows and, today, even Mac environments. It’s much more difficult for malware to infect it in the first place, and it’s harder for it to proliferate if it manages to get in. It’s also easier to recover from.
And, of course, there are minor details. Linux doesn’t need to reboot nearly as often as Windows. Linux can run on just about any machine, with the right configuration of drivers. Linux is small and doesn’t require much in the way of disk space. All of this can be very convenient for a developer.
Are There Drawbacks to Learning Linux?
Linux has a lot of advantages for a developer, but are there any drawbacks to learning it?
Probably the biggest drawback is the potential to get things confused between Linux and Windows. With Linux, you learn a lot of terminal commands, ways to navigate via the command line. Not all of these work the same way, or work at all, in a Windows environment. When you’re just looking at command line interfaces, it can be easy to forget which one you’re working in momentarily, and end up confused or frustrated when something simple isn’t working.
Linux is also easy to learn, but difficult to truly master. If you’re looking to progress from a developer role to an administration position, you may need to learn a lot about how Linux works at the most basic level, and that can take a long time. There are comparatively few Linux masters than Windows masters.
That said, if you’re just looking to use Linux as a development environment, you don’t need to know that much about it. You don’t NEED to be a master. The more you know, the suaver you can be within the environment, but you don’t need to be that suave to be functional.
Linux lives in the world of open source, which is both good and bad. It’s good in that it opens up the environment to anyone who wants to create a project to add functionality to their systems. It’s bad in that the world is littered with abandoned apps that barely work and require tweaks and manual intervention to use. More esoteric or exotic hardware might be harder to find drivers for, older tools might not have support for modern features, and so on.
99% of the time, everything you need as a full stack developer is easily available and ready to use in Linux. Developers are common, after all, and that means unless you’re going outside the bounds of what most people consider normal, you’ll have no trouble. Use standard environments with hardware and software configuration, and you’ll be in a well-documented world with plenty of support. Use common, modern-day tools for your development, and you’ll find it easy not just to work in the environment, but to collaborate.
Chances are, you’re not going to be trying to develop a new program for a 1990s version of Linux, and you’re not likely to need weird hardware that hasn’t been updated since 1986.
With that said, there ARE openings for people who like to do more exotic programming. The manufacturing and healthcare sectors, for example, are full of old, specialized machines whose original companies have gone out of business and which have been long out of support. Being able to develop newer, more modern, more secure versions of software for these specialized machines can be a very lucrative position for a developer.
Do You Really Need to Learn Linux?
Yes and no. If you’re developing specifically for a Windows environment, you never need to touch Linux. If you want to specialize in Windows, use ASP, and work with .NET all the time, you’re perfectly fine never needing to learn a thing about *nix at all. Just like if you want to focus on iOS apps, you never need to learn Windows programming, since they have their own environment.
As developers, though, the more you learn, the more flexible you are. If you have a passing familiarity with Linux and with Windows, you’re more desirable as a freelancer, more likely to be hired as a developer in a hybrid environment, and you’re generally going to be paid more for your skills.
Learning Linux takes time, just like learning any other skill or tool, or platform. So, what you need to do, is ask yourself what is the most valuable to you right now?
Do you value learning and specializing in one environment where you can thrive, and expand later at your own leisure?
Do you value learning a broad base of general knowledge, so you can pick a specialty later?
Both of these are valid ways to approach being a full stack developer. Maybe you’re very interested in one environment and don’t much care to learn another. Maybe you’re a curious soul and want to learn as much as you can about everything you can. Neither is the wrong answer. Do what you want to do, do what you find most interesting, learn what you want to learn.
We consider Linux to be an important skill, and we strongly encourage you to learn it to improve your job prospects and your overall understanding of how development works. You’re likely going to be hindering yourself if you don’t learn at least the basics, but how deep you decide to dig into the topic is up to you.
Sooner or later, you’re going to encounter Linux in your environment. What you need to decide is how you’ll be able to handle it when it happens.
Do you have any experience with Linux? Any notable features that you prefer? Be sure to let us know in the comments!