The art of UNIX programming

For those of you who have not read it, you should seriously check out Eric Raymonds “The art of UNIX programming“. The book itself is about UNIX culture but more importantly, it’s about how you design a system, how you make sure that the initial design will work today and that it is flexible enough to work tomorrow.

The UNIX answer to this challenge is quite short – “Keep it simple stupid“. Don’t add more features unless it’s absolutely required. Keep the design simple. This makes it a lot easier to extend and maintain the software.

The UNIX method is about solving problems by combining a set of simple tools connected through clean interfaces. This gives a lot of flexibility by separating mechanism from policy.

Use plain text for configuration files, avoid binary formats other than when performance is absolutely critical.

These are some of the most important lessons from the UNIX philosophy. It’s interesting to note that many of these points are practiced within “Test driven development“, but here the principle “small programs that do one thing well, connected through clean interfaces” is replaced by the use of “interfaces through dependency inversion and dependency injection“.

Plain text files are still being used for configuration formats, although mainly as XML these days. For large amounts of data, databases are often a much better solution. Note that this does not violate the KISS-principle. Use simple tools if they solve the problem, if not then switch to more advanced ones.

This entry was posted in Uncategorized and tagged , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s