Principles
Modularity: It should be possible to use a program module in the construction of other programs without knowledge of its internal details.
Generality: It should be possible to pass any data object between program modules.
Determinacy: Unexpected asynchronous hazards should not be possible.
These principles apply to parallel as well as sequential programs.