The Problem With Monoculture
I'd like to wax philosophical for a couple moments and talk about what I perceive to be the problems with monoculture. Culture is an interesting beast. At times, it can be brilliant but in the same breath, can be equally dangerous. This is especially in programming circles, in part due to the nature of how they develop and work.
These days, most programming communities have their primary foundation in the Internet. In many ways, this is a blessing. A massive, asynchronous, searchable mass of delicious information if there ever was one. There's always someone online and you can get/give help at pretty much any time of the day for what amounts to free.
The problem, as I perceive it, is the moment ego/pride comes into play. Many programmers feel very strongly about their tools. After all, it's their personal choice and usually what they focus their efforts on. You get tied up and emotionally attached to what you're creating.
Which brings us to the problem that seems to afflict so many communities online. A group of programmers get together and are so proud of what they built/use that it begins to blind them toward other options. The feeling of superiority builds, and every problem starts looking like a nail you already have a hammer for. When this happens, the monoculture is born. And when this forms, it begins to reflects badly on everyone. Worse, it makes any newcomers to the technology feel alienated and/or threatened, which in turn hurts adoption and feelings. And like it or not, there's a person on the other end who does have feelings.
Examples of this are easy to find. The very worst offender, in my mind, is the Java community. Java programmers, in general, are infamous in their ability to rebuild anything and everything, sometimes many times over. Make no mistake that this isn't an attack on Java itself, but directed toward the people using it. The PHP community (if you can really call it that) suffers from the same affliction. Even the Python community fares only slightly better, if only because my perception of the attitude being slightly more relaxed and newbie-friendly.
And of course, I would be remiss if I didn't include the Ruby (and more specifically the Rails) communities in this, though their case seems to be a slightly different one. What the Rubyists seem to allow for the inclusion of other languages in their implementations, they more than make up for in pride.
The root problem in all of this is the failure to maintain an open mind to other possibilities. Your language/tools, as cool as they are, aren't perfect for every scenario. And sometimes, there are better ways to solve problems than your community's preferred solution.
Solving the problem of monoculture isn't hard. The solution is to seep yourself in many technologies, recognizing their strengths and imperfections. Read blogs for other programming communities, because what they do is solve the same problems you do, just in different and sometimes novel ways. Look at source code from other languages and learn how they handle things. Browse through white papers on things you've never seen or done. Go write a program in your favorite language, then port it to a language you've barely just learned in the most idiomatic way possible.
I blog about this because I fell into this trap long ago (more than once actually). I got proud and stuck up about what I thought was cool/good. Sometimes I still find myself doing this. But it's all about trying to improve. So challenge yourself and go learn about something outside your experience. You'll be glad you did. Now, if you'll excuse me, I'm going to eat my own dog food and go spend some time with Lua.