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.
For the frontend it is better to use JavaScript and HTML. JavaScript makes any calculations much faster, while Flash copes better only with rendering, and HTML5 is not supported by all tools yet. That is why standard (as it may seem for many developers) suite of HTML and JavaScript is the best option here.
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.
Middle-scale projects
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.
Besides HTML and JavaScript, for the frontend it is allowed to use HTML5 and Flash as well. Nevertheless, it is necessary to be very careful here. The notion of middle-scale project is quite vague, thus, one should to draw upon the project tasks. If the question is about a small graphic maintaining, then probably it will make sense to replace Flash by the last HTML version (HTML5) together with JavaScript. In case the project needs detailed rasterizing and full script of graphic action, then Flash would be the best solution.
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.
Small projects
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.
For the frontend it’s better to practice Javascript, HTML5, HTML, Flash/Flex. Most often small projects do no presuppose a big growth, that is why MySQL or PostgreSQL are better to be chosen as a database. Oracle may turn to be too bulky and unprofitable for the client, while MongoDB and Redis will not be effective. The thing is that despite growing popularity of non-relational databases, the smallest mistake in their usage can entail serious consequences. In this context relational models are much easier. Hence, while working on small projects it is better not to spend time and practice relational models, such as MySQL and PostgreSQL.
To sum up everything above said, Java, NodeJS, PHP, ASP + JavaScript and HTML + MongoDB or Redis are better to be used while developing high-load projects. For middle-scale projects- Java, PHP + JavaScrit, HTML, HTML5, Flash + Oracle, MongoDB, Redis. For small ones – PHP, Ruby on the Rails, Erlang + JavaScript, HTML, HTML5, Flash + MySQL, Postgre SQL.
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.
NodeJS is JavaScript (CommonJS), however JavaScript engines are very different. NodeJS runs on the Googles V8 engine in the server side whereas JavaScript in the client runs on any number of engines determined by the browser, engines such as Rhino, Nitro, V8 and Chakra. Depending on the engine, JavaScript can give a varied performance. Flash or Silverlight on the client however is fairly consistent with performance determined by the host, but its only supported on the desktop. You ignored Microsoft ASP.NET MVC3 and any of the languages .Net supports for client side development. Looking briefly at their technology. their new Razor engine produces pretty good HTML mark-up, supports jQuery out of the box and allows you to target many device platforms using specific views catering for desktop, tablet and mobile.
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.