On walkabout in life and technology

Programming Polytheism

One of the worst things a programmer can be is a monotheist, a single language and platform developer. Whether you are a corporate programming drone, or a hot-shot indie, you should be a software polytheist.

It all starts with recruiters and job ads. “Looking for a C# programmer with 5 years experience”, “Looking for a Java back-end developer who understands spring and hibernate”, “Looking for a COBOL programmer to keep our ancient accounting system running”. These are jobs requiring a single skill, for a single project for a single line of business. Don’t take them. The employer will lock you in to that skill and project, you’ll start by having fun in development and end up spending a career bored and unappreciated in maintenance. And when the product dies, so does your career.

Monotheism in programming is too easy to get stuck with. The more time you spend on a platform, the more likely you are to get the next job that requires those skills. The more time you spend in a language, the less chance of you getting work in another language or platform. Making the switch is hard, staying the course is easier.

Platforms grow, change, and rise and fall in popularity. The language and platform you are using today is most certainly not the language and platform where the hot and paying jobs will be in the future. Monotheists live and die by the current platforms, polytheists grow in skill, career, wealth and experience by moving across platforms and languages. Polytheists get the next jobs and the promotions. Monotheists become ‘too valuable’ to move as they are the only luddites who know the old platforms, their careers stagnate, and it’s cheaper to replace them with a young monotheist in the new game than to ‘retrain’ the old person in a new platform.

One of the great things about programming polytheism is the ability to use patterns and techniques from one platform in another. MVC in Javascript using Backbone.js is an excellent example of taking patterns from other platforms and applying it to scripting the browser. I finally understood delegate patterns using Cocoa and applied them in both C# and Rails projects. I finally got blocks in Ruby and applied them in Objective-C. In short, programming polytheism makes you a better programmer.

Programming polytheism also allows you to use the right tool for the right job. C++ is a rotten scripting language, yet many organizations have C++ glue code. Monotheism leads to IT departments that take three months to solve problems that take 5 line ruby scripts to fix in minutes.

So if you are a back-end C# developer, learn HTML5 and Javascript. If you are a Java programmer, learn Ruby or Python. If you only know Windows, learn UNIX. Try to learn something new at work. If you cannot, do it at home on evenings and weekends.

And then beg, nag, plead, and do whatever it takes to use these new skills on your next project. It will not only enhance your career and enjoyment of your work, but will extend it indefinitely. And your company will be more nimble and productive than ever.

I was thinking about the above when I wrote the other two articles on this day (Objective-C and iOS and Ruby on Rails). I was thinking about the differences in languages and platforms I used this year and realized that I had a ball using all of them, made better products because of my experience is a diverse set of tools and platforms, and noticed that my career has been better for it. Programming polytheism for the win.