The choice of technologies for web project – continuation 2

Templates

In the last 5 years, template solutions have been very actively developed. This is one step higher than CMS. If CMS is a constructor, and it needs to be customized, then templates are ready-made solutions for typical cases. For example, each city has its own restaurants, taxis, clinics, etc. All of these types of small businesses need roughly the same thing. Therefore, you can simply choose a ready-made thematic template, replace the logo, colors and content in it. If desired, such templates can be modified 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 specifics of the business and the conversion will not be very high.

There are special template catalogs: TemplateMonster, ThemeForest, etc. Online designers are often found, including thematic ones: Wix, PageCloud, etc.

Mobile applications

In mobile applications, two approaches have recently been used: native development and cross-platform technologies. Native is conducted in the original programming languages, in particular Swift (for iOS, it used to be Objective-C) and Java (for Android). There are quite a lot of 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 in native technologies. Problems often arise with cross-platform, to the point that some functions are simply unrealizable on certain cross-platform technologies, the device’s RAM is heavily loaded, the battery runs out quickly, etc.

In these two approaches, people also often get 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 it comes out at least twice as expensive. However, few people know about possible further problems in development. I would recommend choosing technologies very carefully, and taking a cross-platform only for simple applications, otherwise you will have to rewrite. However, cross-platform technologies are gradually developing and getting better, and applications written on them are becoming more and more complex.

Technology stack in large projects

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

The choice of technologies depends on the proposed project architecture. It is the architect who thinks over the main blocks of the future site. What language will form the basis, whether it will be native or a framework, what caching system to choose, what databases, how it will all be connected, etc.

For example, consider Instagram technologies (data from Insight IT):

  • Ubuntu Server 14.04 LTS – the main server operating system
  • Python is the main programming language for the server side.
  • Django – framework
  • nginx – the second level of balancing incoming HTTP requests
  • gunicorn – WSGI server
  • HAProxy – internal load balancing
  • PostgreSQL – the main data store
  • postgis – support for geo-requests
  • pgfouine – log based reporting
  • pgbouncer – connection pooling
  • Redis – additional data storage
  • memcached – caching
  • Gearman – Task Queue
  • Solr – geo-search
  • munin, statsd, pingdom – monitoring
  • Fabric – cluster management
  • xfs – file system

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

The cost of specialists

One of the most important factors in choosing a technology is the cost and availability of specialists, because this is the most expensive part in any project. In RuNet there is only one salary gauge: https://jobs.dou.ua/salaries/ – I filtered for Kyiv, Senior level, 3-5 years of experience. Let’s compare the average values.

Salaries:

  • C# – $3072
  • Java – $3300
  • JS – $3500
  • PHP – $2780
  • Python – $3000
  • Ruby – $3000
  • Scala – $3900

Now let’s translate the numbers into human language. Java, although not a new language, has always been one of the most expensive specialists in it. PHP has always been the cheapest, and there are a lot of specialists on the market. I also added Scala to the comparison, as one of the newest and trending languages, for this reason it is the most expensive of all. Another expensive JS, this is due to its explosive growth in recent years and the growing popularity of Node.js, as well as AngularJS.

Thus: if we want to save money, then 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, however, it is almost impossible to find specialists on it, and there are simply no developments.

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