(originally posted here on 18 Jul 2005)
Languages fall into two categories.
Convergent languages are Formal Systems; the words have well defined meanings, sentences are subject to deduction, and arguments can be proven. I call them “convergent” because historically, discussions carried in such languages tend to converge upon agreement. Examples of such languages are mathematics, computer languages, chess notation.
All other languages are divergent. Over time, discussions held in these tend to diverge as ever more sides argue over an increasing number of disputes. Natural languages obey this property, as religious, political, and philosophical discussions spawn more factions each century.
“Convergent” is a usually a good synonym for “objective”.
Stringent application of the Verification Principle of the Logical Positivist philosophers denies the concept of “meaning” to sentences written in divergent languages. (Upon reading this, the usenet troll was enlightened.)
Test-driven development turns the process of software design into a convergent activity, by establishing a method of verifying the meaning of the work.