The IT world is constantly forging ahead. There already exist several dozens of programming languages and software technologies. At the same time to choose the right thing for a specific project is not an easy thing to do.
Every technology has its own advantages and disadvantages. Hence, if you want to choose a certain implementation, which will be effective for both-development and its further support, you need to consider following issues: project scalability, its tasks and timeframes.
Large-scale projects (high load systems)
For big and high load systems (more than 3000 queries per sec, beginning from 10000 database tables) it is necessary to choose the technologies very comprehensively, as it will influence the general project productivity and security.
There are 4 suitable languages for the backend: Java, NodeJS, PHP and ASP. Though it’s better to use Java, as it allows achieving effective work speed, and gives the possibility to support hyperthreading and refacoring. Moreover, Java is one of the best fit from the point of view of development speed – there are plenty of handy frameworks.
It is better to remember, that NodeJS is a bit difficult to use when it comes to complicated calculations. Nevertheless, it helps to provide an easy project scalability and processing speed.
When it comes to high load systems, one should remember about extensibility, because it is one of the problem developers face to most often. Hence, it is necessary to think over the work layout with a database in details. For big projects it is better to put away relational databases, and turn attention to non-relational models, such as MongoDB и Redis. It is possible to use CouchDB as well.
It is relational bases that place a limit on the projects and do not give an opportunity to be extended easily. Non-relational models have a completely different structure: instead of SQL-queries API are used.
While working on middle-scale projects (1000-3000 queries per sec, 2000-10000 database tables), i.e. not too load, but not home pages either, it is possible to use Java and PHP. In this case NodeJS will not give such attractive results as in high load projects.
Databases can be both relational and non-relational. Everything depends on the further project development. If it is planned to grow rapidly, it is better to use non-relational models MongoDB or Redis. If a too big scalability is not required, Oracle will perfectly fit. The point is that in spite of being relational, Oracle is used in many projects that have a potential to scalability. At the same time there no extension problem emerge, even if several servers are used.
When the question is about small projects (less than 1000 queries per sec, 2000 databases), it is essential to put away all the complicated things, that present in high load systems. Consequently, PHP, Ruby on the Rails (this framework allows fast development), Erlang are best for development here. No doubt Java can fit as well, though it would be much faster and easier to use PHP or Ruby.
Anyway, apart from the project scalability it is essential to consider its potential. The reason is that the problems start after the project growth, when developers face to inability of an adequate project transfer to other servers and workload distribution. Besides, it is important to keep in mind the project tasks. It is highly possible to turn out, that what is popular today will not be effective for a specific project.
You know that my opinion is not the ultimate truth 🙂 I would be glad to read about your experience of using languages, databases while working on different projects!
Question. Do language really influence the speed of an application in the world of JIT compiling? Sure, programmers have some obligation to write optimised code, but language compilers do a pretty good job these days.
Then we look at the traditional server stack. You listed Java, PHP and ASP. Firstly I question if ASP is even a language, rather a scripting technology allowing the use of VBScript, JScript or other scripting languages with the appropriate plug-in installed. So what about Microsoft.Net languages such as C#, VB.Net, C++ and other languages that can be used on the common language runtime? Again, do 4th generation languages really make a great deal of difference because they still are Just in Time compiled to the host architecture running in sandboxed Virtual Machines, i.e. CLR/JVM.
Does is matter how extensible a language is or how extensible your architects design the application? I would go with the latter. The language is just a tool for the job, it will do what needs to be done and the better you write code, the better the application will perform and the easier it will be to maintain and introduce new features as the product evolves.
I personally feel that discussing the performance of applications based on language is the wrong approach, one that only people who don’t really understand technology sadly seem to make. At the end of the day, its the right tool for the right job and you have to consider the technology, frameworks, support, costs. Any good developer can write in any language if they try hard enough, so language is probably the lowest of priorities in terms of creating software for large, medium or small scale products.