“Patriotism is a kind of religion; it is the egg from which wars are hatched.” - Guy de Maupassant
I’ve spoken a great deal thus far about the importance of knowing when black and white thinking is helpful and when it’s harmful. For most people, it’s easy to make this distinction. Doctors tend to learn what procedures are there for safety and which are there for to protect the higher ups. Police officers know that if they wrote tickets for every offense they saw, they’d be busy as hell and pissing off the people instead of protecting them. Music professors teach the rules of music and then teach the student to ignore them. Yet developers… we are very rigid. There’s a right and wrong way to do everything. This thinking gets us very far, but there’s a dark side to all this: evangelicalism.
When I was a young programmer, I realized there were a vast number of options out there. I was enthralled by the choices available to me. I can be a Java developer, I can be a Perl developer, I can be a ColdFusion developer. I can be a C++ developer. The options were vast. My mind was a sponge. This didn’t last long, however. Soon I found a niche: Allaire’s ColdFusion. And it was good for what it did, especially at the time. Easy to learn, clean flow with HTML, and at the time the only other options were ASP and PHP (and possibly Perl with Mason). ASP wasn’t really an option for me, PHP was in its infancy, and Mason never really to this day developed as fully as I’d like. To do rapid application development, ColdFusion was great! And so my first tryst with evangelicals began. I became active in CFUGs and started professing the greatness of ColdFusion. And why wouldn’t I? I knew little else that could do what I wanted. Then I learned of the raw power Perl presents…
Perl, a shell language turned scripting language, had a level of access to the file system that ColdFusion completely did not at the time. I could read files directly. I could write scripts which would manipulate images. I could write amazingly fast regular expressions. Hell, I could even trick it into working like an Object Oriented Language. Oh and CPAN… drrrooooolllll. So I joined the local Perl Monger’s chapter and even hosted the meetings at the lab I worked at during that time. Unfortunately, no one would let me use Perl as much as I’d like because I had locked myself into ColdFusion development.
What’s next? What’s the point of being an evangelic if no one wants to come with you? I went from Evangelical Perl Monger to Missionary. I began dragging coworkers to meetings, I would talk endlessly about the benefits of using Perl, I would chime in with a, “It’d be easier in Perl,” at every opportunity… and people hated me for it.
Was I right? Sometimes yes, but most of the time, no. Just because it’s cleaner to do something in Perl does not mean that it’s right. Nor does it mean the solution we had was “bad”. Yet, I could not see the mountains of code from the solid rocks of practicality.
Why is it that so many programmers stick to one language? Since then I’ve learned more language, programming models, and development IDE’s than I’d care to list. What have I learned from this?
1. The Right Tool For the Job and the Best Tool for the Job are Rarely the Same Tool
Being a good programmer has little to do with what you code in as much as it does with why you code in it. I’m working on a project right now that would benefit most from being in Ruby Rails, but the project manager doesn’t understand Rails. He doesn’t know why it would help, and he’s far more comfortable with PHP as he’s dealt with PHP development before. So, say I insisted in using Ruby, I would have to add another level of complexity to this project of trying to convince him it’s the best tool for the job. And in doing so, I would also have to convince him PHP is not the right tool for the job…. which is untrue. PHP is the right tool, despite being not the best. Why? It does everything the project needs and it makes the project manager comfortable. Who am I to try and convert him? I told him, of course, but he’s still uneasy. Being a mature developer means you are able to…
2. Pick your Battles
There’s a time and place for your convictions. Missionary programmers are unable to recognize this as they’re too busy worrying about their own agenda. Pushing a language is not a noble goal for a project. It’s a noble goal for developers. If you are willing to sacrifice your projects for something as ethereal as a language, you’re missing the point of being a programmer. Being a programmer has nothing to do with pushing a language or tool. The goal of a programmer is to …
3. Be Productive, Not Combative
If you’re going to develop in a language, you may as well use it to its fullest. It doesn’t matter if it’s your favorite, nor does it matter that it’s the right tool. The point is to help people. I can’t underline this enough: The Point Of Being a Developer Is To Help People Not Causes. The perfect example of this are the epic battles between emacs and vi. The most ironic thing about the emacs vs. vi conflict is that these people got nowhere. There was no winner. These very intelligent people were spending so much time arguing over something as trivial as what text editor was better. How ludicrous! Just fantasize if the amount of energy spent arguing over that alone was put into developing some good software… we could have solved the NP-completeness problem!
Ok, maybe I went a bit overboard with that. The point is, to be a good programmer you cannot be a missionary programmer. There is no “right” language. It’s not Java, it’s not Python, it’s not Ruby, it’s not C#. It’s whatever works for the project. Learning how and when to use the right tools is how one becomes a better programmer.


July 15th, 2008 at 2:54 am
To the contrary, my good man:
Python can do all a non-snake can.
And do it better, most often than not:
Less lines written, less bugs begot.
Gladly do I make this missionary claim
And gladly answer to a missionary name.
There’s truth political, and then truth that’s true:
Deny all you want, men, but the Turtle Moves.
Productive _and_ combative, that’s what I say:
Primal programmers keeping bugs at bay.
There’s great beauty down the python-hole;
And I lie not, even though I am a troll.
July 15th, 2008 at 7:50 am
CakePHP will give you all the MVC benefits of Ruby On Rails. I specialize in ASP.NET but I’m studying CakePHP to grasp the concepts of MVC. Microsoft is currently working on their version of MVC for ASP.NET.
July 15th, 2008 at 9:28 am
[...] excuse me for a few minutes, I’m gong to be a language missionary. I could apparently be a better programmer, but I’d rather be a [...]
July 15th, 2008 at 9:37 am
cakePHP and codeigniter (which is what I’m using), might have the MVC aspect, but it’s missing the conventions which is where the real power comes in. The real issue boils down to whether PHP is any good at OOP, and that answer is simply no.
July 15th, 2008 at 10:40 am
Hear, hear. When all you have is a hammer…
The biggest problem most programmers have is that they have a great deal of time and effort invested in their personal “hammer” of choice. I always suspect that the biggest reason that a lot of programmers don’t want to learn something new is because they fear finding out they wasted their time. (Of course, that’s never the case as you take skills and insight developed from learning new tools with you.) Having a diverse set of tools gives you the ability to focus on solving problems and not fighting with a tool.
Makes me wonder how some folks mow their yards with only a shovel.
July 16th, 2008 at 9:52 am
Funny that I find this post at a time when I’m studying my primary MVC framework as well as learning Rails/Django/Cake at the same time:
http://today.icantfocus.com/blog/mvc-marathon/
My goal at the end of that series is to be able to understand #1 much better for those frameworks. They all have something to offer for differing situations and there is no winner.