Over the years, I often hear questions about the choice of technologies for a particular web project. Someone asks us, as developers, how correctly, and someone comes and asks to do on some particular technology. The problem is that most people choose technologies for subjective reasons, and so far I haven’t heard decent and understandable reasons, which would allow choosing technology objectively, based on facts, and not desires. Even a few IT professionals can choose the right technology, because for this you need: understand the specifics of the project, have many years of experience developing in several languages, know how such projects are arranged, etc.
But before choosing something, let’s see what technologies are, how they differ and in what cases which technology to choose. How people choose technology now:
- I like her
- One man advised
- Read on the Internet
- A similar site is made on this technology.
What is the problem here?
Very subjective. And what if according to the requirements it does not fit? Or do they need very expensive and rare specialists? Or does it even die?
A man told.
Usually, this is a friend who is “slightly better” versed in IT than the one he advises. And even if he is a programmer with experience, he cannot know all the solutions in all popular languages. Nobody asks, by what criteria did this friend choose. If this friend is not a Google CTO, I wouldn’t just trust such a recommendation.
There is already better: you can find different comparisons and arguments. But again, it takes time to figure out all the solutions for a person, even with a strong knowledge of development. And without knowledge in the development of all the read technical reviews are worth nothing.
Most of the popular sites are written on certain technologies, because this is “historically formed”. If Facebook now chose technology for itself, I doubt it would have taken PHP as the basis. And it may also be that the technology is already outdated, it was pushed through on the basis of the past 3 points, we chose some advertised technology, and not really effective, etc. You can hardly know the real reasons for the choice of technologies in other projects. Optimal technologies are used extremely rarely in similar projects.
Thus, none of the above methods for selecting development technologies meets the criteria of objectivity. Therefore, it is necessary to first determine these criteria, and only then select a technical platform for them. Below I will try to highlight the really important criteria for the project, on which we will be based.
Important criteria when choosing technologies:
-Size and type of project
-Complexity of the project
-Cost of specialists
-Availability of specialists
-Available development tools
-Availability of ready-made solutions
-Having a broad community
-Fault tolerance of the solution
-The trend of its development
-Availability of detailed documentation
-Integration with other solutions
What the projects can be?
We will return to technology, but for now let's see what projects are. Often, the type of project speaks for itself, and you can immediately say that it fits: either a ready-made solution, or at least which way to go.
The complexity of the projects are divided:
Simple (business cards, landing pages, simple online stores, simple applications) - such solutions are usually made on themed boxed solutions, CMS or templates.
Medium (complex online stores and marketplaces, portals on a national scale, various services, advanced applications) - such solutions are usually made on the framework.
Sophisticated (huge portals, social networks, innovative and atypical solutions) - the core of such projects is usually developed in a pure (native) programming language.
By topic: online shopping, message boards, social networks, etc. For most popular thematic solutions, there are box products for a long time, and if we are not trying to make a 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:
Pure language is the material from which you can do anything. Limit us only the possibilities of language. All the largest websites of the world with attendance of 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 the existing ones do not suit them.
The 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, it imposes certain limitations. Freymvorks make projects of average complexity with attendance of millions.
CMS is a ready-made solution, a designer, in which we assemble the necessary project in parts. It is rather not programmed, but customized. There is a huge amount of restrictions, it is difficult and inefficient to go beyond the box. CMS makes simple sites with up to a million users per month.
Most often, one level of abstraction is based on another. That is, in pure language they make frames, and on frames they make CMS. For each popular language there are many different frameworks and CMS, but more on that later.
Today there are a huge number of different programming languages in which they make websites. And, moreover, in all popular languages there are examples of huge sites. If 10 years ago, when speaking about the technologies of large sites, everyone was talking mostly about Java, then today it can be almost any language, and claiming that sites are made in a particular language is a stereotype. This is due to the development of the languages themselves. Over the past decade, many have made great progress in development and received ample opportunities. Of course, each language is somehow different, and when choosing we must again be guided by objective criteria with an eye to the project’s objectives.
In pure language, without the use of frameworks and boxed solutions, huge projects are written with increased requirements for flexibility, loads and security. For such huge projects, often the budget does not play such a value as efficiency. The larger the project, the greater the demands on flexibility and load, which means that it is easier to write everything from scratch, highlighting the best specialists for it than if you take any ready-made solutions that were not clearly written by anyone and incomprehensible what problems are hidden in them.
For example, when talking about a small project with a attendance of 10 thousand people a day, then it will be cheaper for us to make it on a CMS that will consume 3 times more server resources, put up an additional server for $ 50 / month, and it will work. When we talk about a website with a traffic of 100 million users per day, the cost of adding servers will be just space for us, so it is easier and cheaper for us to invest money in developing a solution in a pure language that will be optimal for a specific project.
The larger the project, the greater the stack of technologies that it uses. In huge portals several programming languages can be used at once. Again, we come to objective criteria for the selection of technologies. Often, one language can solve one problem well, and another - another. Such projects can be so huge that their parts can work on different servers, with different domains (subdomains) and different technologies. You should not be afraid of the vinaigrette of technologies in a large project, although it should be allowed only when it is really necessary, and also remember that not all technologies are compatible. The most striking example of using different technologies is Google. It is so big that its different parts are written in C / C ++, Java, Python, JS and other languages. Moreover, Google is actively creating new technologies, such as the now popular AngularJS.
Examples of large sites:
PHP: Facebook, Vkontakte, KinoPoisk
Python: Instagram, Pinterest, Reddit
Ruby: 500px, Groupon, Airbnb
Java: Ebay, Amazon, Alibaba
C #: Guru, Stack Overflow, Bank of America
JS: LinkedIn, Walmart, PayPal
So what to choose?
Summarize. For simple sites, box solutions and templates are often best suited. Complex sites are made only on frames or even pure programming languages. You can do it in very different languages, the language is chosen for the project. Simple mobile applications can be made on cross-platform technologies, and complex ones are usually made on native technologies. Well, when choosing a platform, you should always follow the objective criteria that I described in the article.
In my next articles I’ll tell you more detailed about all the aspects that I’ve told before. But if you need a help of professional software company, who has an expertise in choosing the correct stack of technology, contact unl.solutions for free consultation.