Seventeen Principles of Unix Design Philosophy

 2 minutes to read

Unix philosophy originated from Ken Thompson’s early thinking on how to design a small but useful operating system with clear service interfaces. As people learn how to make the Thompson design the most effective, Unix culture was born and grew, and drew nourishment from various sources.

The Unix philosophy is not a formal design method. It never claims in theory that it can produce better software. You can’t expect it to use poor project management and cheap programmers to make a very innovative and reliable software in a short period of time.

  1. Module principle: use simple interfaces to combine simple components

  2. The principle of clarity: clarity is better than ingenuity

  3. Combination principle: consider splicing and combination when designing

  4. Separation principle: separation of strategy and mechanism, separation of interface and engine

  5. Principle of conciseness: the design should be concise, and the complexity can be as low as possible

  6. The principle of parsimony: Don’t write huge programs unless there is no other way

  7. The principle of transparency: the design must be visible for review and debugging

  8. Robustness principle: Robustness comes from transparency and simplicity

  9. Representation principle: Fold knowledge into data to make logic simple and robust

  10. Popular principles: interface design to avoid unconventional

  11. The principle of silence: if a program has nothing to say, keep silent

  12. Remedy principle: When an exception occurs, immediately exit and give a sufficient amount of error information

  13. Economic principle: It’s better to spend a minute for a machine than a second for a programmer

  14. Generation principle: Avoid manual hacks, try to write programs to generate programs

  15. Optimization principle: You must have a prototype before carving, and learn to walk before running

  16. The principle of diversity: never believe in the assertion of the so-called “one way”

  17. Expansion principle: Design with a focus on the future, the future is always faster than expected