- Write simple parts connected by clean interfaces. (Modularity)
- Clarity is better than cleverness. (Clarity)
- Design programs to be connected to other programs. (Composition)
- Separate policy from mechanism; separate interfaces from engines. (Separation)
- Design for simplicity; add complexity only where you must. (Simplicity)
- Write a big program only when it is clear by demonstration that nothing else will do. (Parsimony)
- Design for visibility to make inspection and debugging easier. (Transparency)
- Robustness is the child of transparency and simplicity. (Robustness)
- Fold knowledge into data so program logic can be stupid and robust. (Representation)
- In interface design, always do the least surprising thing. (Least Surprise)
- When a program has nothing surprising to say, it should say nothing. (Silence)
- When you must fail, fail noisily and as soon as possible. (Repair)
- Programmer time is expensive; conserve it in preference to machine time. (Economy)
- Avoid hand-hacking; write programs to write programs when you can. (Generation)
- Prototype before polishing. Get it working before you optimize it. (Optimization)
- Distrust all claims for “one true way”. (Diversity)
- Design for the future, because it will be here sooner than you think. (Extensibility)
Read more in the "The Art of Unix Programming" book.