Uniformity Uber Alles

 Foolish consistency is the hobgoblin of small minds. -- RalphWaldoEmerson?

Far too many practitioners, who ought to know better, have a tendency to fall in love with a particular technology, architecture, or implementation technique--and then loudly insist that it is the only appropriate solution to a wide range of problems. Other solutions may be permissible in this world-view, but only if they can be implemented in terms of the "preferred" solution.--even when it's a clear AbstractionInversion. Competing paradigms are regarded as demons to be cast out. Uniformity is trumpeted as a comprehensive and all-encompassing requirement in any system that could ever be built--thus hybrid or multiparadigm systems are also despised.

When the preferred technology is shown to have shortcomings--they are dismissed as implementation details, to be solved later, even if the solution is years of research from being practical--if possible at all (see SufficientlySmartCompiler). Any failing of a competing technology, OTOH, is derided as a fatal flaw which cannot be worked around (i.e. the only solution is to abandon the "flawed" technology), even if it can be plainly shown that this is not the case. Often, the technology being advocated is new (and its flaws and limitations have yet to be discovered), whereas the technology being castigated is mature and its limitations well-chronicled.

The technology being advocated doesn't matter, really, for purposes of discussing this particular AntiPattern. For some, it's objects and OO; any solution that isn't sufficiently "OO" is deemed inferior. For others, it's relational. Or FunctionalProgramming. Or SmalltalkLanguage/LispLanguage. StaticTyping or DynamicTyping. Capabilities, ExoKernels, global uniform namespaces, etc. Or ExtremeProgramming.

This is an AntiPattern simply because none of the above technologies/methodologies/etc. has ever been shown to be clearly superior to all others, in all circumstances. Many are still being actively researched, and are simply too immature for such sweeping generalizations to be made. Others are clearly advantageous in particular areas (such as RelationalDatabases for OLTP and OLAP), but have consistently failed miserably in other areas (despite numerous attempts to make a relational filesystem--including years of research into the problem at Microsoft--no such critter has been developed that users have found satisfactory).

Don't be silly; everyone knows that they are all superior to each other.

The smart practitioner will, of course, have many tools in her toolbox; and use them as appropriate. Nobody would listen to a carpenter who suggests that we should build houses with nothing but hammers; yet much attention still gets paid to software professionals who make analogous suggestions in our discipline.


Notes on the quote at the top of the page:

Ralph Waldo Emerson, "Self Reliance": "A foolish consistency is the hobgoblin of little minds, adored by little statesmen and philosophers and divines. With consistency a great soul has simply nothing to do. He may as well concern himself with his shadow on the wall. Speak what you think now in hard words, and to-morrow speak what to-morrow thinks in hard words again, though it contradict every thing you said to-day. 'Ah, so you shall be sure to be misunderstood.' Is it so bad, then, to be misunderstood? Pythagoras was misunderstood, and Socrates, and Jesus, and Luther, and Copernicus, and Galileo, and Newton, and every pure and wise spirit that ever took flesh. To be great is to be misunderstood."


See also: EverythingIsa, WhenAreStandardsRestrictive, LetsBlowUpTheUniverse


EditText of this page (last edited January 17, 2005) or FindPage with title or text search