views:

171

answers:

5

I've been developing Microsoft Windows based applications (both desktop and web) for several years using C#, .net, & Visual Studio with a dash of C/C++ & WIN32. I want to broaden my horizons and try out developing in a *NIX environment e.g. using Vim & C++. I have limited UNIX experience from a few school projects.

I'm having trouble thinking of a good project to implement that might reveal some of UNIX's strengths and why some projects / fields prefer to use UNIX. I can think of several interesting things I'd like to build, but don't see compelling reasons to why implementing them in UNIX would be anything more than an exercise in using the UNIX environment.

What project / application could help a developer learn UNIX’s strengths?

Ideally, at some point while I"m coding this project, a light bulb will appear floating above my head, turn on by itself, and I will say "AHA!" when I realize some of the benefits of the UNIX environment compared to things I've done previously in Windows.

Just to be clear, I do not doubt that UNIX has its strengths, I'm just looking for an enticing starting point for Unix development.

+1  A: 

Here's one idea: Write a (simple) game, and maintain a "high score list" in some public directory in such a way that ordinary users can view the scores, but not modify them directly (only through the game program itself).

Doing this will show how Unix file permissions and setgid work. It's worth thinking about how you might implement the same functionality in Windows.

Greg Hewgill
A: 

You might consider a project involving parsing large amounts of text.

EDIT: In which case you should choose a language (like Perl) more appropriate for text-processing.

Sure, this could be done with MS tools, but since most MS applications employ proprietary binary file formats (I'm generalising here) the emphasis in Windows is on applications which manipulate MS's own formats.

A project which forced you to consider the text-processing capabilities of Unix tools might be most useful in revealing Unix's strengths.

pavium
Agree. But then you don't really write software. Or if you do, it's probably in bash or perl (which is fun by the way).
Christian Vik
This sounds a little *chauvinistic*. So writing software in Perl doesn't count because it's 'fun'?
pavium
pavium: Hehe. That was not my intention. It's just that TJB said he knew C, C++ and Java :)
Christian Vik
yes, and if you were manipulating text, you'd choose an appropriate language like Perl. This is a point I should add to my answer.
pavium
I'm open to other languages as well, would you say perl is very prevalent among UNIX developers? Perl is another one of those languages I've always heard of and never played with, maybe its time...
TJB
Perl is installed by default on ALL Linux distributions. If it's not used by everyone doing *text manipulation*, it must be because there's a fairly steep learning curve, and the old *command-line* thing. I believe, for example, most Genome processing is done with Perl, but I leave it to you to decide if this is an argument in favour, or against.
pavium
+1  A: 

In UNIX/Linux "everything" is files. What about writing a piece of software that reads the disk device, understands the partition tables and file system?

Another possibility is to write a linux kernel module that does "something". It will sure give you a better understanding on how the linux kernel works. As an added benefit it sounds more hardcore than it really is ;)

A good starting point would be Kernel Newbies.

Christian Vik
kernel module makes me think 'plugins on steriods for my OS' i like that! Is it cumbersome to develop kernel modules? is it usually done via a virtual machine running the OS w/the kernel module that I have to repeatedly reboot? Or can I easily load/update the module into the very OS i'm running on? of course i'll look into the link as well, thanx!
TJB
Using a VM will make it easier if you crash the kernel. You can load/unload the module as you want as long as your module don't crash the kernel."Bulding and running modules": http://lwn.net/images/pdf/LDD3/ch02.pdf should get you started
Christian Vik
A: 

It's more how you work that will influence you more than anything. A nice multithreaded app of some kind will show off the generally better threading performance, though.

Charles Eli Cheese
+1  A: 

You could write some server application, utilizing nonblocking IO, and mechanisms such as epoll, kqueue or /dev/epoll to be able to handle high volume traffic without using any threads.

el.pescado