Joel Spolsky has touched a basic and important topic – choice of programming languages for development. A wrong decision here can ruin the entire effort of software development. Well, not always, but a feeling of using an improper language down the line is too frustrating, it kills motivation for writing better software.
There are lot of choices available there, and it is not just about languages anymore, it is about platforms. The dotNets, Java, PHP, Python, C/C++, Perl and more recently Ruby are some of the names you will come across. Most of them offer similar features, some of them are equally mature and some of them represent the leading edge technology. While the choice can narrow down for Web development, it still does not make it any easier considering that the everyday Web software is developed for the lowest common denominator. So, how do we decide which one to go with?
Joel says choose the mature and industry-tested ones and then choose the one you know best, which is quite true. However, I feel there are some additional factors that can affect choice of the languages. The biggest one is choose the one that can satisfy the clients’ requirements. An excellent example of such a requirement is that a product should be portable across multiple operating systems. The suitability cannot be determined absolutely and wholly, it has to be done by looking at different factors.
Today, software development is hardly about developing just one piece of software. The buzzword is integration. Web is made for communication and softwares talk to each other. If you are developing a product for a specific client you have to consider the existing ecosystem. There might be existing applications or some future requirements which have to be considered. If you are developing for multiple clients then you have to consider the domains rather than just applications to talk to. A very simple example is that if you develop a event handling system, it is possible that it might have to talk to other calendars. If it is a specific client you can focus solely on compatibility with that. If it is for multiple, you might have to comply with the industy standards like iCal.
Sometimes these features are more easily available in some frameworks in specific languages than others. Sometimes choice of the language is implicitly made by selecting a framework.
We cannot ignore the open source pool of software available. Sometimes the sheer presence of huge community and required features can drive selection of the framework/tool and hence the language. What would you do if your client wants a blog? Would you choose WordPress, Movable Type or one of the other thousands of existing blogging engines? Whichever you choose will dictate the ecosystem and the programming language along with it.
This is so true for Content Management Systems today. There are thousands of options available, and most of the times you choose a CMS to develop software for your client. In such cases choice of the programming languages is hidden.
Domain Specific Languages
We have looked only at, what we call, the generic programming languages. There are also some Domain Specific Languages (DSL) available that can make software development much easier. A commonly used example of DSL is SQL which is targetted towards database programming.
Type Of Programming
Though not popular yet, there are more than a couple of programming types. The archaic, but very effective procedural programming, the logical programming, the popular imperative programming and object oriented programming, the now popular functional programming and the new ones like aspect oriented programming. Wow, that’s quite a list! Sometimes the requirements can demand a specific programming style. A feature of functional programming is the multiple dispatch ability, which can make software development easier in some cases. An example that made rounds recently was that the Linspire/Freespire project adopted Haskell, a functional programming language for its core development.
As with the programming, even the architecture paradigms have been actively evolving. The web architecture itself has been a hot topic of discussions. Sometimes adoption of architectural style can lead to narrowing down the choice of programming languages.
As an example, if you decide to use ROA then Ruby might be the appropriate choice, in spite of the faults pointed out by Joel.
I believe that combinations of all these factors will be different for different projects. Complications increase two-fold when you have to build a demonstration or a prototype quickly before starting with the product development. Sometimes it might be appropriate to build a team that knows the language that needs to be used rather than using one that the existing team knows. Of course it has its own implications, but which one is better can be decided only when we consider a project. Till then we can only try to iterate through all the factors and make sure we consider them.