1. Every library known to man exist for Linux and is very easy to install, build from source, hack on, and customize, especially if you know what you are doing. This is comparably easy enough on Mac since its Unix based but Windows is its own beast when it comes to building from source and getting custom libraries working, etc.
2. You have complete control of your operating system and programming environment.
3. I don't program for iOS or .NET, so I don't need anything offered by other operating systems for Development purposes.
4. The languages I do program in have great ecosystems and development environments on Linux. These are : Android, Ruby, Java, JavaScript, Python, R and the occasional C/C++.
5. I don't write desktop software and virtually all software I create is deployed on Linux systems, so I write my code in a similar environment to the one its going to get run in (exact environment using docker, vms, etc if necessary).
6. Finally, I'm philosophically much more aligned with the democratic and decentralized spirit of Linux and Open Source than I am with closed source and centralization espoused by Msft and Apple. Admittedly, if their products were significantly better for my purposes as a programmer - I'd use them, since I'm not a Richard Stallman, but this is still one of the reasons I continue to use Linux. I think its a positive thing for the world.
Linux and starting to learn programming: if your goal is to learn programming (python) then the operating system doesn't matter. I'd concentrate on popular Python libraries. Switching from Windows to Linux will only grow the number of unknown systems/pieces to feel uncomfortable with and add distraction. It's fun to learn, just separate from programming.
I note you submitted 9 questions in the last day alone. This week 4-5 questions just which IDE/text-editor other developers use, the answers tend to repeat. There will always be a better coding setup (grass is greener) and the preference of editor is as old as programming itself.
The only certain thing Linux is the best operating system for is learning Linux. Learning Linux is not learning to code. It is not a step on the path to learning to code. Mostly, it is a distraction from getting started. There is time to learn Linux later...http://norvig.com/21-days.html
Good luck.
The last thing I want to do when learning a new programming language is waste a lot of time trying to install all of the dependencies/libs/compilers, being nagged by the OS to reboot because updates were installed, having cortana randomly pop up (it's like the modern day clippy), and deal with a host of other things that windows does to get in your way.
The important part of learning to program is sitting down to program and sticking with it despite its difficulty. Developing habits of mind is what makes a person a programmer. A lot of beginning programming resources are OS agnostic because they run on the web and Firefox/Chrome/Edge/Safari/etc. are fungible (and of course HTML/CSS/Javascript are also OS agnostic).
Going with "the operating system you are using" does optimise quite a few things; these are the "pros" of this approach, things like:
- not burdening yourself with the learning curve of a new OS at the same time as you undergo the learning curve of programming
- being able to ease the programming effort by taking advantage of microefficiencies you've already gained from friend use of the OS.
- etc.
This has to be weighed against potential cons though:
- how long do you intend to program for (presumably some large multiple of the time it would take to learn a new OS)
- what is the actual difference in overhead of using development tools on the two OSes–if you're repeatedly undergoing a little extra overhead for every dev task on your current OS, this builds up over time
- if you intend to simply defer learning Linux to a later date, what's involved in switching your dev setup over? Will there be habits and disinformation to unlearn in the process?
Quote from Windows Weekly 557 https://twit.tv/shows/windows-weekly/episodes/557?autostart=... "Future of Windows apps is to have Visual Studio on Mac and deploy software to Linux Docker containers."
There is no Windows servers anymore at top 500 supercomputers. It's all Linux.
Ultimately you'll need to deploy software somewhere, and you will need to understand what is happening when the software has a problem. You often won't have a choice about the operating system on which your software is deployed, and you will still be expected to understand the OS well enough to work with it.
I say focus on understanding what is happening to the extent that you can. Always be curious. Always learn. Always strive to learn what question you should be asking to get the answers you seek. And when the trusted advisors & Google fail to answer your questions, that's where the real adventures begin. And, if you'd like to make money, don't forget make find a way to get paid.
1) Most of the tutorials online are written for linux 2) installing dependencies on windows is a bitch sometimes (75% of time I can get stuff to work on windows other times I give up because of lack of availability of certain packages and compiling issues).
It's my opinion that you will eventually need to learn how to operate in linux, so what I'd recommend you do to help with learning: - Install Hyper-V if you have Windows Professional, this way you can install various linux distros (start with ubuntu, then debian, then centos possibly). - install Bash for Windows - install docker for windows
http://www.evernote.com/l/AUkyLCQy0YJFQYIxEsVqV1nD1fUEpd4Uqf... ^ how to turn on hyper-v and bash for ubuntu on windows
The reason Linux is used a lot is that a lot of software development is writing web applications which typically run on Linux on servers. You can explore Linux on your Windows machine using tools like VirtualBox to create a virtual machine running Linux. You don't need to dual-boot, reformat your system, or spend any money to learn it.
What flavor of Linux should you learn? It doesn't matter for just starting out. You could post a question and get lots of technical arguments about one vs the other.
For a lot of technical topics, the same concept applies - you are in a learning phase, pick a common one (programming language, operating system, etc.) and learn using that. Once you reach a comfort level and feel confident you can "get things done", investigate differences between what you learned and other options out there.
It seems to open up a new world, where you can program what you need to use. Sure you can do this on windows, but on linux it feels like you're closer to the smell of sawdust.
Also, when you likely deploy your server to something like AWS, it'll probably run on linux, so there's that consistency.
You feel like you live inside the internet. Because the internet runs on linux.
I'm typing this comment from a debian laptop. This laptop isn't super fast, but debian makes it seem totally fine, whereas windows makes it sad. (speed boost).
I'm thankful when I use linux. When I see all the lines of computer code at startup and during install, I think of all the time someone put into that, wow, so glad.
As a game dev, i like to play games as well and there are a fair bit that are windows only. The only wine app that worked was lutris. Everything else crashed with vague errors and no info online. Even then, games were slower (as expected) and often had errors. John Carmack had made a post before that he doesn't really see Linux as fit for gaming and that effort should be put into making wine better due to how few people on linux make up sales sales and I agree.
The community can be quite unhelpful as well. A lot of people are elitist and use their ego to bash people's choice of software or at their problems getting things working. There are a lot of genuinely helpful people as well though, just not as impactful.
I think linux will have a place in tech like servers and lightweight gadgets like Android, but not for every day use. And I've used Linux every day before. Instead of making multiple distros that due some of the same thing, the community could have focused on solid high quality apps to become competition to windows. Ubuntu is the best thing to that and even that isn't very usable. Using Windows, things just work. I'm uncomfortable with how Microsoft treats users but was more willing to put time into improving privacy and interference on an OS that can last. I'm still an advocate of linux, but only when it's needed.
10 years ago the situation was a lot different but now even Microsoft is a huge proponent of open source development tools.
Ceding some control for putative convenience might -- MIGHT -- have been justifiable in the 90s. But it's 2018, Linux graphical shells are on fleek (if that's your thing), and your only excuse is if there's some app you NEED which requires Windows and doesn't work with Wine. Which isn't a problem for developers, except on a few proprietary platforms (like iOS).
Defaulting to Linux as you learn to develop software will build the skills you'll need to remediate the "software to do X is not available on Linux" problem should you come across it.
I recently moved to a job where my development laptop is Windows-based, after having a Macbook Pro at the last gig (I'm told we're working on getting Macs for developers). Windows 10 is still pretty bad in a lot of ways, large and small. Not having homebrew, apt, or yum to manage packages is a pain. I'm using elementaryOS running in VMware Workstation as my primary dev environment for the time being...
Recently, Windows has somewhat caught up in that respect but so far nothing beats a native Bash (or similar shells) environment.
So I prefer to run Linux in a vm and focus on coding vs. trying to fit a square peg into a round hole and spend my time o troubleshooting the environment.
There are a number of interesting technologies that have better supported dev environments and less frustration for the inexperienced on Linux, but there is plenty you can learn and do fine on Windows, and that avoids the cost of learning a new OS just to learn the basics of programming.
Linux can wait.
(Note, if you have a particular thing you are learning for, and the best tool for that is heavily Linux -- or, at least, UNIX-like-OS -- biased, you might want to learn Linux early on so you can use it, but otherwise, there's time for that later.)
But if you're just now learning to code, focus on that and use whatever OS you are already comfortable with.
With that said, when I made the switch to Linux, I also decided to learn C. So I had two new things to learn and both had a steep learning curve, but C and Linux go hand in hand and are complementary skills. It was a lot of fun.
The added benefit of doing it this way is that I'm not really tied to a machine - all I need to do is clone my repos onto a new machine and I'm basically good to go.
If you are doing more general web development then there is a good chance you will be using a Linux server so it makes sense to learn it - your dev environment will be more similar to your production environment. There is plenty of open source software and material available so you can try things out.
For me, Linux (or even OS X) is better because in general building existing packages is easier than on Windows. A lot of tooling is built on Unix-y platforms: to use Windows you have to play a lot more games.
To be fair, Windows has vastly improved its support for many of the most common tools, and cross-platform development has advanced enough that it's not the major issue it once was.
But to actually answer your question, one of the things I like about developing on Linux is deploying onto a Linux server is a lot easier.
Plus, every aspect of the operating system is ready to be explored, if you want. If there's something you don't like, just change it, rebuild your program, and you're good to go.
You are going to read code all day -- that comfy feeling when reading them is important
It's "learning what's under the hood" - which I guess is an expression that comes from auto mechanics. To really learn how cars work you need to open the hood and interact with the engine.
That is not a valid comparison as Visual Studio is an IDE and gcc is the compiler. It would be no different if you were using CLion from Jetbrains on Linux to do C/C++ work. The compiling would be handled all through the IDE. You are more than able to get down and handle building C++ from command line by using cl