An intelligent developer always advocates that you should "use the right tool for the job". But is there really a "right" tool, or is that just the developer's way of being tolerant to other languages and tools? I suggest that in 90% of development projects the "right" tool is strictly the preference of the developer and that there is no concrete reason that the tool chosen is the best fit for the particular job.
My thinking on this is the result of moderating the Battle of the Frameworks panel at Philly ETE last week. The audio for the session is available, so you can listen to it yourself and see if it matches what I feel happened.
The first question asked of the panel was, if a friend of yours someone came up to you and said they were starting a web-based business, what programming language and framework would you recommend to them, and why? The answer that several of the panelists gave was that you should use the right tool for the job. At the time this made sense to me, and I didn't disagree, but I have a somewhat different opinion now. The reason for my change in thinking is that the "best tool" for general web development was different for different people. This wasn't the result of a specific question, but more of a feeling.
I had been talking a lot with Dan Allen (author Seam in Action) and Lincoln Baxter III (creator of PrettyFaces) at the conference, and they really felt that Java 6 EE was really a great platform for web development, implying that it was the right tool for the job. Their reasoning seems to be that if you use Java, Java 6 EE is a great tool to use because it is the official platform for Java that was created from a standards process. In addition, because it is based on standards, and not a proprietary implementation, there are several implementations to choose. So vendor lock-in seems to be part of their reasoning.
Also at the conference I sat in on the Groovy meet-up, and it was there that Venkat Subramaniam (author of Programming Groovy) said that for web development you would want to use a dynamic language. So to Venkat, the right tool is Groovy or some other dynamic language because somehow a static language like Java makes web development harder. This was mirrored by Obie Fernandez (author of the Rails Way) at the same panel in 2008 that said, "There's basically no reason whatsoever that anyone in their right mind would do anything web related in Java". For the record, following the panel in 2008 he said they some of the stuff he said was just to start fires, so although he may have exaggerated a little to stir the pot, I still think he generally believes this statement.
So how do we reconcile these differences? Every member of the panel is an experienced developer, most of them authors, working for some of the biggest names in our industry, and their opinions are well respected. So why do they say "use the best tool for the job", yet seem to have differences in how they determine what that tool is? the majority of the panelists, if not all, have worked with both static and dynamic languages. So they know what the differences are, yet it doesn't seem like they would agree on the same tools given a specific set of requirements.
Perhaps there is no right tool. Perhaps the right tool is whatever tool you feel comfortable using. Perhaps Java, Ruby, and Groovy are all different brands of shovels, and you just need to pick which color you like since they all do the same things. And Subversion and Git are merely rakes, one green and one blue. Same for Maven and Ant.
So perhaps the real answer to the question of what is the right tool is simply, "the tool that you like to use".