Tom Petrocelli's take on technology. Tom is the author of the book "Data Protection and Information Lifecycle Management" and a natural technology curmudgeon. This blog represents only my own views and not those of my employer, Enterprise Strategy Group. Frankly, mine are more amusing.

Friday, April 09, 2010

Programmer's Religion

I've been thinking a lot about programming languages. It occurred to me that I know quite a lot of them. Though I personally prefer Java, I've also written code in C++, C, Pascal, various assembly languages, HTML (a kind of language), Javascript, XML, SQL, and a variety of others professionally. For amateur projects, I've used PHP, PERL, VB (ick!), C#, and now Python. I even took a shot a LISP once. So, I don't have a lot of religion about what I program in. They all have strengths and weaknesses, good and bad.

So it came as no surprise when a very knowledgeable technologist asserted to me that a good programmer could write code in any language. As expected, I agreed. Being a polyglot programmer myself, it certainly seemed correct. At the time it did. But maybe...

Since then I've come to believe that you can write a program in just about anything but not write code professionally in more than a few. Modern coding requires more than just understanding computer languages. With the exception of a few outliers like LISP and SmallTalk, most computer languages fall into a handful of syntax groups. Java, C++, C#, PHP, and Javascript are so similar that it's hard to imagine any experienced programmer not getting the basics.

But only the basics. The problem lies in what it takes to be a productive programmer. Understanding how to program a computer or write in some language is less than half of what you need to know to do it professionally. Enterprise applications especially are built around entire frameworks and environments.

Take Java. There are several graphics built-in libraries such as AWT and Swing. It has a rich set of general collection objects with the ability to adapt them to any type of object using simple syntax. There are lots of utility, security, reflection, multi-threading, and database connection classes. That's not even getting into Enterprise JavaBeans (the middleware/SOA framework) or servlets which are used for web programming. Keeping up requires books, training, and on-line resources. You have to focus on staying current with changes and new additions.

This is where the difference lies. There is Java the language and Java the development environment. C++ is a language but C++ in the .Net environment is what you write code in. It's very difficult to focus on being expert enough to be a productive in more than one of these complex environment. This is why you see programmers with so much religion around their languages and environments. .Net people can be passionately pro-.Net. Java people can be Java bigots.

It's a natural side effect from all the effort that goes into being expert enough at something to do a good job with it. It's not that one environment is better or worse – all have their strengths and weaknesses. The demands of being productive in any particular environment require that you focus all of your attention on being good at one thing. You can switch languages and environments but it's like switching religion. It can be done but it's a process that will take time, effort, and will.

So, I take back what I've said in the past. A good programmer needs to have religion. Not religion in the sense of unquestioning zealotry. Religion as in a deep devotion to their craft and a singular focus on what they are doing.

No comments: