The Polyglot Programmer

In the recent months since I've entered the entrepreneural scene in Chicago, I've encountered quite a number of programmers: a decent number of veterans and an increasing number of new developers coming out of a new Ruby on Rails programming academy known as Starter League (formerly Code Academy). Most of the Starter League students and graduates I've met, were young, bright, optimistic and felt they could conquer the world with the tools at their disposal. However Chicago being home to 37Signals, birthplace of the Rails framework for Ruby, and Groupon, poster child for Ruby on Rails success gone wild, I see too many developers holding on to the tools that other companies have used to model their success. This is not a post about Ruby on Rails, Groovy on Grails, Scala on Lift, Java on Play etc.

The point is with all the success we've made in the open source world these last few years creating domain specific languages, and frameworks that specialize at one or more problem area in web development, a disturbing trend is arising. People are taking the position of defending the frameworks that they have learned and using it to bash other frameworks. Language bashing is going on all over the place. Ruby is a beautiful language, but it's not the only language. Rails is an awesome framework, but it's not the only framework. I once questioned a developer who was launching his startup at TechWeek, why he chose Ruby on Rails as his platform, and why he developed using a MacBook. I was actually geniunely interested. I was wondering if there were performance gains that Rails gave his application, and ability to handle concurrent connections? I was wondering if there was some special tool on the Mac that made it more well suited to development. The answer I got was astounding... "Because Groupon uses it!" Okay, that must be the dumbest reason to use a framework or buy a computer that I've ever heard. I also hear the same from the Scala crowd regarding Scala adoption, "Well, Twitter's using Scala now, so we're doing it too." Seriously? My dentist uses a sickle probe to clean plaque from my teeth, but I use a toothbrush and floss. Which one of us is right and which one of us is wrong? Neither. But my dentist has different goals than I do.

Somehow we got caught in this paradigm, where we believe that for one person to be right, the other person has to be wrong. So for one framework to be right, the other one has to be wrong. Several tools work for many jobs, and most frameworks are general purpose, as are most programming languages. But... and this is a big one, each have their own strengths and weaknesses which make them more or less appropriate for your project. Somehow, we're failing the newer generation of developers by failing to inform them that the biggest skill in development and eventually engineering is choosing the right tool for the job. If you don't know how to use the right tool, it's worth the investment to learn rather than try to use the wrong tool for the job. This is how we're going to create the next generation of programmers that we need, the pologlot programmer.

Learning the strengths and weaknesses of a few languages and frameworks can go a long way toward choosing which languages to begin your intial foray into polyglot programming.  While reading The Well-Grounded Java Developer, the author makes the case that languages and frameworks exist in Ola Bini's polyglot programming pyramid. To the bottom we have stable languages, in the middle we have dynamic languages and to the top we have domain specific languages. The higher up the pyramid we go, the more specific and newer the language and technology.  I would challenge every developer, or technical entrepreneur to choose the right tools for the right job that you're trying to address. While one might argue the learning curve on different languages make it impossible to do so, it will actually make you a better developer. Imagine a handy-man walking around with a hammer, and using it for every job, just because it was the first tool he learned to use. Sure he could hammer in my screws and they'd stay in place, but it would be an awful mess for the next person who needed to come by and unscrew it.

So do we need more Ruby developers in Chicago. Yes! But we need them as polyglot developers, not just programmers who know Ruby alone. And the same goes for the Java and .NET folks.