4 ms·
There are a few different things that fall into "Linux Development". 1) Comfort/facility with something like the bash or zsh shells, including scripting (as a
by _dps 15y ago
There are a few different things that fall into "Linux Development".
1) Comfort/facility with something like the bash or zsh shells, including scripting (as a kid I wrote complex .bat files for DOS, and bash scripting was a revelation). If your'e on Windows you can acquire this knowledge efficiently by installing Cygwin (which provides a bash-like shell).
2) Knowledge of the common GNU tools, and common piping idioms (e.g. "grep pattern myfile | sort | uniq" to find all the distinct matches for some regular expression in a file). Piping in general is something that you don't often use in other environments. Again, this is knowledge you can acquire efficiently in Cygwin without Linux.
3) Understanding the various pieces that come together to make a (non-graphical) Linux environment work. For this I strongly recommend starting with an emulator like qemu ("Q" is the OS X port) to emulate a vanilla x86 machine and then get Tiny Core Linux running on it. Tiny Core starts from the absolute minimum, but gives you a convenient graphical "app browser" for installing the things you need piece-by-piece (read about and install coreutils, openssh, "compiletc" (gcc + glibc), make, and optionally python or ruby).
4) Becoming proficient in one or both of the holy traditions (vi or emacs). Tiny Core will have vi already installed (to get an idea of what the holy war is about, consider the fact that vi is included in Tiny Core but the emacs source download is about four times as large as all of Tiny Core).
I'll elaborate a bit on the qemu aspect. One of my biggest frustrations getting started with Linux was getting my hardware to work "right". While that was more than a decade ago, and most hardware will be autodetected on a modern distribution, there are still many tiny annoyances (power management, GPU acceleration, trackpad gestures, bluetooth, whatever). Qemu makes all these problems go away because your host OS handles the hardware. Learning Linux coming from Windows is hard enough without chafing from hardware problems.
For someone from a Windows background, 80% of the important ideas about Linux can be acquired incrementally by using Cygwin to learn about bash, and a virtualized Tiny Core to understand the Linux tools ecosystem. At some point you'll know these things well enough and you may want to run a for-real linux machine (though I personally have converged on OS X with a virtualized Tiny Core for development work).
If you do all of that, you will know what you need to be a Linux application developer (though you may need to learn something like GTK to build graphical applications).
If you decide to go the Qemu/Tiny Core route, feel free to email me with any questions (email in profile). It's actually easy, but not super-intuitive if you don't have experience with Qemu.
- WickyNilliams 15y agoWow, that's a thoroughly comprehensive response. I've never investigated tools like Cygwin or Tiny Core, but they sound like a great starting point. Incrementally is definitely how i want to learn Unix as there are so many radical paradigm shifts for me to get to grips with i risk overwhelming myself if i get too immersed. It seems, as i get more replied here, that the command line is so integral to Unix that my original plan to avoid that as much as possible (i.e. just get on with web development) is not realistic. Your recommendations will help immensely now that i've come to that realisation. To be honest, some of the hardware compatibility issues you mention aren't of much concern to me (providing i don't encounter any serious issues, i can deal with bluetooth not working for instance) as i plan to dual-boot windows/linux and still use windows as my primary OS, but linux for dev. I should perhaps edit my question title to be more clear, as i'm specifically interested in web development via Linux (at least for the moment), but thanks for the advice on native app development. I'll be sure to get in touch if/when i go down the Qemu/Tiny Core route. Though consider this prior warning that you're opening yourself up to a constant stream of emails from a frustrated linux noob ;-) Thanks again for the detailed answer
- _dps 15y agoAh, web development. I see. Well, that's actually 90+% the same on Windows for most use-cases. For example, if I were starting a small web app in Linux I'd probably use Python and Bottle. I'd do the same on Windows. To be clear: I'm not recommending that you use Windows to deploy web applications in Python. I'm just saying that you can develop the applications on Windows and deploy on Linux with very little hassle. Unless you actually care about native Linux applications, or specific performance-related features like Linux's epoll (or BSD's kqueue), then you can definitely jump into "the Linux way" of web development with Cygwin and either Python or Ruby. I haven't used Ruby since 2005, but in Python most of the difference between Windows development and Linux development is details of the os and sys modules (anything else has to do with stupid details of threading performance). On a second reading, it sounds like you might be conflating getting beyond .NET with Linux development. It's entirely possible to learn Python or Ruby web development on Windows, though I'd strongly suggest either using a full Cygwin installation or at least Unix Tools for Windows (http://unxutils.sourceforge.net/ http://unxutils.sourceforge.net/). Linux is worth learning, but it's not the same thing as (for example) Python web development. They're mostly independent. Things like Node.js are still mostly *nix-only (last time I looked), but I'm sure that will change over time. On the positive side, you can get Haskell/GHC for Windows ;-)