Recs.
Updated
With the advent of high level cross platform languages and the standardization of things like HTML5, CSS 3 and Javascript, the OS is fast becoming irrelevant in learning to program. For example, one could simply choose to learn to program for the web in Javascript and simply do all of their coding on services such as code pen, koding, etc. Alternatively, one could choose a more "desktop" friendly language such as Java and build cross platform apps.
Specs
Pros
Cons
Con You may still need to deal with idiosyncrasies
Most cross platform environments can't abstract away all the OS specific idiosyncrasies. For example, starting Java applications as a service is something Java cannot do out of the box. So you are left to come up with your own solution for that. NPM's scripts are not inherently cross platform, so if you use them while developing with Node.js, you may need to find your own ways to make them cross platform.