Use shell scripts to increase leverage and portability.
Avoid captive user interfaces.
Make every program a filter.
This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.
Write modules that do one thing well. Write a new module rather than complicate an old one.
Write modules that encourage composition rather than extension.
Write modules that handle data Streams, because that is the universal interface.
Write modules that are agnostic about the source of their input or the destination of their output.
Write modules that solve a problem you know, so you can learn about the ones you don’t.
Write modules that are small. Iterate quickly. Refactor ruthlessly. Rewrite bravely.
Write modules quickly, to meet your needs, with just a few tests for compliance. Avoid extensive specifications. Add a test for each bug you fix.
Write modules for publication, even if you only use them privately. You will appreciate documentation in the future.
Keep in mind
Working is better than perfect.
Focus is better than features.
Compatibility is better than purity.
Simplicity is better than anything.
When abstractions are kept to the minimum necessary, it’s much easier to see which ones are good ideas and which ones are mistaken ideas. With larger collections of ideas branded into cohesive framework ideologies, it’s very easy for unjustified abstractions to sneak in under the cover of the more useful pieces.
I didn’t write nothing of this, but we, programmers, forget important things, and I wanted to collect it in one place.