Its hard to get everyone to agree on what core competencies developers should have. I've long believed that knowledge of C is fundamental to becoming a great developer. Actually, C in general, memory management, pointer arithmetic, and basic hardware (interupts, scheduling, ...) more specifically. Up until recently, when someone asked me what they should learn to be a better programmers, I'd always suggest C. As someone else put it "Not 'getting' algebra is not acceptable for a mathematician, as not 'getting' pointers is not acceptable for programmers. Too fundamental."
I'm now feeling pretty comfortable in including Linux as a must-know skills. I'd go as far as saying that for certain type of work, like web development, knowing Linux is more important than knowing C.
I'm not arguing that you need to move your development to Linux, I'm saying that you need to be comfortable enough with Linux to be able to leverage it. Linux is the platform of choice for a massive list of tools that you should have in your toolbox. Not having access to those tools puts you and your company at a disadvantage. It isn't just about having access to programs either, its about having knowledge about alternative ways to do things. I speak to a lot of ASP.NET developers who don't know what in-memory distributed caching is or who don't understand non-relational persistence options. This ignorance is a major liability which will be hard to address as long as developer remain uncertain and fearful of Linux.
The other nice thing about Linux is that its dead easy to setup and configure. The documentation no longer solely consists of cryptic man pages, and the community is broader than ever. If you can't get LAMP installed, then you either picked an uncommon distro, or you haven't tried very hard.
If you are really serious about diving in, I offer you some choices. First, convert an old PC to a linux server. An single core P4 with 1gb of RAM is more than enough to run a linux server. You can also get a Mac, since Mac OS X is based on BSD (close enough to Linux for our purposes), and has great documentation for developers to install, configure and learn all types of useful things. You can get a nettop. I'm currently running an ASRock 330 (non-ION or blu-ray - unless you need/want them), which has a dual core Atom 330 + 4gb of ram (added afterwards by me). Finally, you can rent an unmanaged VPS. Probably the most popular provider, due to its performance, price, and the fact that you have full root access, is Linode - however there's plenty of choice.
Which option you pick should largely be based on your needs. If you'll want something that you can actually use to host something, then a VPS is clearly the way to go. Otherwise, reuse an old machine if you can, or pick between a cheap low-end dedicated nettop or a more expensive (but also more useful) mac.
As for distributions, I'd recommend Ubuntu - in large part because of the excellent documentation and community (though CentOS is a commone server of choice in production). You can pick the Desktop or Server edition. I picked the server since I only ever SSH into the machine and have no need for a GUI.
Posted
Thu, Jan 14 2010 8:00 AM
by
karl