What's a good project tailored to learning strengths of Unix / Linux
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.
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.
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.
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.
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.
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.
精彩评论