I really enjoy Lawrence Kesteloot’s article Java for Everything. As the (young and naïve) fogey that I am, I like to link it on email chains where my coworkers expound on the cool new thing (usually node.js, where I am).

I would like to add one more argument for using Java (or whatever) for everything. This reason really only applies at large companies, not to small teams or open source projects.

A lot of arguments (straw man arguments, perhaps) against using new and interesting languages like Scala or Clojure or Haskell involve the idea that it’s hard to hire people that know those languages or that it’s hard to train existing employees. That’s not my argument.

Additionally, I hate “standardization” for the sake of standardization. I’m also not afraid of “duplicated effort.” I currently have a ton of latitude when it comes to deciding what to do and what tools to use and I absolutely love it.

Nevertheless, I would not create a new project (at work) using anything but Java as the primary language. Sometimes that just burns me up because I would love to try out Clojure on a serious professional project, but I can’t justify it (to myself).

As I said, I love the latitude I have to choose the tools I want, but I also love the fact that at a company with >15,000 engineers across >1500 engineering teams I can immediately call anyone else’s service or make changes to their codebase. I can do that because, while everyone can choose their own tools, they almost always choose to use certain standard tools. And I think that that is more important than being able to try out a fun language or platform. If I build something on Clojure, it will immediately exclude members of my team as well as engineers across the company. When I leave, who will pick up where I left off if they have to learn a new language?

Luckily, the tool support for Java development, build and deployment is very, very good where I work. In fact, that’s probably why people use Java so much even though they are given the choice to do anything they want.