📜 ⬆️ ⬇️

The choice of technology for a large and not very large web project

Over the years, I often hear questions about the choice of technologies for a particular web project. Someone asks us, as developers, how to, and someone comes and asks to do on a particular technology. The problem is that most people choose technologies for subjective reasons, and so far I have not heard decent and understandable reasoning, which would allow choosing the technology objectively, based on facts, 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 structured, etc.

But before choosing something, let's see what technologies are, how they differ and in what cases what technology to choose.


How often choose technology now:

  1. I like her
  2. Familiar advised
  3. Read on the Internet
  4. A similar site is made on this technology.

')
What is the problem here:

  1. Like. Very subjective. And what if according to the requirements it does not fit? Or do they employ very expensive and rare specialists? Or does she even die?
  2. Familiar. 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 acquaintance is not Google CTO, I wouldn’t just trust such a recommendation.
  3. Read it. 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.
  4. Analog. Most of the popular sites are written on various technologies, because this is "historically." If Facebook chose technology for itself now, 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 the 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:

  1. Size and type of project
  2. Complexity of the project
  3. Development speed
  4. Cost of specialists
  5. Availability of specialists
  6. Available development tools
  7. Availability of ready-made solutions
  8. Solution flexibility
  9. Having a broad community
  10. Fault tolerance of the solution
  11. The trend of its development
  12. Availability of detailed documentation
  13. Support cost
  14. Load requirements
  15. Security requirements
  16. Cross platform
  17. Integration with other solutions

Choosing technology according to such criteria, we will be able to achieve an objective choice and thereby save ourselves time and money.

What are the projects

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 in which direction you need to move.

According to the complexity of the projects are divided:

  1. Simple (business cards, landing pages, simple online stores, simple applications) - such solutions are usually made on themed boxed solutions, CMS or templates.
  2. Medium (complex online stores and marketplaces, portals on a national scale, various services, advanced applications) - such solutions are usually made on the framework.
  3. Complex (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 stores, message boards, social networks, etc. For most popular thematic solutions, there are box products for a long time, and if we don’t try to make a monster, then it’s better to choose them. There are a lot of solutions, it is impossible to describe everything in one article.

Programming languages

In technologies, I would single out 3 levels of abstraction:

  1. 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.
  2. 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.
  3. 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 are a lot of restrictions here, it is difficult and inefficient to go beyond the box. CMS makes simple websites with up to one 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 spoke mainly about Java, then today it can be almost any language, and to assert that websites 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, the budget often does not play such a value as efficiency. The larger the project, the greater will be the requirements for flexibility and workloads, which means that it is easier to write everything from scratch, singling out the best specialists for it, than if you take any ready-made solutions that were not clearly written and incomprehensible what problems are hidden in them. For example, when talking about a small project with 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, install an additional server for $ 50 / month, and it will work. When we talk about a site with a attendance 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 particular 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 technology 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.

I will try to give a brief description of each of the popular languages:

  1. PHP - it is used mainly for simple and medium projects. A lot of boxed solutions. Relatively cheap programmers. The antitrend of recent years, although with the release of the latest version of the language at number 7, it got really powerful features.
  2. Python is a modern language, the development on it is fast and of high quality. Use it for medium and large projects. Programmers find problematic, and they are not cheap.
  3. Ruby is a modern language, development is also fast. It is mainly used to develop simple and medium-sized projects, often start-ups are developed. Programmers are also few, and they are expensive.
  4. Java - development on it is very long and expensive. It is used mainly for large projects with specific requirements.
  5. C # is an analogue of Java, also used for large projects, some in the FinTech realm.
  6. JS - is developing rapidly, the trend of recent years. A huge number of developments, and you can write anything, even games. It is used for medium and large projects, but this language has recently received powerful capabilities, because there are few examples of large projects, the specialists are the most expensive, and the most difficult to find them.

I have described the most popular languages ​​that are used today under the web. There are many new languages ​​that are growing rapidly, in particular Scala and some others. But while they are quite young and raw. I would not recommend running after fashion and writing on them until they evolve into something more.

Examples of large sites:


These examples perfectly show that large sites can be in different languages, and this is normal. Again, we come to the fact that you need to choose the technology under the requirements, guided by objective reasons.

Frameworks and platforms

This is a kind of development environment for programmers, where there is a ready-made infrastructure and a number of ready-made functions with standard solutions of typical tasks. Such a semifinished product from which to make candy. Every language has many different frameworks. There are both common ones that were created for the development of any solutions, and specialized ones for narrow tasks. For example, Sylius is a specialized E-commerce framework based on symfony. There are also those on which large and complex decisions are made, while others are not intended for this. Below I will describe the popular frameworks for each of the languages ​​in which you can write large and complex solutions.

Frameworks develop quite large and complex sites with unique functionality. It is much faster and cheaper than in pure language, but at the same time this solution allows you to develop really complex things and optimize all this under load. In addition, it is almost always safer than any boxed CMS.

Popular frameworks and platforms:

  1. PHP: Symfony, Laravel
  2. Python: Django
  3. Ruby: Ruby On Rails
  4. Java: Spring
  5. C #: .NET
  6. JS: Node.js, AngularJS

Most of the PHP frameworks are in this language, there are plenty to choose from, but there are not so many functional ones. Less in other languages, and in some truly high-quality frameworks there is generally only one, like the Ruby language. Java has a lot of different frameworks for different purposes, and not only for sites. All these frameworks are developed annually, more and more new versions come out, some frameworks overtake others. For example, Laravel only in the last few years came in first place in popularity, although the most complex sites are still made on Symfony.

.NET and Node.js are whole stand-alone platforms that are based on certain languages, but have very broad capabilities.

We recently conducted research on those frameworks that we specialize in. We looked at what big projects they are using. In particular, huge sites in Python / Django and huge sites in PHP / Symfony . We also wrote how we developed a social network on symfony along with the API (the article is more about the API, the most extensive description in runet on this topic). The same huge sites are on each of the listed frameworks.

CMS and CMF

This is a ready-made software that you only need to configure, at least - to add / rewrite some of the parts. There are a lot of such solutions in any language, but historically it turned out that basically all popular CMS are made in PHP. Here it is a matter of language development, earlier simple websites for which CMS were created were written in PHP. I still found those times when there was almost no CMS, there were scripts - some ready-made parts of different sites. Later, these scripts were collected in a boxed product, which was designed to solve the needs of 90% of simple sites. So it turned out that the main CMS are made in PHP. Today, CMS in other languages ​​is developing poorly, because there are already strong competitors in PHP, and for a simple site, the language does not play a big role, so everyone is looking at the capabilities of these finished products.

CMF, in simple terms, is something between a CMS and a framework of possibilities. CMF is usually used for the most complex sites in this category. This approach allows you to get rid of unnecessary parts of the CMS, which are not needed by a specific project.

CMS are different in purpose: common, for online stores, for blogs, etc. Different conditions of use: paid and free. For every popular CMS there are many different paid and free modules that are easy to connect and use.

Small sites that are mostly needed for small businesses almost always use CMS. This saves a lot of development time. In addition, to configure such solutions do not need expensive programmers, it can usually be done by novices in programming, at least the setting itself, if you already need to write code, it is more difficult here.

It is in the work with CMS that the most misunderstanding arises among the end customers of such solutions. Any CMS is tons of ready program code, for all cases of life. In the boxed delivery are dozens and hundreds of modules. All this greatly limits the specialists. Such solutions strongly “slow down”, they are absolutely not flexible, they are very easy to crack, especially free CMS. More often, CMS is cracked through third-party modules that have critical vulnerabilities, because we never know what level a programmer wrote this or that module. That is, any CMS is NOT designed for a large and complex site. She can not withstand heavy loads. This solution is not safe, not to say the developers of a specific CMS.

I have seen solutions for almost all popular CMS, with many over more than 10 years of work, I had to work personally. Some of them are popular in runet, and some are known mainly in the west. It makes no sense to break into the CMS languages ​​used in them, for the reasons described above. It is better to say a few words about every popular CMS:

  1. WordPress - once a blog engine, now it makes almost any sites, including shops. One of the most popular CMS in the world, there are examples of fairly visited sites. It often make information sites, including various media. The system is free.
  2. Joomla! - General Purpose CMS. The quality is not much different, very small sites are made on it, and usually cheaper than all other options, since it is with this CMS that many novice programmers begin to learn. The system is free.
  3. Drupal is already a general-purpose CMF, recently comes with a built-in symfony framework. Pretty powerful, there are well-known sites on it, for example, the official website of the White House. The system is free.
  4. Magento is the most popular management system for online stores in the world. Pretty powerful and complicated. In runet rarely used, mainly in the west.
  5. PrestaShop is one of the most popular CMS for stores in the world. Also quite powerful, used mainly in the west. The system is free.
  6. OpenCart is another popular system for online stores, but, on the contrary, it is more used in runet than in the west. Mainly for small and uncomplicated stores. The system is free.
  7. 1C-Bitrix is ​​a very common general CMS, number 1 in runet. The possibilities are very broad. It often tries to make large and complex sites, and after a certain threshold in attendance they rewrite them on other technologies. Many believe that only this CMS can integrate with 1C, which is not true, since all the listed CMS from this list can be integrated with 1C, for this all CMS have special modules. The system is paid.

I worked with all the listed CMS. Basically by the developer. Just do not recommend - Joomla, with the rest you can work. For stores, it is better to choose specialized, rather than common CMS. In addition to 1C-Bitrix in RuNet there are similar commercial CMS, they are very similar. Each system has its own characteristics, but all of them are not designed for large and complex projects, the main thing is not to forget.

Earlier, we conducted research on which CMS made the most visited websites of the RuNet: part 1 and part 2 , the largest online stores and the largest sites of banks . These studies confirm the findings in the article.

Templates

In the last 5 years, template solutions have been very actively developing. This is one more step higher than the CMS. If the CMS is a constructor, and it needs to be customized, then the templates are ready-made solutions for typical cases. For example, each city has its own restaurants, taxis, clinics, etc. For all these types of small businesses you need about the same thing. Therefore, you can simply select a ready-made thematic template, replace the logo, colors and content in it. If desired, these templates can be customized at the discretion of the owner.

The advantages of such solutions are that they are very cheap and can be launched instantly. But at the same time such solutions do not take into account the peculiarities of the business and the conversion will not be very high.

There are special catalogs of templates: TemplateMonster , ThemeForest , etc. Often there are online designers, including thematic ones: Wix , PageCloud , etc.

Mobile applications

In mobile applications, two approaches have recently been used: native development and cross-platform technologies. The native language is maintained in the original programming languages, in particular Swift (for iOS, previously Objective-C) and Java (for Android). There are quite a few cross-platform technologies now, they are based on different programming languages, in particular: Apache Cordova, React Native, etc. Some are better, some are worse. In any case, complex applications are always written on native technologies. There are often problems with crossplatform, to the extent that some functions are simply unrealizable on various cross-platform technologies, the memory of the device is heavily loaded, the battery quickly sits down, etc.

In these two approaches, people are also often confused, trying to use cross-platform technologies for all occasions. This is understandable, because the cross platform allows you to write code once, which immediately works on both iOS and Android, while on native technologies this is at least twice as expensive. However, few people know about possible further problems in the development. I would recommend very carefully choosing technologies, and taking the cross platform only for simple applications, otherwise you will have to rewrite. However, cross-platform technologies are gradually evolving and becoming better, and the applications written on them are more complicated.

Technology stack in large projects

Above, I described different languages ​​and frameworks that are used in large projects, however, if you look at truly large projects, you can find a whole range of languages ​​and technologies. Almost all large sites use one primary language and several additional ones. The same with databases: for some tasks, relational ones can be used, and for others, non-relational databases. And all this is organically combined in a single project.

The choice of technology depends on the proposed project architecture. It is the architect who thinks out the main blocks of the future site. What language will lay down to the basis, whether it will be native or a framework, which caching system to choose, which databases, how it will be connected, etc.

For example, consider the Instagram technology (Insight IT data):


And this is quite a normal technology stack. Instagram itself is not the largest and most complex service in the world.

Cost of specialists

One of the most important factors in the choice of technology is the cost and availability of specialists, because it is this - the most expensive part in any project. There is only one salary in Runet: https://jobs.dou.ua/salaries/ - I have filtered through Kiev, Senior level, experience 3-5 years. Compare the mean values.

Salaries:

  1. C # - $ 3072
  2. Java - $ 3300
  3. JS - $ 3500
  4. PHP - $ 2780
  5. Python - $ 3000
  6. Ruby - $ 3000
  7. Scala - $ 3900

In the US, a slightly different picture:



Now translate the numbers into human language. Java, though not a new language, but the experts on it have always been among their most expensive. PHP has always been the cheapest, and there are a lot of specialists on the market. I added Scala to the comparison as one of the newest and most trendy languages, for this reason it is the most expensive. Another dear JS, this is due to its rapid growth in recent years and the growing popularity of Node.js, as well as AngularJS.

Thus: if we want to save, it is better to look at PHP - specialists are cheap, and the community is large. And if we want the highest quality, then we look at Scala, which is called the future of web development, but, truth, it is almost impossible to find specialists in it, and there is simply no groundwork.

Another important parameter is the speed of development. After all, not only the salary of programmers is important, but also the speed of development. If you do not take into account the existing developments, then one of the fastest in the development will be Python and Ruby, and the slowest - Java. By the way, for this reason, over the past 10 years, almost no new mega-projects have come out for Java, but there have been many projects in Python, which I will discuss below.

Trends

When choosing technology, we need to look ahead. Especially when talking about a big project. All technologies are developing very quickly, more and more new versions are coming out. Languages ​​change greatly every 5-7 years, frameworks - every 2-3 years, and CMS - every 1-2 years. It is important to choose not just a good technology today, but to predict the development trends in such a way as to stay on a horse in a few years. Otherwise, ultimately, you will have to rewrite the project, which is always very problematic.

There are all kinds of studies that can give us some statistical calculations. For example, the TIOBE Index study shows interesting statistics:



According to the results of various studies, it is possible to identify clear leaders in terms of growth - these are JS (version ES6 and above) and multi-paradigm languages, in particular Scala. By the way, Scala is considered the successor of the Java language and is in many ways similar to it. Python does not perform well either.

Antitrands hold a number of old languages ​​and PHP. True, the 7th version of PHP was recently released, which fixed many serious flaws. So, I think we will see a new round of PHP development soon. Many large projects also correspond with Ruby to other languages, also a kind of anti-brand.

To illustrate, let's see what specialists are missing in the United States:



That is what can be considered a real picture of the trends that we see in ours.

What were the big projects for the last 10 years?

  1. Airbnb - Ruby
  2. Instagram - Python
  3. Pinterest - Python
  4. Foursquare - Python
  5. Groupon - Ruby -> JS
  6. Twitter - Ruby -> Scala
  7. Uber - JS

This is not a theoretical statistic, but a real practice. Python and JS show themselves very well.

Support cost

Of course, an important criterion for choosing a technology is the cost of support, which few people think about at the beginning of development. Usually, everyone thinks in terms of the cost of an hour of support, which is fundamentally wrong. Several parameters are important to us: the cost of an hour, the number of hours, official technology support, availability of specialists, the right approach to development, and some others.

The cost of an hour depends on the salary of specialists, we have already dealt with this. But the number of hours depends on the technology itself and the quality of writing code. If the solution is boxed, then hours can go to it very much. That is, on the one hand, we can save in the development of the first version of the project, but after getting bogged down in its constant refinement. Well, when the decision is popular, and there is official documentation. But often they choose little-known boxed solutions without any documentation - in such solutions the cost of support will be many times higher than the cost of the box itself. The same applies to poor-quality development: for some reason, we completely lack the culture of conducting technical audits of ready-made solutions or their parts. On average, in 20-40 hours you can check almost any solution and find its main disadvantages. The better the code, the easier and, therefore, cheaper to maintain it.

You should also look at the language version, the framework, the CMS. You must always use the latest stable version so that it does not become obsolete before the project is released into production. When a new version appears, you should immediately consider the possibility of transferring the project to this version. Because, if you skip several versions, then it will be problematic to make a sharp update.

So what to choose?

Summarize. For simple sites, box solutions and templates are most often excellent. 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. , . , , , .

. 100 . . , , , , . :)

Ps . . To enroll write to info@digitov.com

PPS To receive our new articles before others or simply not to miss new publications - subscribe to us on Facebook , VK and Twitter .

Author:
Nikita Semenov, CEO, SECL Group Company

Source: https://habr.com/ru/post/315734/


All Articles