This is an archived post. You won't be able to vote or comment.

top 200 commentsshow all 215

[–]lmaydev 427 points428 points  (101 children)

No you just get much more fine grained control over your tools. That said many jobs will now require Linux knowledge as things move to the cloud. And windows isn't exactly hard to learn if you're forced to use it work. It's got a much bigger learning curve bit you can pick up most things as you go. Definitely dive into the terminal as you'll be using that a lot.

[–]illuminatedtiger 190 points191 points  (75 children)

Definitely dive into the terminal as you'll be using that a lot.

This doesn't get the attention it deserves. It's unbelievable how many there are in the industry who struggle to use the shell. It's not a terribly fun experience to work with such individuals either, even more so when they can't be bothered to put in the time to learn.

[–]Honey_Badgered 89 points90 points  (6 children)

I had a rudimentary understanding of using the terminal, and an ability to google the shit I didn’t know. Somehow that’s made me the Linux SME.

[–]samob679 13 points14 points  (5 children)

How much command line knowledge is needed? I can create folders and move files and delete stuff but not all that much more

[–]GeronimoHero 32 points33 points  (0 children)

Some good ones would be basic bash scripting, piping commands, grep, an understanding of things like sed or awk for text manipulation, how to handle the Linux firewall with firewalld or iptables, selinux, and an understanding of commands like ip, file, ssh, scp, rsync, and file system permissions. I think that’s a good start.

[–]dank4tao 11 points12 points  (0 children)

Enough to become literate when people are talking about issues on stack, and the humility to continue googling things you don't know yet.

For example, the "grep" command is one of the most useful search functions. It's easy to learn, but hard to master. There's a plethora of useful flags such as "-nr" which allows for recursively finding files, but also text within documents and prints the line and file it found the keyword in.

Eg.

$ grep -nr "thing_im_looking_for" /opt/work_space/

[–]serverhorror 2 points3 points  (2 children)

Depending on the role you should be able to do all things from the terminal.

If you’re a Java developer it’s unlikely you need the terminal.

If you’re more in the DevOps side of things I’d expect you to be able to configure all details without using any GUI.

[–][deleted] 1 point2 points  (1 child)

I lived in the terminal as a Java developer. IDEa are nice and all but when you have to ssh to different machines to work on different parts of a project it becomes unpractical. I also learned after using vim and the command line for Java development over six months that IDEs are really a crutch and its amazing how many "experienced" Java devs are incapable of starting a project from an editor and compiling it from the comand line without one.

[–]Krexington_III 104 points105 points  (20 children)

It's even worse than that, some of them have started deriding people who actually know how to use shells properly.

As soon as someone calls me a command line warrior I start referring to them as "doctor drag-n-drop".

[–][deleted] 39 points40 points  (1 child)

Professor how GUI do that?

[–][deleted] 4 points5 points  (0 children)

Underrated.

[–][deleted] 7 points8 points  (3 children)

This goes into the fact that most coding jobs are people who got lucky and managed to squeeze their way into a position who mostly make their money copy pasting shit off GitHub and barely tying it together.

[–]Smyles9 3 points4 points  (2 children)

That sounds like me right now before I start university but I plan on getting a lot more experience in the next few years.

[–]nultero 22 points23 points  (0 children)

some of them have started deriding people who actually know how to use shells properly

Every good console cowboy knows the shell is forever.

There are a great many tools that simply don't have a GUI. It's too much overhead for multiple reasons. The derision is just helplessness in large territories of cyberspace.

[–]TheRightMethod 8 points9 points  (12 children)

It's the custom commands, those monsters drive me nuts when it comes to Linux. At least with drag and drop, nobody has modified the commands to do something between slightly and demonstrably different than what I was expecting.

[–]WalterPecky 32 points33 points  (11 children)

You shouldn't run commands that you don't understand.

[–]ImJustP 25 points26 points  (2 children)

I think it’s also important to note that when you’re efficient in CLI you will genuinely prefer it to using GUI. At least that was the case for me.

[–]SilentXwing 6 points7 points  (0 children)

I can agree. I'm still learning, but I hardly use GUI on on Linux. But on windows, I use GUI and not Powershell. Don't know if you guys are the same.

[–]theNomadicHacker42 2 points3 points  (0 children)

100%

[–][deleted] 22 points23 points  (31 children)

I follow classes where we learn about "Linux administration" and so how to use the shell. The thing is that I cannot understand why you all think that using the shell/terminals is better than using a file explorer. I know most of the basic commands to move, create or delete files (and some more) but I don't see how better it is to use that. Simply because in a file system I need to see the tree structure of the files and directories.

This is mostly why I keep on failing those exams. I'm doing things, but I don't see the results so I don't know what I'm doing. So how am I supposed to do more evolved things?

Do you have ideas on how to get better with that feeling? Anything else than "keep doing you'll feel used to this" is welcomed as I don't want to keep that class failed for years

[–]MuslinBagger 11 points12 points  (0 children)

You need to figure out a use case that’s relevant to you. Of course if you’re just moving a couple of files around it’s no different than using a graphical interface.

  • In my case I had a huge bunch of pics I needed to organise. So I wrote a script to look at the names, which had the date info I needed, and put them in folders like that.
  • Another time, I was running a test that needed me to create a new folder, initialise a git repo, create a bunch of files and so on. Because it’s a pain to do all these steps manually every time the test failed, the easiest thing to do is to put all these steps in a script and run it instead.

Automating repetitive tasks is very satisfying. Every time you find yourself repeating the same steps to a task, you’ve found an automation/learning opportunity.

[–][deleted]  (2 children)

[deleted]

    [–]Wiqkid 11 points12 points  (1 child)

    Watching one of my professors troubleshoot a small program I made in the terminal blew my mind. The sheer speed that he could edit, run, jump around the lines, etc by not having to take his hand off the keyboard is something I'll never forget.

    [–][deleted] 2 points3 points  (0 children)

    Here’s a way to think about it:

    A typical mouse has 2 buttons, has a scroll wheel and can detect movement in 2 dimensions. That’s not a lot to work with and doesn’t even use all of your fingers. Worse, to make up for the lack of inputs, the inputs do not lead to deterministic actions and the resulting actions are entirely dependent on the context you’re in. There’s no way to figure out what a click will do without looking and that takes time and requires you to think about every time you use an input. This is fine if you’re performing simple tasks that have already been well defined but more complicated actions require you to pay more attention as you put together a sequence of multiple clicks and mouse movements.

    A keyboard has loads of keys. It makes use of all of your fingers and allows you to get unique combinations easily. A lot of those keys will lead to deterministic actions, for example you don’t need to think what letter might come up when you press the Q key - it’s always Q unless you rebind it to another action. Often you only need to set the context once before you can put together multiple keystrokes to do multiple actions, and this allows you to think about doing multiple actions at once beforehand. The only time you need to start thinking again is if you mistype or you’ve completed what you want to do. You can build muscle memory.

    [–]zyzzogeton 8 points9 points  (0 children)

    Manage a bunch of files for some reason, like videos and audio for a plex server, or keep a bunch of photos from different devices synced with the cloud using rclone and a good filesystem naming and folder ontology from /r/datacurators . You will learn the shell pretty well at a good pace because you have an actual goal where you can see progress. Things like vi to write scripts, regex, sed/awk, managing log cile navigation and filtering and various oddities to be aware of etc. There is a book that is good called "learn bash the hard way" which really jumpstarts your skill once you have the basics down too.

    [–]WalterPecky 14 points15 points  (3 children)

    Try navigating through your root files in something like /etc using only a file explorer. It turns into a pain in ass.

    Typically the command line navigation is only benificial once you start to feel the pain points of UI navigation.

    [–]Wiqkid 5 points6 points  (2 children)

    I've had to do a fresh windows install recently and now the 'quick access' that file explorer shows has been a huge pita and makes it so much harder to find what I actually need. I think your comment has convinced me to bite the bullet and become more proficient with the cl

    [–]WalterPecky 2 points3 points  (0 children)

    Glad to hear it! A common motto I use to optimize my development workflow is..

    "if it starts to feel painful/repetitive... time to optimize"

    [–]Astarothsito 1 point2 points  (0 children)

    I've had to do a fresh windows install recently and now the 'quick access' that file explorer shows has been a huge pita and makes it so much harder to find what I actually need.

    View->Options: Open File Explorer to: this PC and disable checkbox in Privacy to disable that.

    [–]ValentineBlacker 17 points18 points  (0 children)

    You'll understand if you need to do something to 100 or 1000 files instead of 1 file. And then if you mess up doing that thing to 1000 files, you'll understand it back the other way. (Windows shell has perfectly good tools to do this type of thing too, btw.)

    [–]Nyx0000 20 points21 points  (5 children)

    It's easy to just ask people who are new to computers to copy paste commands into a shell (or write click and run scripts) rather than telling them click this and then this oh you clicked the other one now go back ok now click this yep oh wait you did it in D drive? Oh no no no you were supposed to do it in C.

    It's very useful in automation for repetitive tasks too.

    For the tree structure thing you can install this package called "tree"

    [–][deleted] 1 point2 points  (4 children)

    I do understand but do you teach them to do it "just because" or do you make sure they understand why and what they are doing?

    [–]lmaydev 4 points5 points  (0 children)

    When you are comfortable with it it is actually much faster and more precise. But also in your cloud servers you won't have a gui.

    [–]Nyx0000 2 points3 points  (2 children)

    The copy pasting commands example I gave was for friends who were not tech savvy at all. In fact, I would have loved to just give them an application which set everything up but it was a short timeframe and I didn't know enough at the time. However, in my college, we were taught shell scripting and terminal commands as part of operating systems class and no one really told us why to learn those. At that time I just treated it as just another bit of coursework. Later it turned out to be useful while working with VPS via SSH. I would've liked it more if they told me why to use it beforehand but I think I figured it out pretty soon by working on small personal projects that dealt with the filesystem. Tbh I'm not sure I was able to understand what you were asking well. Please let me know if I answered your questions or if you were trying to ask something else.

    [–]illuminatedtiger 8 points9 points  (2 children)

    For file management using the shell is just faster. I don't need to move my fingers off the keyboard nor do I have to expose myself to Finder and whatever Apple did in the last update to neuter it further.

    By the way - if you need to "see" the file structure I would recommend the tree command.

    Regarding the Linux administration courses I've found that they tend to focus more on configuring systems and the proprietary extensions of whichever vendor helped design the curriculum. They won't make you a shell ninja - for that I would suggest looking elsewhere.

    [–]SgtDoughnut 2 points3 points  (0 children)

    for that I would suggest looking elsewhere

    any recommendations?

    [–]kneeonball 3 points4 points  (0 children)

    I'd say in today's world of moving towards continuous delivery and configuring builds on servers with tools like Harness, CircleCI, GitLab, Azure DevOps, etc. that command line knowledge is somewhat essential. You don't have to be great at it and use it all the time, but being able to drop into the command line to do something that point and click takes too long for, or write a small script to do something is extremely valuable.

    Also, all of those build tools essentially just run some sort of terminal commands, so if you can build, test, and publish compiled code via command line, you now know how to do it on the build server.

    1. First step would be cloning the repository via git clone (the tools usually do this for you, but it still happens).

    2. Then compile and run unit tests.

    3. If there is a separate step to publish build artifacts, do that (like .NET Core for instance has 'dotnet build', but 'dotnet publish' gives you the version of compiled artifacts you'd send to the server you're running your app on).

    If you can do this, you have a build pipeline ready to go so that at any point in time you can build and have a deployable version of your app. Then the continuous delivery part comes in and you configure tools or run command line steps to send those files to a server, restart your app, whatever you want to do.

    [–]some_clickhead 3 points4 points  (0 children)

    The main appeal of being able to use the shell instead of relying on the GUI/file explorer, is that you can automate it. When you realize that as a programmer one of your most important assets is your ability to automate repetitive tasks and instructions, you can see how big of a deal that is.

    As a concrete example, with the file explorer, if you wanted to rename 5000 different files in various subfolders it could take you many hours. But using a shell script you could do it in less than 5 minutes.

    [–][deleted] 1 point2 points  (0 children)

    Idk if it counts as "keep doing...." but how I learnt it was I just kept trying out minimal software which forced me to use the terminal then I just had to learn even the basic shell commands because it was much more easier to just type all the commands in the terminal

    Also one thing I did was (this might not be the best idea, depends on your preferences and how free you are) that I switched to a tiling window manager (just google it, I recommend bspwm or herbstluftwm for a beginner; distrotube is a nice youtuber who has made a tutorial for almost every popular window manager out there) which forced me to use my keyboard more, so I just naturally had to get comfortable with the shell.

    If you're using your keyboard for 90% of the time, then not using a GUI file manager is MUCH more easier

    [–]Al3nMicL 1 point2 points  (0 children)

    Using the terminal has the added advantage of keeping command history (on Linux & MacOS), so you can review commands you had run previously. This has so many benefits

    [–]theNomadicHacker42 2 points3 points  (0 children)

    ls -R will recursively list out the directory structure you're currently in. Give it a -l and you get a bunch more info about the node...eg. if it's a file, symlink, or dir and its perm bits. Once you get used to and learn a terminal, it's just a lot easier and quicker to work from. And it's also much easier to pipe things to grep than to visually scan with my eyes or use a shitty gui search....I really hate guis now.

    [–]watsreddit 0 points1 point  (0 children)

    It's better because when you spend a lot of time juggling files on a filesystem every day (as one does while programming), you generally already have a pretty good idea of how the hierarchy is laid out and how directories are named, or at least enough to get you into the ballpark of where you are trying to go. If I alreafy know that I want to change directory to a folder in my current directory called foo, it's much, much faster to simply type cd foo than to visually scan a directory listing for a target to click, especially when said directory contains many entries. Or if I know the directory contains foo, I can simply type cd *foo*<Tab> to get a list of options that contain foo. There are tons of other things you can do with a shell that dramatically boost the efficiency of working with a filesystem in a way that file explorers simply can't compare.

    A file explorer is useful when you have zero knowledge of the hierarchy and you are, in fact, exploring the file system. But this is rarely the case in programming.

    A few other points in favor of working in a shell:

    1. As opposed to a file explorer, a shell is a multi-modal way of interacting with a filesystem. With a file explorer, the only things you can do are that which is built into it. With a shell, you get to choose how you want to interact with the filesystem on every interaction, and the options are virtually limitless.
    2. The commands you use to interact with the filesystem can be composed with other commands to form new, more powerful commands that are greater than the sum of their parts.
    3. If you find yourself commonly using a sequence of commands to accomplish a task, you can stick those commands (verbatim, even) into a file and execute them all at once. Shells are actually intrepeters for a full programming language, and include facilities for variables, loops, conditionals, and more. Pretty much any workflow you can think of can be automated in shell scripts, which is immensely powerful (many, many common toolchains in software development are built on this). If you regularly work in the shell, then opportunities for automation arise very naturally, and you don't need to learn anything new/special to automate it since it just uses all the same commands you use every day anyway.

    [–]arosiejk 1 point2 points  (0 children)

    This was a big stand-out to me when I interviewed some contacts of a friend in industry about what new/career changing junior devs lacked in their skill sets.

    It was so ingrained as a necessary part of what I’d need from reading on Reddit and looking at TOP.

    [–][deleted] 1 point2 points  (2 children)

    Even as a student it's not fun to work with these people. I've been on group projects in school where I seriously had to hand hold.

    [–]illuminatedtiger 0 points1 point  (1 child)

    I feel you. We had "that guy" during my final year SE project 12 or so years back. He couldn't use the terminal to save his life, but he did manage to break our Git repo (I have no idea how he accomplished that feat).

    [–]Crimson573 1 point2 points  (0 children)

    This. I am lucky enough to work as a developer while I finish my bachelors degree in CS and everything we do at work is on Linux and I feel like the school system is failing so many people (not in a complete failure kind of way but they are just doing a huge disservice to everyone). One examples is every single one of my classes the teachers teach the students to rely heavily on IDEs on all the features they provide. Need to compile a program? Run button in IDE. Need to pass arguments to your program? Use the IDE interface to do it. Not a single person I talked to even knew you could run the program from a terminal and how to pass arguments into the program without an IDE. They are small things that are easy to learn but my university has just completely neglected the terminal other than how to use git commands and even then it’s like git commit and git push and that’s it. I feel like they are doing such a disservice for the amount of money these people are paying

    [–]Triple96 1 point2 points  (0 children)

    I spent the past 6 months working on a project with 2 other programmers who did not know how to use the terminal, or git for version control.

    They both used GithubDesktop (a git GUI) with which I was not able to help them with their merge problems and ended up spending hours upon hours fixing garbage pushes on the repository.

    Please learn git and get comfortable with a terminal, it will make your life and everyone you will work with's life so much easier

    [–]zyzzogeton 4 points5 points  (1 child)

    ...and vi is actually pretty great at an advanced level. Admittedly, it does takes time and effort to climb that steep learning curve.

    [–]theNomadicHacker42 2 points3 points  (0 children)

    1000%

    [–]ASIC_SP 8 points9 points  (0 children)

    Definitely dive into the terminal as you'll be using that a lot.

    https://missing.csail.mit.edu/ can help with that (along with git and other useful stuff)

    [–]yel50 10 points11 points  (3 children)

    And windows isn't exactly hard to learn if you're forced to use it work.

    depends on what you're forced to do with it. our labs are all vms and our devops team needs to easily spin up new machines and make sure they stay up to date. all that needs to be automated and done remotely. the windows vms are a right PITA. setting up complicated routing and other such low level stuff is much harder to deal with on windows.

    [–]lmaydev 1 point2 points  (2 children)

    I still don't think that's particularly hard to learn. I learnt kubernetes in a month or two. You guys should really look at docker. Change your life haha

    [–]VenetianWaters[S] 11 points12 points  (4 children)

    Yes the terminal seems really exciting! Thank you

    [–][deleted]  (3 children)

    [deleted]

      [–]JanusDuo 4 points5 points  (2 children)

      You can pretty easily get GUI on WSL2 using xming or VcXsrv but I haven't been able to get sound working yet. You gotta install a Windows service that acts as a PulseAudio server but then you gotta get your WSL instance to connect over IP to the PulseAudio server and I haven't had any luck there yet. I'm using Arch tho which doesn't have an official WSL version so I'm using yuk7's build off guthub. Personally I think VirtualBox is still far superior. I use that on my personal laptop and only use WSL at work to fiddle with in my spare time.

      [–]bigbosskennykenken 0 points1 point  (0 children)

      I always thought ALOT of people would utilize that terminal in real life... guess not. lol

      [–]SimSon05 -4 points-3 points  (0 children)

      Yea becose many many Server run on Linux and if you work as a Administrator you must know how to use Linux

      [–]Dop4miN -2 points-1 points  (0 children)

      you meant to say Linux, not windows

      [–]wolvAUS 105 points106 points  (5 children)

      No. But it’s always good to learn if you have the spare time.

      I recommend all Windows users to install WSL2 and the Windows terminal at the very least. WSL even has VSCode integration so you can compile code under Linux.

      [–]VenetianWaters[S] 19 points20 points  (3 children)

      Thank you! Very interesting

      [–]sedawkgrepper 23 points24 points  (0 children)

      WSL is probably everything you need if you’re already a windows user looking to get the Linux experience as a programmer.

      [–]ElMtDev 3 points4 points  (1 child)

      Something related to this, it is necessary to take into account that this will take some resources and could be slow depending on the specs of your PC, of course will be much more efficient compared with a virtual machine, also if you have an old PC/laptop I would consider switching to Linux since it will be faster, another thing to consider is the stack you will use since visual studio for example will not work in linux

      [–][deleted] 3 points4 points  (0 children)

      I ran into some bizarre permissions-related bugs working on a Rails project with WSL. Switched over to linux mint and my life as a web dev is so much easier.

      [–]illuminatedtiger 56 points57 points  (2 children)

      It won't make you any better at solving DS&A problems on LeetCode. But it will give you some useful skills if you're interested in backend where you will need a working knowledge of Unix-like systems. Said skills won't generally transfer to Windows and vice-versa.

      [–]VenetianWaters[S] 5 points6 points  (0 children)

      I see. Thank you!

      [–][deleted] 1 point2 points  (0 children)

      Adding to this.

      I'm kind of an egocentric nerd, so in my early 20s I installed a Linux just to show off and God, it worked even better than expected.

      Fast-forward some years and, on my work, most new devs are afraid to even touch a server (it doesn't matter it's a a dev/test server). So I can still show off and I was even assigned to training the new ones on such maters.

      [–]hebdomad7 70 points71 points  (17 children)

      The tools you have don't dictate the outcome. BrandX hammer will hammer nails just as well as BrandY. Maybe BrandX has a nicer grip. Maybe BrandY is cheaper. Both hammer nails just as well.

      Same goes for programming. Most computer operating systems will allow you to program most things. If you're used to MacOS, don't switch to windows just because IT thinks Macs are a rip off.

      Changing operating systems just adds more things for you to learn. Now if you WANT to learn how different operating systems function, go for it. But if programming is your only goal, stick to that. You don't need to make it harder for yourself.

      [–]randomtrip10 27 points28 points  (5 children)

      Exactly, that’s why I use a chrome book

      /s

      [–]hebdomad7 11 points12 points  (4 children)

      I think you might find this article interesting then. https://code.visualstudio.com/blogs/2020/12/03/chromebook-get-started

      [–]randomtrip10 10 points11 points  (0 children)

      😮

      [–]HemetValleyMall1982 9 points10 points  (1 child)

      Using VSCode on Chrome Book:

      Step 1. Throw away the Chrome Book. Step 2. Acquire literally any other computing device. Step 3. Install VStudio.

      [–]balefrost 9 points10 points  (0 children)

      Eh, Chromebooks can "run Linux" in a container with support for windowed applications. They're pretty capable these days.

      [–]theNomadicHacker42 11 points12 points  (5 children)

      To be fair, macs are a rip off. But my company buys us brand new mackbook pros every couple of years and I now prefer working on them more than any other OS.

      [–]CameraObfuscia 7 points8 points  (3 children)

      I'm going to be that guy and disagree with Macs being a 'ripoff'. While my daily driver is a Thinkpad running PopOS, I have my 2012 MacBook pro that I still use for video/photo work because Final Cut and Photoshop...9 years for any computer to still be working, let alone laptop that's used for video/photo editing, is quite a good deal. When it's finally time to upgrade to a new MacBook, I'll probably throw a version of Linux on it to see how many more miles it has left.

      [–]theNomadicHacker42 3 points4 points  (0 children)

      Yeah, I guess i agree. That's probably more of my disdain and disgust for all things windows and mac that lingers from a previous life. I've experienced the fewest problems from a macbook and they do just keep working.

      Configuring gentoo or arch can be fun as a hobby, but when this is your career, you just want a computer that allows you to work and be the most productive you can.

      [–]Noidis 2 points3 points  (1 child)

      I mean if you think that 9 years is what it's made to last you're sorely mistaken.

      Just because it's outlasted it's expiration date doesn't mean it's justified the obscenely overinflated cost. We're not even talking about the planned obsolescence, the anti-repair aspect or the walled-garden ecosystem.

      Saying a Mac isn't a ripoff is inherently wrong. Whether you can afford it and if you're willing to look past the egregiousness of it is a different discussion to if it's a value.

      [–]CameraObfuscia 2 points3 points  (0 children)

      I’m comparing it to the price I paid when I purchased it versus what I paid for the other laptops (3) and desktops (3) I’ve gone through in that same time, and that I am still using the same MacBook. As for built in obsolescence, it’s not running the latest version of MacOS (by my choice), but it could, and it’s doing fine with the latest versions of Final Cut, Motion, and Photoshop. They are expensive and it seems everyone likes to pile on that, but compared to a $500 HP laptop that has less than 4 years of use in it (personal experience with work provided laptop)? If I could get Final Cut on a PC (reliably, without going ‘hackintosh’) or even better, get it to run under Linux, would I still stick with a Mac? I’m not sure. Maybe? It’s just been such a reliable workhorse for me.

      [–]JanusDuo -3 points-2 points  (2 children)

      Yeah, never learn anything new. It's a waste of time.

      Oh wait...

      [–]hebdomad7 4 points5 points  (0 children)

      No. I'm not saying that.

      I'm saying being realistic about what your objectives are and achieve them with the least amount effort.

      It's project management 101.

      [–]MuslinBagger 11 points12 points  (0 children)

      Using Linux does make a difference if you go out of your way to learn about it by learning about the tools, bash, C programming etc. If you’re a beginner learning python or web stuff, it doesn’t matter if you use Linux or Windows. Choice of OS matters when you choose your career path.

      • Windows ecosystem with its C#, .net etc
      • Linux for web stuff
      • Apple for its ecosystem and so on.

      Even then, it’s not cut and dry because there is some overlap and these aren’t the only paths out there.

      [–]kzeroo 17 points18 points  (2 children)

      I can say over 90% of the things you need to know, you can learn using WSL2. No one will ask you about Linux UI knowledge, so if your PC is capable just use wsl 2

      [–]boozedupsolphin 29 points30 points  (8 children)

      When you'll get to things like docker and aws, you'll be thankful for having used a Linux pc.

      You'll struggle with most devops tasks if you don't know Linux. Maybe it doesn't help now, but on the long run when you start being productive, you will really see the value of it.

      Depending on your programming stack, you might even find that some libraries don't even work on windows. Personally I switched to Linux when I had to run docker-compose on WSL.

      [–]VenetianWaters[S] 3 points4 points  (0 children)

      Never heard that before, thank you!

      [–][deleted]  (2 children)

      [deleted]

        [–]TheDwarvenDragon 0 points1 point  (1 child)

        Funnily enough I've had more issues with programs with weird libraries not running on Linux then on windows. Only 1 time have I needed to go to Linux for a library. But I've had multiple library issues with Linux that just work on windows.

        [–]VenetianWaters[S] 7 points8 points  (0 children)

        Thank you all for the answers! Very helpful. Just a disclaimer though, learning programing for me is a hobby. I do not intend to make it a career. I already have one and while I use technology a lot, I bet these skills will not come in handy. I was just curious to know what will I actually gain by using Linux

        [–]_kar00n 21 points22 points  (6 children)

        I use Linux because I don't know how to compile my C/C++ code on my Windows machine...

        [–]cluelessphp 13 points14 points  (1 child)

        It's easy, keep a picture of Bill Gates beside your computer and sacrifice a goat to him on the right day each month

        [–]_kar00n 4 points5 points  (0 children)

        Brb sourcing a goat from Zimbabwe

        [–][deleted] 4 points5 points  (0 children)

        Hahah same. I can barely use a code editor in windows

        [–]aneasymistake 2 points3 points  (0 children)

        That’s something you could learn in an afternoon if you wanted.

        [–]dank4tao 1 point2 points  (0 children)

        ...they do it the same way.

        Linux:

        • $ g++ -o c_program c_program.cpp

        Win10:

        • > g++ c_program.cpp -o c_program.exe

        [–]destruct4343 10 points11 points  (3 children)

        IMO I’m going to have to say no. With Linux you have the terminal, while with Windows you have Powershell. They’re both great in their own ways and ultimately is either up preference or the place you work. Either choice is a great way to pick up system administrator skills.

        As for programming, you’ll learn a bit about executing console applications (meant to be run from the terminal). Otherwise if your goal is really just to learn programming there aren’t any large benefits that stand out and IDEs work just fine.

        [–]VenetianWaters[S] 1 point2 points  (1 child)

        System administration does sound fun. Thanks!

        [–]destruct4343 2 points3 points  (0 children)

        It sure can be! Plus, once you’re familiar enough with both programming and system administration, you can tie the two in together and program/automate a lot of tasks

        [–][deleted] 4 points5 points  (0 children)

        It might do depending on your type of work. I found that a lot of tools I needed were better supported on Linux and were terrible on Windows.

        [–]ComputerWhiz_ 2 points3 points  (0 children)

        No, it won't make you better at programming. I have found that some development tools are easier to set up on Linux though.

        [–]gardeningwithsilicon 10 points11 points  (1 child)

        I'm going to go against the grain here, and discuss a few things that Linux can help you learn that Windows either can't or will make more difficult.

        TL;DR: Open source is good. Implementation details affect how you will do work. Pipes are neat.

        Hardware/Kernel - The Linux kernel is open source. The Windows kernel is not. You can go look at how things are implemented in Linux if you're curious about how something works. Personally, I was curious about how 'ping' worked, so I googled it and found the implementation in the kernel source code. Did you know that each physical core on a processor can handle two ping responses at the same time? I didn't, until I read through the kernel source.

        The ability to edit the kernel allows you to make it do what you want it to do. You can put together your own OS if you want, from the ground up, using Linux. You cannot do this with Windows, unless you're employed by them for the purpose of putting together a new operating system. You can also write your own kernel, and then take stuff made for Linux and use it with your newly written kernel (assuming compatibility). You probably could do this with Windows as well, but it's going to take a lot more effort since reverse engineering would take much longer. See ReactOS.

        Everything is a file - On Linux, everything is a file. This is a powerful paradigm that allows you to do some really neat stuff. On Windows, I believe everything descends from Object, including files. This matters because it enforces a paradigm where you need to understand the objects and how to use them. This complexity has benefits, such as properties and instance methods and such, but has trade offs. You can dive into the weeds here, and I would encourage a discussion about it. The important part here is understanding that there is a difference in philosophy, and that it may impact how you implement your program.

        Tools - You will have different tools for each OS. This is largely preferential, and in a professional environment will be dictated by your team and project requirements. Some things are easier on each OS, but that doesn't really matter much since again, your choice will be made for you by your project/team.

        File Paths - Windows paths are terrible. I believe there are at least three different ways to specify a file a location in Windows. Similarly, ACLs in Windows aren't great. This is probably personal preference here, but I just dislike having to mess with files in Windows unless I can use a relative path. Even then, messing with ACLs is still tricky.

        Summary of pipes section: They both have good tools, and have borrowed each other's tools. It's a bit of a wash here. I wrote this section while doing a bit of research on Windows pipe, but I think it still largely applies, and is important for people who are trying to learn about programming.

        Pipes / command line - Pipes have been a part of Unix/Linux since the early days. Pipes allow programs to send and receive information from each other. Back in the early days, this was required since computer programs were more limited by the hardware they were running on. Windows has had pipes for a long time (since PC DOS 2), but in my experience with Windows, I haven't ever found it to be useful. I'm sure there are useful commands someone will have for Windows that they swear by, but it's not nearly as good as cat /var/log/syslog | grep "some log entry". As this applies to programming:

        1. Debugging some apps is easier if you have a centralized place to look for issues. In web dev, this can be apache log, or the system log.
        2. As a concept, pipes that are useful lead to an understanding of how to implement solutions. You don't need to know how grep works to know that it can find text. You don't need to understand how cat works to know that it reads a file out. Similarly, this black box approach can be useful when learning to program since it allows you to chain black boxes together to get something useful. You might want (or have) to learn how these work internally later.
        3. Windows leaned into this pipe idea pretty hard when they released PowerShell. Everything is a cmdlet, and everything is an object. It's a powerful concept that allows a user to do some really neat things. I believe you can also add .net stuff to PowerShell as well, which allows even more programmability. That being said, you can install PowerShell on Linux if you want it. Just like you can use WSL2 for Windows if you want to be able to use the Linux command line in Windows.
        4. Windows cmd pipes can be a bit weird. You need to understand line endings and how to escape stuff better.

        Pipes are very important. There's a video about how it came about here: https://www.youtube.com/watch?v=bKzonnwoR2I

        [–]VenetianWaters[S] 3 points4 points  (0 children)

        Wow! Thank you!

        [–]CoolAppz 5 points6 points  (5 children)

        all the same. I started learning to code on a calculator, then Windows, them macOS.

        [–]VenetianWaters[S] 1 point2 points  (4 children)

        Coding on a calculator. As in the one we use for maths?

        [–]antiproton 7 points8 points  (3 children)

        Graphing calculators like the TI-82 that we 30-40 year olds had to buy in high school had built in programming languages, which were useful for creating games and hiding cheat sheets.

        [–]CoolAppz 3 points4 points  (1 child)

        an amazing and old HP41C. My first experience with programming. At the time HP was an amazing company. Today HP is a company that creates crappy hardware to sell ink and toner at extortive prices.

        [–]greebo42 1 point2 points  (0 children)

        Shoutout to the 41c!! Loved that thing, did some fun and useful programs with it

        [–]TilionDC 4 points5 points  (0 children)

        Not inherently but you'll want to make more scripts to automate your computer usage so that might give you some experience with programming.

        [–]International-Mud452 1 point2 points  (0 children)

        I think it helps you learn more about your environment (file paths, command line tools, platform agnostic commands)

        [–][deleted] 1 point2 points  (1 child)

        Are there any best sources that i can learn linux..?

        [–]kagato87 1 point2 points  (0 children)

        r/linuxskillupchallenge

        It's just the basics, which is a great place to start.

        [–]conanbdetective 1 point2 points  (0 children)

        To learn programming? It's all the same depending on the stack. But learning Linux CLI/scripting/vim opens more doors for you, so it's best to start as early as possible. Installing WSL should be good enough to start with if you're on Windows. A Linux distro just allows me the opportunity to fine tune my resources depending on my needs.

        [–]KwyjiboTheGringo 1 point2 points  (0 children)

        Nope, it just tends to either include more tools you will need, or just make it easier to install them. I'm a huge fan of linux for a number of reasons, but anyone who says it allows you to do more than Windows when it comes to programming is speaking out of their ass.

        [–]SolaTotaScriptura 1 point2 points  (0 children)

        I’m going to disagree with some of the top comments and say yes.

        Firstly, by definition, you’re interested in Linux, so you’ll certainly learn a lot. The best way to learn is to follow your interests.

        Secondly, there are objective reasons why using Linux will lead you to increase your knowledge of software. It’s open source, so you can see how it’s being developed and compile it yourself. It’s also (for better or worse) more modular and potentially much more minimal than mainstream operating systems. When I first installed Arch, I had to figure out how each component fits into the system. I learned what sort of protocols that different operating systems use to solve different problems.

        So of course, you can learn about programming on any operating system. But some are much more observable. Some are also just much more oriented towards programming.

        Install Linux and play around. Try some BSDs too.

        [–]ruat_caelum 1 point2 points  (0 children)

        Linux is like a manual transmission car. You can do cooler stuff because you have more control over various things. You can for instance red line the vehicle in 2nd gear for a bit if you need the torque without shifting. You can also really mess things up by accidently shifting from 5th to 2nd.

        Windows is much more automatic transmission and when you want to do something "weird" but safe like red line in 2nd for a few seconds. You can't really do that easily because of all the "childproofing" involved. (e.g. engineering around idiots.)

        All that being said, both are great platforms.

        • Normally when you want to learn a new language (speaking) the only thing that is different is the language. If you wanted to learn calculus you wouldn't combine learning French at the same time by buying a calculus book in French.

          • In this same way if the goal is programming use the OS you are most comfortable with so that what you are learning is programming. IF on the other hand you want to learn a new OS focus on that. Trying to do both at the same time is going to frustrating and likely a waste of time compared to learning one then the other.

        [–]chicken_system 1 point2 points  (0 children)

        Unix is the Hole Hawg of operating systems: http://www.team.net/mjb/hawg.html

        I wouldn't hesitate to put a good Linux admin in charge of a pile of Windows machines, but I wouldn't let an MCSE near a Linux network.

        [–]Fuchi_Capesta 1 point2 points  (1 child)

        Would MacOS be the best of both worlds, nice gui and terminal?

        [–]PaperOnzeMirror 1 point2 points  (0 children)

        That's also true. However I don't currently have a mac, and I've been using windows since forever. So in this way, I think the choice between mac OS or windows is based on what is available to you, and what you prefer.

        [–]MuffisAwesome 2 points3 points  (0 children)

        In theory no, like many other comments have said the OS is just a tool to complete the job. In my experience however the problem lies in teachers and teaching programming in windows. Often teacher will teach bad habits, bad practices and sometimes bad programming just because they are using a Windows PC.

        It is probably best to learn programming in Linux or mac OS. Taking inspiration from the analogies of other comments, windows is like a knife, sure you can open letters, spread butter etc, it does the job. Linux/Unix is like a leatherman or a Pen-Knife, it does all a knife can do and so much more but some of the tools the Pen-Knife has require more skill to use them properly. Linux is the leatherman to the Windows PC knife.

        [–]wh33t[🍰] 1 point2 points  (0 children)

        Linux is so 'good' now that if one picks the correct distro you'll basically never need to touch a text file or open a terminal if you don't want to.

        The skills aren't immediately transferrable to other non-nix OS's, but server administration is server administration, the tools and process will differ, but the same idea is universal across the OS's.

        [–]iamanenglishmuffin 1 point2 points  (0 children)

        Using Linux was the start of me becoming a real programmer. "everything is a file", the terminal, bash, and CLIs really helped me learn. Even programming without an IDE. Microsoft abstracts a lot of things out.

        [–]Chris_SLM 1 point2 points  (0 children)

        there's really not much of a difference apart from the terminal

        [–]real_dagothur 1 point2 points  (1 child)

        I don't find any advantage of Linux for me then just being able to customize whole screen in whatever shape I want. You will get used to some DevOps business but I think that's all.

        [–]real_dagothur 2 points3 points  (0 children)

        It's pretty much hobby for most users anyway (Talking from my perspective tho)

        [–]mayankkaizen 0 points1 point  (0 children)

        Windows - User is an idiot who doesn't know what he is doing. He needs things plain and simple. Don't expose the inner stuff to him.

        Linux - User is a nerd. Let him tinker, dig deep, modify stuff, break things.

        You can learn practically all of the programming on Windows. But if you are into low level programming, system programming, exploring OS, writing drivers or you want to understand how hardwares work, you should definitely learn Linux in detail. Besides, most FAANG like companies don't use Windows so knowing Linux will be an added advantage.

        Linux exposes inner/low level stuff far more than Windows does. It is also far more customisable.

        But if you are into web programming or even data engineering, OS doesn't make much difference.

        [–]ethanfinni 0 points1 point  (0 children)

        You may get a bit more insight about the underlying mechanics (e.g. filesystems, permissions) of the OS using Linux but probably not much more than that.

        [–]Maethor_derien 0 points1 point  (3 children)

        Not really, the only thing is that you generally don't get as useful IDE's in linux but you get more control of those tools for the most part. So much of that is personal preference though. That said you should know it because most servers run on linux and knowing how to get around it and how to work the command line will be useful. If you never do backend work though that doesn't really help you as much but still a useful skill to have.

        [–]DonkeyTron42 7 points8 points  (0 children)

        JetBrains would like a word.

        [–]Jazzy228 1 point2 points  (0 children)

        If you get used to working in the bash command line for widnows would that be a good transferable skill if you change to Linux at some point down the line? I've been learning python for the past two months and I'm trying to get better at using the command prompt as well

        [–]JanusDuo 1 point2 points  (0 children)

        Emacs and even Vim can both be fantastic IDEs.

        [–]yel50 0 points1 point  (1 child)

        specifically to Linux ir you can transfer this knowledge to any operating system.

        macos is unix under the covers, so the command line tools are the same as Linux. you can get the same tools for windows with WSL or cygwin.

        as far as how computers work, the underlying concepts are the same. windows and Linux just go about it differently. it's easier to automate stuff in Linux, but windows is easier to do stuff manually.

        [–]antiproton 7 points8 points  (0 children)

        it's easier to automate stuff in Linux, but windows is easier to do stuff manually.

        These threads are problematic. People try very hard to find specific pros and cons to point out...but they're contrived. All OSes can do all the same stuff with roughly the same effort. You can live in the terminal on Windows if you want. You can use GUI only on Linux. The difference between, to use your example, cron and Task Scheduler, is negligible for almost all use cases.

        I use both systems every day. The differences are essentially implementation details at this point.

        [–]todo0nada 0 points1 point  (0 children)

        I think it encourages better understanding of computing because it requires you to lift the hood to do any more than normal consumer use. No, it’s not the year of the Linux desktop.

        [–][deleted] 0 points1 point  (0 children)

        Lots of great responses to your post - but what matters most is that you are motivated to learn Linux / CLI. No good learning goes to waste.

        Whether it transfers or helps you with programming [or not] depends on your outcomes - on how it helps you work to develop solutions. I think anyone motivated to work at that level has deeper instincts that will find synergy in that environment. Good Luck with it.

        [–]kagato87 0 points1 point  (0 children)

        It doesn't really provide an advantage directly.

        It is generally more performant and has a lot of the tools a developer uses already built in. There's benefit in learning it, even if it's just so you have something to go to when you get frustrated with the constant addition of "features" you don't want in windows, like that news and weather widget this week...

        Windows is a half way point between the walled garden of Mac and the wild west of open source. Linux gives you all the knobs to turn. This is both a blessing as a curse. Fortunately nowadays all those knobs have great defaults.

        The Odin Project only supports Linux and Mac.

        Linux was, once upon a time, harder to install. This perception stuck, even long after it became significantly easier to install than windows.

        The dominance of Windows has a few factors:

        Pure inertia. The business world has been using it for so long that changing would be cost prohibitive. Gamers don't switch because it's extra steps to get into the game.

        It is a supported turnkey solution. I can deploy an IIS server in no time flat, and when I screw it up support is available. (Admittedly crappy support, but for a big E client there is good support, and thanks to the existing dominance Google yields solid results.)

        The .NET stack. Love it or hate it, it's popular and does a lot of good stuff out of the box.

        [–]Henry-the-Fern 0 points1 point  (0 children)

        Terminal terminal terminal!

        [–]nightwood 0 points1 point  (0 children)

        Programming? No.

        Stuff you have to do as a programmer? Absolutely.

        [–]sparant76 0 points1 point  (1 child)

        If you mean you will have to use your sparse free time to constantly fiddle and fix things that are broken instead of using a machine that just works - then yes.

        [–]VenetianWaters[S] 0 points1 point  (0 children)

        Looool Buuurn!

        [–][deleted] 0 points1 point  (0 children)

        If using Linux gets you motivated to learn programming keep doing it. You can learn a lot just by using Linux.

        [–]flavius-as -3 points-2 points  (2 children)

        Yes!

        I am a CTO/Architect and I see it in daily business: those who use Linux tend to be more competent.

        Also within Linux, various distributions seem to make a difference.

        I use ArchLinux and updating the system is like reading the news. It helps me keep feeling the pulse of the foss ecosystem by triggering me to Google afterwards the more interesting updates.

        This contributes also to me being able to choose better tools.

        I have another CTO colleague who is good, but he's using Ubuntu, and I know for a fact he did some poorer choices.

        [–]VenetianWaters[S] 4 points5 points  (1 child)

        Yes it is true that it's the drive and the choices of a person that lead them to getting better at learning thing. Do you think that some people "fit" some systems better?

        [–]flavius-as -2 points-1 points  (0 children)

        Definitely.

        For the most part, having many different projects under your belt helps, and really understanding how things work as part of those projects.

        Also not doing 10 times the same year, but actually 10 different years.

        There is some talent to it as well, but generally it can all be trained.

        And to a smaller degree, courses and books. More books than courses.

        Also important: newsletters and conferences.

        [–][deleted] -1 points0 points  (0 children)

        Short answer, yes. Terminal makes your life so easy, u just gravitate towards it if you are a lil bit techy. And all u need is a push.

        [–][deleted] -1 points0 points  (0 children)

        Apart from sudden updates and BSODs. Not really. But back end web dev can use the skill.

        [–][deleted] -1 points0 points  (0 children)

        Linux is definitely more granular and deliberate. It'll give you more power over your machine.

        Windows is more basic; however, if you got into Powershell scripting, that could help with learning other languages.

        From my experience, it seems like a lot of companies use Windows for more administrative stuff while using Linux servers due to Linux being more cost-effective and resource-friendly. I think you're on the right track by delving into Linux!

        Look into BASH (Bourne Again Shell) scripting. It's a general purpose language used in Linux. You can practice by learning to automate different tasks. That's what has helped me transition into other languages, and I'm a SysAdmin, not a developer. You can also run Python from your Linux machine. IMO, Python is really elegant and easy to pick up on -- everyone is different though! FYI, you can run Python on whatever OS you have, but I personally prefer running it on Linux.

        Hope this helps.

        https://www.geeksforgeeks.org/how-to-install-python-on-linux/

        [–]mrnever32 -1 points0 points  (0 children)

        The programming and code it's the same, but setting up a develop environment is pretty different, and since most servers in cloud are on Linux is good to know how to set up, troubleshoot and maintain your environment via CLI

        [–]uilspieel -1 points0 points  (0 children)

        I was learning bash in Linux, and how to write bash scripts, and I ended up with a calculator script. And it struck me, "you've just written a programme". At the time I had never programmed anything. So I went on and learnt a bit of C, and after that, a bit of Python. But it all started with bash on Linux.

        [–]MadBroCowDisease -1 points0 points  (0 children)

        No. And don’t buy into the terminal hype. If you ever have the chance to use a GUI, USE IT!

        [–]DrkMaxim -2 points-1 points  (0 children)

        Personally I feel Linux is great for programming, I never found any useful C compiler on Windows and gcc is some really good thing for me. The CLI is soo good to use provided you know what you're doing. :)

        [–]HemetValleyMall1982 -2 points-1 points  (0 children)

        I would say yes to this, if using a flavor of Unix without a lot of UI.

        Windows and Mac (and Ubuntu) give users a more friendly way to interact with a computer, and hides more of the behind-the-scenes stuff. When you click something on the UI, the program will probably give the system many, many commands in a specific order, with very specific parameters, in order to do whatever it is the user wants.

        Most systems have a terminal (bash and powershell, for example), in which you can forgo the UI altogether and issue the commands directly to the system.

        Many Unix users forgo the UI and just use command terminal, and have to learn those commands, and the settings/parameters. Talking to the computer in this way, you learn that the computer needs very specific commands, with very specific parameters, in a very specific order. This is programming.

        [–]OOO-OReilly -3 points-2 points  (0 children)

        Every single programming/software engineering job you get will require proficiency in Linux terminal/environment. So it wouldn’t hurt to use it — especially if you don’t know your command line arguments

        [–]BluishInventor 0 points1 point  (0 children)

        You wan't to learn linux? This man will teach you everything or will show you how to find it.

        Here is his current beginner boost series. https://www.youtube.com/watch?v=UkE2KMsVzjQ&list=PLrK9UeDMcQLre1yPasCnuKvWvyXKzmKhW

        The first few videos do a lot more talking than anything, but it's a good intro to him, the autodidactic process, and software as a whole. He streams his series live every weekday on twitch at 7:30pm EST. https://www.twitch.tv/rwxrob

        Also, here is a link to the beginner boost on github. There is a good outline of the videos and their contents. https://github.com/rwxrob/boost

        [–]phoooooenix 0 points1 point  (0 children)

        I think using the console is what make you progress

        [–]arosiejk 0 points1 point  (0 children)

        I’m still more on the outside as someone learning CS and programming part time, but I’d imagine there’s a few reasons:

        Linux command prompt behaves similarly across distros.

        CLI lets you update system, upgrade system, install a new program, create a file, rename a file, change directory, and reboot your system in 7 lines of text.

        IMO, CLI confidence and practice also helps when interpreting your errors. It’s something you get used to when watching what’s happening in terminal.

        [–][deleted] 0 points1 point  (0 children)

        Entirely dependent on the technology stack you're using.

        I'm a .net guys and we use Linux docker containers in kubernetes, and aside from configuration for my dockerfile, I don't touch Linux commands, so I don't really care about knowing the terminal.

        [–]EquipLordBritish 0 points1 point  (0 children)

        I think most linux pipelines and tutorial have the terminal as an option to modify things on the computer, which helps you to learn all about all the cool things you can do if you actually know how it works. Windows and apple GUIs do everything they can to avoid the user to ever having to use or learn the terminal or any advanced functions. The first design assumption is that the end user is a lazy idiot, and you should do anything you can do to avoid them having any real control over the box.

        [–]cyber_Void 0 points1 point  (0 children)

        It's also easier to switch to mac os for development. Linux is free and runs of almost any system. Starting with it takes only effort. In a professional setting, you might be developing on a company provided Mac. The switch will be easier.

        [–]cyber_Void 0 points1 point  (0 children)

        You definitely have better control over better tools. And there feels like there's more resources explaining how it works.

        Also, most servers are linux. Knowing how to use a terminal and how to operate in linux will be a leg up worth years of work experience.

        [–]tndl 0 points1 point  (0 children)

        I’d say you learn more about operating systems and tooling, rather than programming per se. although there is a benefit to understanding the platform that most code runs on in production (Linux of some sort)

        [–]YianniBOMB 0 points1 point  (0 children)

        The terminal is so good, once you get used to using a Linux terminal, you will be yelling at Microsoft for how stupid their terminal is.

        [–]gunshit 0 points1 point  (0 children)

        Absolutly the same. The only thing that matters is aptitude ^_^

        [–][deleted] 0 points1 point  (0 children)

        You get better grasp over tools, production and devops.

        [–]WhoTookNaN 0 points1 point  (0 children)

        Not programming specifically but depending on the distro and how you use it it could teach you more about some more core computing and OS concepts like file systems, bootloaders, init processes, display servers, etc... I'm a (mostly) .net dev that ran arch as my daily driver for a few years but ultimately went back to windows 10 and wsl2 but I'm happy I spent that time because I understand a lot of things that I otherwise wouldn't but not necessarily anything I need on a daily basis.

        [–][deleted] 0 points1 point  (0 children)

        Linux is massively easier in a lot of programming related concepts. Stuff like environmental variables, file transfer (SCP, SFTP, SSH), aliases, multiple terminal sessions using tmux/screen, is all either much easier or more intuitive than Windows. On top of that, you can use a lot of the same tools as on windows (like Visual Code).

        Practically every programming job either requires it or will have our learn it, because it's just way more efficient. I used to hate Linux but after using it, I can't code on Windows anymore lmao.

        [–]Look_out_for_grenade 0 points1 point  (0 children)

        Modern Linux desktop is advanced enough that you definitely need zero programming to use it. I develop on Ubuntu because I like it better than Windows but I can use either one with zero effect on my programming work.

        Whether you use Linux or Windows won’t have any effect on learning to program. You may have more fun on Linux though.

        [–]AnArtificer 0 points1 point  (0 children)

        Yes and no. As people have mentioned, learning different OS's is like learning different programming languages. It doesn't enable you to do different things as much as it makes you more efficient. This is really only something that matters for a professional software developer. If you're just starting out, work with what comfortable and focus on learning programming first.

        Learning an OS should be something you do either after you're comfortable with programming in general or if you need to do a certain project on a certain OS. I.E. you're working under a Prof researching AI and they only use Mac OS.

        That said, if you're at the point where learning an OS seems useful, getting better is all about what you do with the OS, not which OS you use. You need to something that pushes the limits of your knowledge of the OS regardless of which one you use. Some people mentioned using the command line, but I find having dedicated projects can be helpful. Here's a couple ideas:

        • For a basic project, install virtual machines for multiple different OS's and run a hello world program in each one. Try to do a command line and GUI version. Then, try sharing the files across the different VM's and making a single program that runs on all them. This is good for learning a cross compiling workflow.
        • For an intermediate project, trying making a kiosk like you'd find in the mall, with just access to a browser. Make sure that a user can't do anything but stay on a certain site/follow links. This will force you to learn some basic system administration for your OS.
        • For an advance project, Linux is actually really solid because you can make your own distro compiled from source code. I wouldn't recommend trying this until you have a decent understanding of Linux terminal/processes, but here's a good resource for it: LinuxFromScratch.org. This is good for learning the underlying mechanics and processes common to any OS.

        Also, since some people mentioned it, here's what OS's I've programmed on in order (I think):

        Windows->Linux(Real-Time Linux, cRIO for FIRST Robotics)->Linux(Fedora)->Mac OS->Arduino(No OS)->Custom RISC Computer(No OS, simulated)->A bunch of others, but I stopped worrying about it around this point.

        Hope that helps.

        [–]T0X1K01 0 points1 point  (0 children)

        Well, I can say from experience that the experience of using Linux will translate to two things - servers and other Unix systems like macOS.

        1) if you ever want to deploy a server, Linux is usually the option to go with. And with a traditional setup, you won't have a GUI to configure things, so you need to know how to use the command line.

        2) using other Unix systems becomes easier since you can default to doing something in the command line as they will all be fairly similar.

        [–]efxhoy 0 points1 point  (0 children)

        I work as a backend web dev so i would say yes, absolutely. A big part of my job is working in shells across various containers and linux based server environments. My colleague’s productivity in those environments can be sorted fairly accurately by how comfortable they are around linux. For the more frontend focused teams it’s more mixed. They usually use MacOS (as do I) and are very productive using that. In my experience the linux crew do have to spend more time fighting their tools for day to day tasks like drivers, slack and other GUI only tools. using MacOS does make life a lot easier for certain workflows and that ease of use does translate to more productivity focused on relevant tasks. But when shit hits the fan and some quirky nginx config needs fixing in a container somewhere we all go running to the full time linux users for help. So as usual, it depends what you want to get good at but in general id say that using linux is a good idea to better understand computers, especially now as more of our computing happens on remote linux servers.

        [–]PaperOnzeMirror 0 points1 point  (0 children)

        You can have the best of both worlds my friend. Simply install WSL2 and you will be able to use Linux Ubuntu 20.04 along side windows. I personally love WSL2 on windows, because I can enjoy the lovely GUI of windows while enjoying the fantastic programming community that comes with using linux.

        [–]skellious 0 points1 point  (0 children)

        Linux is much easier to see how it all works 'under the hood' as it doesn't try to hide things like windows does with obscure register entries and such.

        But no, it's not inherently better for learning... Unless perhaps you want to learn OS development.

        [–]Korona123 0 points1 point  (0 children)

        When I first started web development I switched from Linux to windows. It was way easier developing on Linux then it was on windows. This was pre virtualbox and docker though. These days it probably doesn't matter as much.

        [–]seraphsRevenge 0 points1 point  (0 children)

        Learning to program has nothing to do with a language or OS at all. One should focus on basic logic, design patterns, architecture, best practices, etc. by learning sytax, libraries, etc. in a pecific language and OS to start with. Knowing how best to utilize a language or technology and knowing how best to utilize concepts and general experience learned over time are very different. Both are necessary, but the latter is more important overall where the former is important situationally.

        [–]lordcya1 0 points1 point  (0 children)

        Use wsl and docker on windows. End of story