What We Can Learn from the Ojibwe Language 3
Ojibwe (sometimes spelled Ojibwa; the last syllable is pronounced “way”) is one of the few Native American languages that isn’t immediately threatened with extinction. It is spoken by about 10,000 people around the Great Lakes region. Brothers David and Anton Treuer are helping to keep it alive, as they discussed in a recent Fresh Air interview.
Ojibwe is a language that is optimized for an aboriginal people whose lives and livelihoods depend on an intimate awareness of their environment, especially the weather and water conditions. They have many nouns and verbs for fine gradations of rain, snow, ice conditions, the way water waves look and sound, etc. You would want this clarity of detail if you ventured out on a lake every day to fish for dinner.
In the past, speaking languages like Ojibwe was actively suppressed by the government, in an attempt to assimilate Native Americans. Today, the threat of extinction is more from the sheer ubiquity of English. I think there is another force at play, too. People living a modern, so-called “developed” lifestyle just don’t need to be so aware of their environment anymore. In fact, most of us are pretty “tone deaf” to the nuances of weather and water, which is sad in a way. We just don’t perceive the need for the richness of an Ojibwe to communicate what’s important to us, like sports trivia and fashion tips.
So, what does Ojibwe have to do with programming languages? Our language choices inform the way we frame problem solving and design. I was reminded of this recently while reading Ted Neward’s series of articles on Scala. Scala is a JVM language that provides first-class support for functional programming and object-oriented design refinements like traits, which provide mixin behavior.
While you can write Java-like code in Scala, Neward demonstrates how exploiting Scala features can result in very different code for many problems. The Scala examples are simpler, but sometimes that simplicity only becomes apparent after you grasp the underlying design principle in use, like closures or functional idioms.
One of the best pieces of advice in the Pragmatic Programmer is to learn a new language every year. You should pick a language that is very different from what you know already, not one that is fundamentally similar. Even if you won’t use that language in your professional work, understanding its principles, patterns, and idioms will inform your work in whatever languages you actually use.
For example, there is a lot of fretting these days about concurrent programming, given the rise of multi-core CPUs and multiprocessor computers. We know how to write concurrent programs in our most popular imperative languages, like Java and C++, but that knowledge is somewhat specialized and not widely known in the community. This is the main reason that functional programming is suddenly interesting again. It is inherently easier to write concurrent applications using side-effect-free code. I expect that we will fail to meet the concurrency challenge if we rely exclusively on the mechanisms in our imperative languages.
So, you could adopt a functional language for all or part of your concurrent application. Or, if you can’t use Scala (or Haskell or Erlang or …) you could at least apply functional idioms, like side-effect-free functions, avoidance of mutable objects, etc. in your current imperative language. However, even that won’t be an option unless you understand those principles in the first place.
Learning a new language is more than learning a new vocabulary. It’s even more than learning new design techniques. It’s also learning to see common things from a fresh perspective, with greater clarity.

Your analogy involving Ojibwe reminded me of the “eskimo has N words for snow” myth: http://www.derose.net/steve/guides/snowwords/ http://www.press.uchicago.edu/cgi-bin/hfs.cgi/00/7197.ctl
The argument that some computer languages are better at expressing certain things better than others I think is valid; otherwise one language would be good enough for doing everything.
Natural languages, however are a very different beast, maybe because the human mind works at a higher level than just being “turing complete”, or maybe it’s the ghost in the machine. But the argument that one natural language is better at expressing certain things than another has been debated much and the evidence always comes up lacking.
It’s a minor point to make I suppose, since diversity in both computer and natural languages is a good thing, and that’s what’s being argued for here.
If I remember the interview correctly, most of the weather related terms in Ojibwe were verbs, which sort-of makes sense; you care about what the weather is doing and, by implication, how it will affect the risk and success of the hunt, etc.
The interview reminded me how the pressing issues of daily life appear to drive the evolution of a language to make it straightforward to discuss those issues in sufficiently-rich detail. This happens not only in vocabulary, but also even in grammar (like the number of verb conjugations). On the other hand, languages sometimes throw off inessential complexity. English did this with articles like “the” and “a”; we no longer have gender-specific variants, unlike other Germanic languages, for example.
This debate is related, I think, to the debate over the Sapir-Whorf Hypothesis, which postulates that how we perceive the world is heavily influenced by our language (at least that’s my naive understanding of it…).
Yes, the Sapir-Whorf Hypothesis is at the center of that debate. It has an long history and there’s an interesting digression on that here btw: http://www.alamut.com/subj/artiface/language/sapirWhorf.html
Just as the Ojibwe have a rich vocabulary for describing weather, so do meteorologists using english… so extending the analogy, natural languages are “meta-programmable” and rather than being forced to learn a new language to say something new, we create DSLs for the task.