I love reading ‘old’ papers. »Information Distribution Aspects of Design Methodology« was published by Parnas in 1972 and is a classic in software engineering literature. It is actually the standard reference when referring to an »API«. However, it is full of sarcasm and in parts fun to read:
Sometimes the uses are less obvious. For example, a programmer
may make use of his knowledge that a list is searched in a certain
order to eliminate a check or an extra queue. In the area of
application programming we may find a programmer who
introduces an erroneous value for π knowing that because of an
error in the sine routine the erroneous value will cause his
program to converge more rapidly.
Such uses of information have been so costly that we observe a
strange reaction. The industry has started to encourage bad
programming. Derogatory names such as “kludger”, “hacker” and
“bit twiddler” are used for the sort of fellow who writes terribly
clever programs which cause trouble later on. They are subtly but
effectively discouraged by being assigned to work on small
independent projects such as application routines (the Siberia of
the software world) or hardware diagnostic routines (the coal
mines). In both situations the programmer has little opportunity
to make use of information about other modules.
Those that remain (the non-bit-twiddlers) are usually poor
programmers. While a few refrain from using information because
they know it will cause trouble, most refrain because they are not
clever enough to notice that the information can be used. Such
people also miss opportunities to use facts which should be used.
Poor programs result. Since even a poor programmer sometimes
has a “flash of brilliance” (e.g., noticing that two bytes in a
control block can be simultaneously set with one instruction
because they are adjacent and in the same word) we still have
no control of the structure.