Language
In my observations of language and its uses, I am inclined to agree that language choice does affect the presentation of the thought, sometimes in fairly dramatic ways. If we look at the example of computer programming, we can see plenty of obvious cases where this would be true. For example, if you're in a "pure" functional language like Haskell, you can write pure functions, you can contemplate the beauty of the Lambda Calculi and freedom from side-effects. But you're not allowed to have state. No, you may not even think about it. Whether The World has state is irrelevant; if your world is expressed in Haskell, you don't have a means of expressing state. We can argue about monads if you like, but someone who observed that they're merely a gross hack for the failure of the language to provide state made rather a pursuasive case.
I believe that one could make a similar argument in the context of programming on a purely economic basis, i.e., the choice of implementation language will create bounds on what is produced. As resources are finite, programming languages that let us get things done within the constraints put upon us will tend to be used widely. Real Work will be done in very large languages such as C++, Java, and Perl. Tiny languages will remain an intellectual curiosity, a delight of academics who never had to produce anything real. While some people might actually think that Scheme could be appropriate for real software, when we're talking about small language -- and I hasten to note that I am talking strictly about General-Purpose Programming Languages, rather than Domain-Specific Languages. If you've only got 100 hours to get something up and running, you're going to do it in a language that has the libraries and whatnot that lets you focus on the problem at hand, rather than dinking around with low-level details as you might normally.
So why isn't everything written in Lisp? I suspect that it has something to do with Lisp's nature as a "programmable programming language." The way that people think about software right now prevents us from doing things that are much different from what else has been done. We can write applications in C++ because that's kind of like writing operating systems, which we can write in C. We can write operating systems in C because that's kind of like assembler. Each of these steps offers small but noticable improvements over the previous idea -- big enough that we can easily show "ROI" on going that route, but not so big that we're talking about changing the way that people think about software. Of course, if you're not talking about issues like how to deploy in the customer's environment, you can always create your own application using whatever you like, and if you're clever enough to use a programmable programming language when others are not, you have competitive advantage.
Any Turing-complete language can theoretically express the same thing as any other Turing-complete language. But in practice, that simply isn't the way that it works. People work in much smaller pieces than that in practice. Instead of using a C compiler to build a Lisp compiler, people look at the problem at hand and the resources available. They don't have resources to write a Lisp compiler and then the solution they're actually supposed to provide. So they write their solution in C. If it isn't easily done in a language readily available, people frequently give up. Or the project falls apart.
This phenomenon is not limited to programming languages. Human language has long been recognized for its power in how people think. Orwell treated language as the ultimate weapon in his Nineteen Eighty-Four. Therein, Newspeak is a critical component of Big Brother's means to impose control over the populace, through the destruction of words. The differences in expression in one language by comparison to another is given significant consideration in what might well be my favorite book, Le Ton Beau de Marot. While it might be technically possible to translate a thought from one language to another, it might be necessary to use words that have little or no relation to the words in the source language. If it is too difficult to move from one langauge to another, you might just forget about trying altogether. Consider how you would express Peter Schickele's quip, "It don't mean a thing if it ain't got that Je ne sais quoi." in French. Do you say, "Il ne signifie pas une chose s'il n'a pas que je ne sais quoi?" The meaning (the joke) is completely lost in translation. So you spend the next five minutes explaining that we actually say je ne sais quoi when using the expression in English, but that messes with the rhythm of the expression, which is also dependant upon the ungrammatical use of don't and ain't. (I suspect that my abominable French might help to carry the idea of an ungrammatical expression, but in rather a different way.)
While all natural languages might be theoretically equal, I suspect that in practice, there is enough difference in such things as aesthetic value and difficulty in expression that many thoughts simply will not be expressed in those languages for essentially the same reason that we're not going to see any Real Work done in toy programming languages.
This article originally appeared on Sunshine Poultry.
Last modified 2005-04-12 12:52 PM