#set TITLE = "Tenets of the UNIX Philosophy"
#include top

.LP
from \fBThe Unix Philosophy\fR by Mike Gancarz.
.br
ISBN:1-555558-123-4. Copyright 1995 Butterworth-Heinemann.
.br
Reprinted with Permission of Digital Press

#include space

.SH 9 main tenets of the Unix philosophy 

.LP
1. Small is beautiful.
.IP \(bu
Small programs are easy to understand.
.IP \(bu
Small programs are easy to maintain.
.IP \(bu
Small programs consume fewer system resources.
.IP \(bu
Small programs are easier to combine with other tools.

#include space

.LP
2. Make each program do one thing well.
.IP \(bu
 "The best program...does but one task in its life and does it well."
.IP \(bu
 "The program is loaded into memory, accomplishes its function,
and then gets out of the way to allow the next single-minded program
to begin."

#include space

.LP
3. Build a prototype as soon as possible.
.IP \(bu
Prototyping is a learning process.
.IP \(bu
Early prototyping reduces risk.

#include space

.LP
4. Choose portability over efficiency.
.IP \(bu
Next ---'s hardware will run faster.
.IP \(bu
Don't spend too much time making a program run faster.
.IP \(bu
The most efficient way is rarely portable.
.IP \(bu
Good programs never die--they are ported to new hardware platforms.

#include space

.LP
5. Store numerical data in flat ASCII files.
.IP \(bu
ASCII text is a common interchange format.
.IP \(bu
ASCII text is easily read and edited.
.IP \(bu
ASCII data files simplify the use of Unix text tools.
.IP \(bu
Increased portability overcomes the lack of speed (of flat ASCII text files...)
.IP \(bu
The lack of speed is overcome by next year's machine.

#include space

.LP
6. Use software leverage to your advantage.
.IP \(bu
Good programmers write good code; great programmers "borrow" good code.
.IP \(bu
Avoid the not-invented-here syndrome.
.IP \(bu
Allow other people to use your code to leverage their own work. 
.IP \(bu
Automate everything.

#include space

.LP
7. Use shell scripts to increase leverage and portability.
.IP \(bu
Shell scripts give you awesome leverage
.IP \(bu
Shell scripts leverage your time, too.
.IP \(bu
Shell scripts are more portable than C.
.IP \(bu
Resist the desire to rewrite shell scripts in C.

#include space

.LP
8. Avoid captive user interfaces.
.IP \(bu
CUIs assume that the user is human.
.IP \(bu
CUI command parsers are often big and ugly to write.
.IP \(bu
CUIs tend to adopt a "big is beautiful" approach. 
.IP \(bu
Programs having CUIs are hard to combine with other programs.
.IP \(bu
CUIs do not scale well.
.IP \(bu
CUIs do not take advantage of software leverage.
 
#include space

.LP
9. Make every program a filter.
.IP \(bu
Every program written since the dawn of computing is a filter.
.IP \(bu
Programs do not create data--people do.
.IP \(bu
Computers convert data from one form to another.
.IP \(bu
Use \fBstdin\fR for data input;
.IP \(bu
Use \fBstdout\fR for data output;
.IP \(bu
Use \fBstderr\fR for out-of-band information.

#include space

.SH Ten Lesser Tenets

.IP \(bu
Allow the User to tailor the environment.
.IP \(bu
Make operating system kernels small and lightweight.
.IP \(bu
Use lower case and keep it short.
.IP \(bu
Save Trees.
.IP \(bu
Silence is golden.
.IP \(bu
Think parallel.
.IP \(bu
The sum of the parts is greater than the whole.
.IP \(bu
Look for the 90 percent solution.
.IP \(bu
Worse is better.  (I won't try to explain this one...)
.IP \(bu
Think hierarchically.


#include bottom
