In the world of open source, Java comes quite naturally. There are the quite significant Apache and Eclipse foundations, along with the very many smaller open source contributions. But this makes Java a bit of a hammer for very many nails. Personally, I like working with Java. But sometimes I see Java being applied where it perhaps shouldn't.

One of my favorite examples of this is the way 'simple' console applications are strapped together using quite heavy weight frameworks. Usually this is done for reuse. But as often is the case, hammers are often applied where they don't need to. In general, (Java) developers look down on (Perl) script developers. They correctly presume that script developers often have difficulties applying software development principles. But they incorrectly presume that this is a bad thing.

Ofcourse the same holds for anything else. By choosing either the Spring framework or Guice to realize inversion of control should not depend on whether one knows something of either one or the other. Anybody (in a position of) choosing either one or the other should pick either based on their individual merits in any given situation.

Then there are the most grievous application of this decision recycling. Namely designers that tend to limit their ideas to what they know. Which often are centralized and oriented around client server. This limited sense of design and architecture is not universally applicable. Let us not try to fit everything to our known patterns. Perhaps, instead of trying to fit everything to a known pattern, start with trying to find the best solution to the problem and see what patterns we can fit to it. Design should be an organic and flexible process, not just putting together lego blocks.

Too often developers choose a framework, tool or language choose based on their personal peeves with either one or the other. Making a selection of what they like, instead of what is right. There is one nuance I want to add to this. Choosing anything is for the most part a matter of covering risks. If developing something in Python would be better than developing it in Java, but there is nobody with Python experience, that is a risk. But if the risks are acceptable, or even better, managable, choose what you think is fun. Proper motivation may sometimes even lead to better results that just choosing right.