Linus Torvalds was recently quoted saying: "Specs are a basis for
talking about things. But they are
not a basis for implementing software" (
see here). In a mechanical engineering context, this statement has no basis: without specifications or standards, the manufacturing and assembly of parts and products could never be separated. But unlike manufacturing, where specifications and standards in no way limit the field (in fact they probably accelerate its growth), in computer science and programming, it is much more difficult to create specifications that are sufficiently specific to be called a "
specification" and yet sufficiently broad to be applicable to future technologies and developments. The dilemma that arises is a chicken and egg problem: should the software create the specification, or should it be created following the specification? Do you, as a programmer, find it easier to program for interfaces that follow a specification (like POSIX), or do you simply want them to be intuitive?