Software tools principles, after Doug McIlroy (with
some text from Ian Darwin):
- Write small programs that do one thing well.
- To do a new job, build afresh rather than complicate old
programs by adding new "features".
- Don't put everything into the OS.
- Expect the output of every program to become the input to another, as yet
unknown, program.
- Don't clutter output with extraneous information. Say what you're asked to — no more, no less.
- Make programs' input formats easy to generate or type.
- Avoid stringently columnar or binary input formats.
- Don't insist on interactive input. Wherever possible, programs should be able to process data from their standard input to their standard output.
- Supply good defaults.
If every file has the same format, users only need one set of tools. If the format is simple, the tools are easy to write.
If everything in the system is a file, users can go further with one set of tools.
- Use programs to write programs.
- Use high-level languages.
- Use regular expressions for all pattern matching.
Don't force people to use the system in one way.