One of the rarest of decisions we are allowed to make is when it comes to selecting languages and frameworks or maybe even libraries for our project. These decisions are often out of our control. Thus, this is not something with which we may have any experience. While we do have the options to do this for our personal applications, the larger ones usually are almost predetermined concerning the implementation tools.
Choosing a Primary LanguageThe choice we least can make is the core language. We are more or less going to be stuck with the corporate language. Failing that, it will be what is popular in the region or what we are most reliable in. Nevertheless, there are situations where we are left to build a case for a primary language for a project.
There are several critical factors to consider (stability of the language, whether it is appropriate for the type of solution, availability of programming resources). However, there are other things you should keep in mind while making this decision, as well. These other items include licensing, cost, extensibility, vendor support, user community, and our ability to use the language. Do your homework, and do not merely select that cool language you always wanted to learn.
Frameworks and LibrariesOut of selecting languages, frameworks, and libraries. The framework seems to be the most common. Yes, we often have a bunch of libraries we use. However, those tend to be roughly the only option. The most common tasks we code are often codified in a library that is used by an overwhelming number of developers with the same need. Think about things like J/N Unit, log4j. Apache commons and similar libraries. These are almost defaults that you will use for your applications. A choice is not really what we can call this.
Frameworks can fall into a similar situation as libraries. On the other hand, we often have two or three good options from which to choose. I am thinking about frameworks ranging from database integration to testing to javascript to UI (CSS) and many others. In these cases, we need to look at what problems we most need to solve and whether the frameworks help us get that work done better, faster, or more reliably.