Indeed, some of the most able developers start by defining their interfaces, writing
brief comments to describe them, and then writing the code - since the process of
writing the comment clarifies what the code must do.
Compactness:
A good practical test for compactness is this: Does an experienced user normally need
a manual? If not, then the design (or at least the subset of it that covers normal user)
is compact.
Compactness is not equivalent to 'easily learned'. Some compact designs are quite
difficult to understand until you have mastered an underlying conceptual model that
brief comments to describe them, and then writing the code - since the process of
writing the comment clarifies what the code must do.
Compactness:
A good practical test for compactness is this: Does an experienced user normally need
a manual? If not, then the design (or at least the subset of it that covers normal user)
is compact.
Compactness is not equivalent to 'easily learned'. Some compact designs are quite
difficult to understand until you have mastered an underlying conceptual model that
is tricky, at which point your view of the world changes and compact becomes simple.
- The art of Unix programming.