I wrote an article three years ago, “Become a Better Java Programmer – Learn Something Else“, that was subsequently picked up by JavaWorld and DZone and received moderate positive and a bit of negative feedback. The negative was primarily aimed at my assessment that “perhaps 80%” of the best local Java talent were familiar with at least one of a set of other languages I listed. Some readers felt the 80% was pulled from thin air (or pulled perhaps from somewhere else), and I concede the number was simply an estimate. And of course the “best local Java talent” line was also subjective, but time has shown I am a good judge of that.
The gist of the article was that the best Java pros that I knew at the time were either fortunate, curious or ambitious enough to learn other languages and platforms. Perhaps they wanted to improve their Java skills, to simply climb a mountain because it was there, to have a Plan B in case Java went downhill (article published June ’09, Oracle/Sun deal announced April ’09), or maybe they knew something I admittedly didn’t know regarding where things were headed.
When I wrote the article, I was offering career advice targeted to Java developers who wanted to continue to be Java developers – learn another language and you should become more effective using Java. I don’t think I had any real instincts that things were going to change dramatically over the next several years. I think the dramatic change is now happening, and it’s time to pay attention if you haven’t been.
The concept of polyglot programmers and polyglot programming isn’t new by any means, and I realize that I’m certainly not the first person or the most qualified person (I may be the tallest) to think or write about the subject. Neal Ford mentioned it over five years ago in a blog post that was quite prophetic.
Think of it this way: Years ago if you were living in Germany, chances are you only spoke German. As travel became easier and business spread to different countries, the world got smaller, and it was advantageous or even necessary to learn new languages because the chances of encountering a non-German speaker were greater. Now many Europeans speak at least a couple languages fluently out of necessity. If you are a bartender in Rome, chances are you know how to say ‘beer’ and ‘thank you’ a few ways. The software development world and the options within it have grown vastly, but the need to be productive or conversant in more than one programming language has not historically been a requirement to get ahead. I feel that has changed, and will continue to change in the years to come.
Since writing my last newsletter I had a couple interesting and vastly different conversations with two technologists that made quite an impression. One was with a very experienced (>10 years) Java programmer who admittedly had no real programming experience beyond the more common Java tools and API’s (some MVC, JSP) and invested little time trying to keep up with industry trends. She had many years with the same company and saw very little change in the tech environment. The second conversation was with a grad student finalizing a Master’s in Comp Sci who had academic, internship, and professional experience (< 2 years) with Python, Java, C++, and Ruby. He was involved in various tech communities and technology was a hobby in addition to being a chosen profession.
Right now, both of these candidates are quite employable, and as you would expect the experienced Java programmer will earn more at present. If I had to buy stock based on future earnings and career advancement in these two candidates today, I’d put all my money and mortgage my house on the grad student. This Java pro is, at this point, not even aware that the world has passed her by.
Historically, most software shops were hung up with hiring requirements that listed minimum amounts of acceptable experience with a technology. I can recall having to explain to a client a few years ago that the only person that might have had the amount of Spring experience they were seeking was Rod Johnson (true story). When I speak to my clients now, it is clear that most are more interested in aptitude over experience with specific languages or tools, as well as an understanding of certain core engineering concepts and principles (perhaps multi-threading or functional programming) in addition to a set of character traits that tend to result in productive engineers.
The metaphor I often use is to liken engineers to athletes. A great athlete can throw a football or a baseball skillfully and is able to use both a hockey stick and golf club to make solid contact with a puck or ball, once the athlete makes some simple adjustments to the chosen object. Likewise, a truly great engineer should be able to succeed using any of several languages, once they understand the syntax and basics.
With the wide variety of robust languages and platforms currently available and ready for prime time, it is hard to imagine that any one or two will become as dominant a force as Java and .Net have been over the past 10+ years. I believe the days of hearing ‘We are a Java shop’ or ‘We are a Python shop’ are behind us. The most innovative shops are mixing technologies based on using the language/platform that is the best fit for the task while also factoring in the experience level of the team members. To remain valuable and relevant, it is becoming necessary to write software in more than one language. Having the ability to produce in more than one language may be a luxury today, but it is becoming very clear that this will be a necessary skill for tomorrow’s engineer.