Linux is open-source, as well as the most components from Linux distributions. If you hit an issue, it is usually trivial (but not always) to narrow it down to the specific module and/or configuration. If you need to understand how to do advanced things, you can look up source code and you will understand it.
The main problem with Windows is a space comprising barely understandable layers. That’s it – a typical Windows user manages complexity pretty well, but only as long as internals are not concerned. The internal side is a big black box, and even if you have a complete Windows source code, it remains hardly understandable.
Instead, in Linux, there are no black boxes. How does it help new programmers?
- Every day you deal with a well-designed and well-decomposed operating system. You learn how to decompose problems. You learn to solve them efficiently. It doesn’t happen with Windows/proprietary toolchain as you only hit the tip of the iceberg.
- During an everyday routine, you learn how layers are bound together. You see the commands which can be used. You notice that building applications is not about hitting “Build” in IDE, but it is an invocation of compilers and linkers.
- You fix issues happening in your Linux distribution. Sometimes they can be searched for, sometimes you have to dig in logs. Efficient problem-solving skills won’t appear with time, they only appear if you solve (many) issues over time.
- In the end, your expertise improves with a larger coverage of all domains your work is made of.
The takeaway advice is: don’t stick with operating systems, IDE’s and other tools that simplify your daily routine. Learn your toolchain and make greater use of applications made by the community. Your development process will eventually become simple, alongside you will learn how to work more efficiently.