"Linux and other UNIX-like systems have always come with a broad
variety of tools that perform functions ranging from the obvious to
the arcane. The success of UNIX-like programming environments comes
largely from the quality and selection of tools, and the ease with
which they can be joined together.
"As a developer, you may have found that existing utilities
don't always solve your problem. While you can solve many problems
easily by stringing together existing utilities, solving other
problems requires at least some amount of real programming. These
latter tasks are often candidates for creating a new utility that,
when combined with existing utilities, will solve the problem with
a minimum of effort. This article looks at the qualities that make
for a good utility and the design process that goes into it..."