28

I'm a PHP/Python programmer learning Java and C#(.NET).
My main development OS is windows 7 but I've used Linux and I currently dual-boot with Ubuntu. My Linux knowledge however, is pretty limited. I can work with the command line on simple tasks but that's pretty much it. I don't do any shell scripting and I don't know many important commands.

My interests are web development, mobile apps and maybe some embedded stuff in the future. Will shell scripting skills be useful for these interests and if so, how?

5
  • 9
    Whoever told me 5 years ago "Real men are fluent in C++, real men use command line and boot their Linux from a floppy image" - fvck you! I want to tell them "real men" use their head and pick the best tool they can find for the job. They also know how to have fun in life outside of work. Ladies, sorry for the man-centric answer. By "men" I do mean programmers, but that is not how it was worded at the time.
    – Job
    Feb 6, 2011 at 21:07
  • 3
    Whoever begins an argument with "Real Men" are either joking, or full of sh*t. However, idiots like this shouldn't detract for the value of understanding things that, in the beginning, seem difficult, shell programming vs dragging GUI things around is often a hell of a lot more efficient. And if certain C++ centric factors are absolutely necessary, then C++ is the way to go. (ie. high performance, or more essentially, the use of a C or C++ library/existing codebase... etc.) - basically, if you're not pragmatic, forget this line of work.
    – ocodo
    Feb 7, 2011 at 1:34
  • 6
    @Slomojo: Real men love their wives and children and treat them well. ;) Feb 20, 2011 at 17:01
  • @Mason, you are a prince sir.
    – ocodo
    Feb 20, 2011 at 21:25
  • 1
    PHP/Python is frequently deployed on Linux boxes as they are cheaper than Windows boxes. Hence, if you need to nurse those, you are better of by knowing how things work and what you do.
    – user1249
    Mar 7, 2012 at 17:19

14 Answers 14

35

If I am coding a windows app (or a mac app) why should I need to know Linux? Should a Ford mechanic know John Deer tractors? It all depends on what you are doing, professionally or on your own "hobby" time.

Now, it doesn't hurt to know it. In fact, I am a firm believer in "the more you know, the better off you are"

9
  • The reason I ask was because Linux is considered a 'must learn' for programmers of all types these days. I may be wrong however.
    – Maxtor
    Dec 3, 2010 at 1:01
  • @Max: It will only make you smart if you know how to use it and know how and why Linux does it. The Linux source code has vast knowledge embedded in it but like Muad said, it is not a MUST.
    – Geek
    Dec 3, 2010 at 5:49
  • 1
    He will need to learn linux if he ever expects to deploy his programs by himself on a production environment, which can be most of the time linux. Feb 7, 2011 at 5:17
  • @dukeofgaming, you can run IIS and PHP no problem. linux would be GOOD to learn, but necessary? not really.
    – Muad'Dib
    Feb 7, 2011 at 5:32
  • @dukeofgaming I've never had to deploy my ASP.NET apps onto a linux server, and I doubt I ever will! Feb 7, 2011 at 5:38
29

If you're a PHP programmer, you should definitely know Linux. PHP was created on Linux, and PHP is an imporant part of the LAMP stack: Linux+Apache+MySQL+PHP. Even if you have the opportunity to develop for Windows servers now, your next job will probably have you developing for Linux servers, and you'll need to be familiar with the Linux environment so that you're not running afoul of Window specific 'isms of PHP.

In the mobile app space, knowing Linux will (sadly) have little relevance to the environments you're developing for. iPhone OS has nothing to do with Linux, and Android has you so tightly fenced into a virtual machine, you'll never know there's Linux beneath you. You could program for Linux on Meego or Maemo, but those have nowhere near the popularity of the iPhone and Android.

In the embedded space, you have to know Linux. Embedded Windows is rare, but embedded Linux is quite common. (Of course, bare-metal embedded programming is also quite common, so it depends where you want to go.)

If you learn Linux in depth over a number of years, you'll have some level of understanding of every part of the system from the kernel, through the bootup process, up to the command-line, and GUI.

2
  • 3
    I agree that embedded Linux is fairly common for 32-bit devices. However the majority of embedded micros are still 8 and 16-bit, which can't run Linux. (You alluded to this in your "bare-metal" comment, I am just clarifying a little.) 32-bit devices are the fastest growing segment though.
    – tcrosley
    Dec 3, 2010 at 1:03
  • +1 for LAMP stack and embedded space. Would love your book recommendations on this subject for beginner Unix/Linux programmers.
    – Anthony
    Jul 9, 2012 at 6:40
17

There is a certain degree of 80/20 thinking you can apply here. It doesn't actually take very long to learn the basics of how Linux works and the core commands you need to know about from the Shell. Likewise basic Apache configuration is very convenient to have if you need it. You don't need to dedicate years of your life to it, but it is certainly worth learning enough of the basics that you could get by running your own server if you had to.

It's a fine line though. If you aren't careful you can quickly find Windows begins to really tick you off as you get used to what Linux offers...

2
  • 12
    +1 - don't learn Linux if you want to continue to enjoy using Windows. Dec 3, 2010 at 9:59
  • 6
    +1 - [raises hand sheepishly] Um. My name's Inaimathi ... and uhh, I'm a former Windows user.
    – Inaimathi
    Dec 3, 2010 at 14:45
6

You don't have to learn it but it will make you a better programmer. You will learn how to do things in a different way than the Windows way. Using any of the *sh shells will eventually lead to scripting and using regular expressions, automating installations, parsing large files, etc.

I don't care about being mocked for not knowing it, as much as I care about how cool it is every time I learn how to do something else in Linux. It just keeps getting better and better with each new bit.

Powershell has a lot that comes from the nix world, they finally realized that in order to have automation you need a good console (kudos to MS for that). Both Perl and Python seem to be a mixture of C, bash, sed, awk, all meshed into a good thing in their own way.

At the very least you will have something else to put in your resume but that really is not the best thing you will get out of it.

I'm sure you will find on your own things that will make you go: "Wow, that is so cool!" My first was being able to "kill" Apache using a USR1 signal to get it to reload a new config file and restart the logs, without ever stopping the service and continuing to receive connections. Also ssh and rsync, good grief why wouldnt MS port them is beyond me.

1
  • +1 For showing the MS moves towards the shell way and the lack of doing so completely!
    – Orbling
    Feb 7, 2011 at 0:21
4

It won't hurt you. Even in an all Microsoft company, it is becoming more and more increasingly likely that you'll run into at least a few Linux servers. Stack Overflow, for instance, uses Linux for their load balancers. This is especially true when virtualization comes into play.

As a programmer, you might do better by considering getting familiar with POSIX, not just a single UNIX-like variant. While it does have some quirks, it represents a lot of effort that went into an incredible attempt to establish a standard interface that is (mostly) portable across all UNIX like environments. Note, many UNIX like systems aren't 100% "posixly correct", but it is a good starting point.

As just a casual user, I can only suggest that it is fun to poke around in something new and learn new things. I guess it is possible to be a 'guru' with every single operating system one could think of, but I don't think that is the most useful endeavour for a programmer. Still, a working knowledge of stuff that you might encounter is good .. and from your question, you seem likely to encounter Linux in the future.

2
  • +1 my knowledge of linux (I've administered linux web server for years) helped me a lot in my "Microsoft" developments. In fact, each solution it's problem.
    – user2567
    Dec 3, 2010 at 8:38
  • Getting familiar with a Linux distro (which is an actual software system you can play with) and POSIX (an abstract specification) are two very different things. If you get familiar with one Unix or Unix-like OS (Mac OSX largely excepted), you'll have no difficulty transferring your knowledge to another. Dec 3, 2010 at 15:13
3

Yes, but you do not sound like you need to actively study it.

For me my familiarity with linux developed through use my use of it as my work OS. Piece by piece I learned the things I needed to know as they came up, and continue to do so. The internet is full of resources on how to do just about anything you would need to wrt linux, so instead I would suggest that you get good at reading man pages and documentation and let your brain absorb (and forget) the details of how to accomplish specific tasks as you go.

That being said there are certainly a few commands that you will be shunned from the linux world for not having a basic grasp of.

3

In the last four out of five jobs I've been in, the developers and QA (at least started) worked on Windows, but the test and production servers were Linux/UNIX. All of them have needed to know at least a small amount of UNIX to at least be able to get on the test servers and look at the logs or debug a running program in the 'real' environment. Very little development is actually destined for Windows in the companies that been at in the last 20 years.

Echoing others here, very little may be "necessary" for your job or career, but it will help your understanding of your own work, the benefits and limitations of the language or system that you are using.

2

IMHO, for a competent programmer knowing Linux/Unix would be a great stepping stone to even more important Unix philosophy

2

When I took the Operating Systems Computer Science course, we studied UNIX based operating systems and did our work on RedHat because it was open source and because we could see the code and because we could do things with it that just couldn't be done in Windows.

I'd say if you're going to learn the fundamentals of how operating systems work under the hood, you should probably have some experience with Linux, even if it's just in an academic environment.

I just switched back to Windows 7 from Ubuntu 10.04. I feel a little lost without grep and some of the other command line tools. I prefer to develop in a Linux environment because I feel like the system is more conducive to power users and developers.

I do know really good .NET programmers who came out of college who know nothing about Linux, so it's not a requirement, but I would expect anyone with more than 5 years programming experience to have been exposed to Linux in one form or another at one time in their career.

You have to be the judge of what you focus on; however. If there is currently a path for you developing mobile apps, and knowing Linux isn't really a requirement, then maybe you focus on learning more about the mobile SDK's instead of Linux. There is a tradeoff for everything, and it sounds like you do have some basic exposure to Linux to where you could learn more about it if required.

1
  • 2
    I have always had grep et al on my Windows boxes, they are a necessity.
    – Orbling
    Feb 7, 2011 at 0:19
1

Do any of the following bother you?

  1. You can't/shouldn't put Linux on your resume.
  2. You don't qualify to work for a purely Linux shop.
  3. Your current job demands and level of interest in pursing Linux via self-study are non-existent, so your situation concerning Linux won't change.
  4. Non-Windows developers will mock you (Maybe not to your face.).

There are tons of job opportunities and career paths you can still pursue. I'm not saying any of these 'should' bother you. Just be honest with yourself and keep an eye on the industry in general and Linux in particular to see if your paths may cross. No doubt you could figure it out when the time comes. Who knows, a Linux project may come your way tomorrow.

1

I've always coded in the Windows environment. For me, Linux just used to be another OS I'd have as a backup in case my Windows ran into trouble. I only knew basic commands and everything I tried to do on it seemed to be hard. But now at my current job as a web developer, we all use Linux so I am forced to learn it and use it for everything. The more I use it, the more I like it and I think it's a lot more productive and flexible. I regret not having messed more with Linux before. Now I'm just catching up.

So yes, you should learn it whenever you can.

1

Linux is a tool in your toolbox in the same way that Windows is "just" a tool. Being fluent in both allow you to do some things better but is irrelevant for other things.

Personally I've found Linux in the form of Ubuntu very useful because it allows me to easily create and maintain things like a database server, a mail server, a test web server and much more in virtual machines without having to consider license costs (plus the server versions require less resources than Windows). If you do not do any of these things, I don't think Linux will matter to you.

0

Know enough that if you intend to deploy to a particular OS, then you can ensure that your application works on it, but otherwise... you don't have to know anything/everything.

1
  • if you are deploying on a different OS than you developed on, you could need a lot of knowledge about the new OS. one big factor is how much lower level functionality is present in your application (i.e.- any serial port-type access)
    – Patrick
    Feb 6, 2011 at 21:12
0

Unless I'm doing .NET, I prefer using Linux. The LAMP stack just feels more natural to me than WAMP.

I would definitely recommend learning it if you have any interest at all in learning something other than the Microsoft stuff.

Not the answer you're looking for? Browse other questions tagged or ask your own question.