:design_philosophy:
Unix philosophy is based on practical experience with a bottom-up approach, not top-down from academic findings.
Each program does one thing. For a different purpose, build a new one instead of adding to the existing program.
Expect the output of a program to become the input of another unknown program. Don't put unnecessary information in output. Avoid output as binary and interactive outputs.
Design, build and iterate early and often. Don't hesitate to throw out unfitting code and start anew.
Prefer tooling over unskilled help. Build tools to solve problems even if you have to throw them out after the problems no longer exists.
Don't optimize until you find the bottleneck because you will never know where it will occur.
Measure before you implement optimization.
Don't jump to efficient but complex algorithms until the problem size is big enough. Complex algorithms are slow when the size is small.
Simple over complex (algorithms and data structures wise).
Data structures over algorithms in solving problems. For right data structures, the right algorithms are pretty obvious.
Rule of Modularity - Simple parts connected by clean interfaces Rule of Clarity - Clarity over cleverness Rule of Composition - Programs connected to other programs Rule of Separation - Policy from mechanism, Interface from engines Rule of Simplicity - Add complexity only when you must Rule of Parsimony - Only write big programs only when proven the necessity Rule of Transparency - Easy to make inspection and debugging Rule of Robustness - Where transparency meets simplicity Rule of Representation - Fold knowledge into data for robustness Rule of Least Surprise - Least surprising interfaces Rule of Silence - Say nothing when nothing Rule of Repair - Fail loud and as soon as possible Rule of Economy - Programmer time over machine time Rule of Generation - Write programs to write programs Rule of Optimization - Get it working before optimizing Rule of Diversity - There is more than one way to do things Rule of Extensibility - Design for future