Kung fu and polyglot programmers

It seems that only a minority of programmers are functionally multilingual, in other words capable of writing useful software in more than one modern language. Most programmers work exclusively with a single language until nobody wants to hire developers specializing in that language any more. If the monoglots don't switch professions at this point (I've seen this happen more than a few times), they often attempt to persuade their prospective clients that either their beloved language is so inherently superior to more modern languages that they must accept its limitations, or alternatively, that the language will be perfectly suited for working with the desired modern technologies after the developer simply writes "a little bit" of code to emulate how more modern languages implement these concepts.

And to a degree, that's actually true. All languages are just implementations of basic logic with concentric rings of more complex ideas constructed around them. Given enough time, caffeine and hair-pulling, any new technology can be implemented in an outmoded programming language. But entropy is still in effect here, most monoglots simply aren't going to write a robust implementation of any new technology, they're still too wrapped up in the concepts that were new when their preferred language was conceived. This is probably why we don't use Egyptian hieroglyphs to write books about astrophysics.

Sometimes the monoglot developer successfully persuades the decision maker(s) to tolerate their chosen language's limitations, or the developer's pure determination and drive for self-vindication leads to a massive time investment trying to upgrade their metaphorical horse-drawn carriage with a helium-3 reactor. Initially the monoglot programmer is overjoyed to just get the project. But as soon as the proverbial honeymoon is over and the real work begins, the programmer usually gets stuck. Missed deadlines eventually degrade into frustrated rants, and eventually the project lead simply can't get the developer to reply to emails or return phone calls. The project lead is then forced to either find another developer, or if too much investment has already been made, the project simply withers on the vine.

It's obvious that many programmers see this kind of unwavering commitment and limitless personal investment as a noble challenge, worthy of their sacrifices. But I must admit that I and many other polyglot programmers I've discussed this issue with see it as a lot of work just so the developer doesn't have to learn a new language.

Eventually I considered that perhaps this reluctance to adapt to the ever-changing landscape of technology is simply fear of change. This thought excited me, and since then I've advised several developers not to change languages, that's probably too direct for comfort and would probably be written off as futile and completely undesirable. But I have recommended that the developers participate in a martial arts class. It might sound like something out of left field, but I think there's some validity to this approach.

This revelation came to me after reading one of the many legends about the origin of Chinese martial arts. Apparently the 6th century Chinese were very conflict-avoidant, which made them easy targets for the roving marauders of their age. The legend says that it was then that Ta Mo (aka Bodhidarma or Daruma), a Buddhist monk from India arrived in China. Initially all he wanted to teach the Chinese people was meditation in the hopes that they would achieve enlightenment. But Ta Mo's hopes for the Chinese were stymied by the reality of their daily lives. He eventually decided that the people he was trying to teach were simply too old (Buddhists typically teach basic meditation techniques to their children at a fairly young age), and too traumatized by repeatedly running in fear from savage warlords, to gain the full benefit of his instruction.

So since enlightenment wasn't a practical goal in the short term, Ta Mo decided that the easiest way for the people to overcome their fears, regain control of their destinies, and ultimately reach enlightenment, was to have them engage in hand-to-hand combat with each other as frequently as he could persuade them to. Apparently Ta Mo's gamble paid off. The original Shaolin temple, an exclusively religious center since its founding, became known as the birth place of several Chinese martial arts once the Shaolin monks had successfully and decisively defended themselves and surrounding villages from the terrorists of their era.

I took a martial arts class briefly, early on in my career as a programmer. In retrospect, this was about the same time I became less dogmatic about my favorite programming language of that time and started learning others. I hope that this same unintentional, but self-directed psychology shift will work for other programmers. And in hopes that the approach has more broad applications than just programming, I recently made the same suggestion to a nervous IT person whose boss wanted him to overhaul their Windows-only network to a heterogenous network using Linux for services better suited to that platform. He was obviously concerned about walking a tight rope without a familiar safety net. Perhaps he just needs some proof that he can adapt to the unknown without being mortally wounded.

I don't have any follow-up on this yet, I'm still waiting to see if the desired effects manifest in the people I've made this suggestion to. But I'm hopeful and the early indications are positive. And I must say that it's a great feeling to adopt a tactic first conceived by a compassionate monk who blazed a path to enlightenment for a fearful people through the field of combat.

The Tao gave birth to machine language. Machine language gave birth to the assembler.

The assembler gave birth to the compiler. Now there are ten thousand languages.

Each language has its purpose, however humble.
Each language expresses the Yin and Yang of software.
Each language has its place within the Tao.

But do not program in COBOL if you can avoid it.

- The Tao of Programming : 1.3

Upcoming Events

CPG: Pragmatic Software Architecture and the Role of the Architect

May 21 2008 - 6:30pm
May 21 2008 - 9:00pm
Etc/GMT-4

What is software architecture?  What is the role of the architect?  Is architecture relevant to agile development?  What does this have to do with developers?  This presentation will answer these questions and more.  It will help you bring an architectural mindset to your development by identifying architectural techniques you can use in your daily development. If you're interested in architecture, being an architect, or just want to think about software development in a new way, join us for this exploration of architecture and the architect.

Add to calendar