Procedural Abstraction
Functions should be written as "black boxes"
The function should do some describable unit of work
The user of the function should only be concerned with what the function does, not how
All control of the function should be affected through the parameters
The function should use only variables which it declares locally
If the function has a single output, it should be provided to the calling program via a return statement
Thinking about functions as "black boxes" is called "procedural abstraction"
Complicated algorithms or procedures can be made simpler by breaking them up into smaller units of work (divide and conquer).