2.9 KiB
Unix Philosophy
Unix philosophy is one of the most important and essential approaches to programming which advocates great minimalism and is best known by the saying that a program should only do one thing and do it well. Unix philosophy is a collective wisdom, a set of recommendations evolved during the development of one of the earliest operating systems called Unix, hence the name. Unix philosophy advocates simplicity, clarity, modularity, reusability and composition of larger programs out of smaller programs rather than designing huge monolithic programs as a whole. Unix philosophy, at least partially, lives on in many project and Unix-like operating systems such as Linux, has been wholly adopted by groups such as suckless and LRS (us), and is even being expanded in such projects as plan9.
In 1978 Douglas McIlroy has written a short overview of the Unix system (UNIX Time-Sharing System) in which he gives the main points of the system's style; this can be seen as a summary of the Unix philosophy (the following is paraphrased):
- Each program should do one thing and do it well. Overcomplicating existing programs isn't good; for new functionality create a new program.
- Output of a program should be easy to interpret by another program. In Unix programs are chained by so called pipes in which one program sends its output as an input to another, so a programmer should bear this in mind. Interactive programs should be avoided if possible.
- Program so that you can test early, don't be afraid to throw away code and rewrite it from scratch.
- Write and use tools, even if they're short-lived, they're better than manual work. Unix-like systems are known for their high scriptability.
This has later been condensed into: do one thing well, write programs to work together, make programs communicate via text streams, a universal interface.
{ I have come up with a possible interpretation of Unix philosophy: in short it says there's an upper but also lower limit on complexity. "Do one thing" means the program shouldn't be too complex, we can simplify this to e.g. "Your program shouldn't surpass 10 KLOC". "Do it well" means the programs shouldn't bee too trivial because then it is hardly doing it well, we could e.g. say "Your program shouldn't be shorter than 10 LOC". E.g. we shouldn't literally make a separate program for printing each ASCII symbol, such programs would be too simple and not doing a thing well. We rather make a cat program, that's neither too complex nor too trivial, which can print any ASCII symbol. ~drummyfish }