Over the years of work, I often hear questions about the choice of technologies for a particular web project. Someone asks us how the developers are, how to do it right, and someone comes and asks to do it on a specific technology. The problem is that most choose technologies for subjective reasons, and so far I have not heard a decent and understandable reasoning that would allow choosing a technology objectively, based on facts, not desires. Even a few IT people can choose the right technology, because for this you need to: understand the specifics of the project, have many years of experience in developing in several languages, know how such projects work, etc.
But before choosing something, let’s see what technologies are, how they differ and in what cases which technology to choose.
How most often choose technology now:
- I like her
- A friend advised
- Read on the Internet
- A similar site was made on this technology
What is the problem here:
Like. Very subjective. What if it doesn’t meet the requirements? Or are very expensive and rare specialists working on it? Or does she even die?
Familiar. Usually this is the acquaintance who is “slightly better” versed in IT than the one to whom he advises. And even if he is an experienced programmer, he cannot know all the solutions in all popular languages. After all, no one asks what criteria this friend chose. If this friend is not a CTO of Google, I would not trust such a recommendation so easily.
I read it. It’s already better here: you can find different comparisons and arguments. But again, it takes time for a person, even with strong knowledge in development, to understand all the decisions. And without knowledge in development, all read technical reviews are worth nothing.
Analog. Most of the popular sites are written on one technology or another, because it has “historically developed” that way. If Facebook was choosing the technology for itself now, I doubt that it would take PHP as the basis. It may also be that the technology is already outdated, it was sold on the basis of the previous 3 points, some advertised technology was chosen, and not really effective, etc. You can hardly know the real reasons for choosing technologies in other projects. Optimal technologies are rarely used in similar projects.
Thus, none of the above methods for choosing development technologies meets the criteria of objectivity. Therefore, it is worth first defining these criteria, and only then select a technical platform based on them. Below I will try to highlight the criteria that are really important for the project, on which we will be based.
Important criteria when choosing technologies:
- Project size and type
- Project complexity
- Development speed
- The cost of specialists
- Availability of specialists
- Available development tools
- Availability of ready-made solutions
- Solution flexibility
- Having a broad community
- Solution Fault Tolerance
- Its development trend
- Availability of detailed documentation
- Support cost
- Load Requirements
- Security Requirements
- Possibilities of integration with other solutions
By choosing technology according to such criteria, we can achieve an objective choice and thereby save ourselves time and money.
What are the projects
We will return to technologies, but for now, let’s figure out what projects are. Often the type of project speaks for itself, and you can immediately say what is suitable: either a ready-made solution, or at least in which direction you need to move.
Projects are classified according to their complexity:
Simple (business cards, landing pages, simple online stores, simple applications) – such solutions are usually made on thematic boxed solutions, CMS or templates.
Medium (complex online stores and marketplaces, national-scale portals, various services, advanced applications) – such solutions are usually made on freeware.
Complex (huge portals, social networks, innovative and non-standard solutions) – the core of such projects is usually developed in a pure (native) programming language.
By topic: online stores, bulletin boards, social networks, etc. For most popular thematic solutions, there have been boxed products for a long time, and if we are not trying to make some kind of monster, then it would be more correct to choose them. There are a lot of solutions, it is impossible to describe everything in one article.
In technologies, I would single out 3 levels of abstraction:
A pure language is a material from which anything can be made. We are limited only by the possibilities of the language. All the largest sites in the world with hundreds of millions and billions of users, such as Instagram, YouTube, Pinterest, Tumblr, Dropbox, Twitter, Facebook, Amazon, Digg, LinkedIn and others, are made in pure language. Moreover, the largest projects in the world even create new technologies for themselves, since they are not satisfied with the existing ones.
A framework is a kind of development environment for a programmer with ready-made rules and tools. The framework, on the one hand, helps and speeds up development, and on the other hand, it imposes certain restrictions. Freeworking projects are of medium complexity with millions of visitors.
CMS is a ready-made solution, a constructor in which we assemble the necessary project in parts. It is rather not programmed, but configured. There are a huge number of restrictions, it is difficult and inefficient to go beyond the boundaries of the box. On CMS, simple sites are made with traffic up to a million users per month.
Most often, one level of abstraction is based on another. That is, they make freeworks in a pure language, and they make CMS on freeworks. There are many different frameworks and CMS for every popular language, but more on that later.
Today there are a huge number of different programming languages in which websites are made. And what’s more, there are examples of huge sites in all popular languages. If 10 years ago, when talking about the technologies of large sites, everyone was talking mainly about Java, today it can be almost any language, and it is a stereotype to say that sites are made in a particular language. This is due to the development of the languages themselves, over the past decade, many have made great progress in development and have received ample opportunities. Of course, each language is somewhat different, and when choosing, we must again be guided by objective criteria with an eye to the tasks of the project.
In a pure language, without the use of frameworks and boxed solutions, huge projects are written with increased requirements for flexibility, load and security. For such huge projects, budget is often not as important as efficiency. The larger the project, the greater the requirements for flexibility and workload, which means that it is easier to write everything from scratch, allocating the best specialists for this, than if you take some ready-made solutions that were not written by anyone and it is not clear what problems are hidden in them. For example, when it comes to a small project with a traffic of 10 thousand people a day, it will be cheaper for us to make it on a CMS that will consume 3 times more server resources, install an additional server for $50 / month, and it will work. When we talk about a site with a traffic of 100 million users per day, the cost of adding servers will be simply cosmic, so it’s easier and cheaper for us to invest in developing a solution in a pure language that will be optimal for a particular project.
The larger the project, the larger the technology stack that it uses. In huge portals, several programming languages can be used at once. Again, we come to objective criteria for choosing technologies. Often one language can solve one problem well, and another can solve another. Such projects can be so huge that parts of them can run on different servers, with different domains (subdomains) and different technologies. You should not be afraid of technology vinaigrette in a large project, although you should only allow it when it is really necessary, and also remember that not all technologies are compatible. The most striking example of the use of different technologies is Google. It’s big enough that different parts of it are written in C/C++, Java, Python, JS, and other languages. Moreover, Google is actively creating new technologies, such as the now popular AngularJS.