How deeply do front-end and back-end programmers need to know the adjacent stack – experts answer
As a rule, backend users do not perceive the front end as a hard direction: the threshold for entering the front end is lower than the back end; you do not need to know the algorithms, Design Patterns, architectural patterns, and be able to model the database. Talk to any backend, he will say that the front is jQuery. But this was true recently, and today the situation has changed. jQuery faded into the background. Now the time has come for JS frameworks, the struggle for the speed of loading sites, the struggle to reduce the size of scripts, optimize the initial loading, lazy load and other words that the backend does not understand.
So what does a backend developer need to know from the new frontend to get an excellent software product in the end? The main tool of the web is a browser. Everything that the backend does will eventually be visible in the browser, so it is important to know how modern browsers work. And it’s not about studying the source code of the browser – for further optimization on the front end, at least you need to know the browser API, the API for working with the document, the DOM model, where does the site start loading, how does it end when all assets and scripts load . But that is not all. Basically, you need to know the APIs that receive data from the server, AJAX requests, the client data storage APIs, cookies, local and session storage, HTML, CSS and the basics of JS.
The key to a successful project is a thin client. Everything that can be done on the server needs to be done on the server, because if necessary, you can increase the power of the server, and it is impossible to increase the power of the client. For example, writing your parsers on the client is bad. The server must prepare the data for rendering.
As for the front-end developers: there is no need to do this to release a quality product with knowledge of HTML, CSS, JS. The modern front-end vendor is a little DevOps-engineer, a little back-end, a little architect, a little designer. Now is the time for technology to mix with a broader approach. At least any front-end vendor will sooner or later run face-to-face with Node.js, which is often called the backend for front-end vendors. Therefore, you will have to deal with server architectures a bit, at least at the level of ability to distinguish microservice architecture from monolith.
It’s very important for the front-runner to understand how the server works, even if it’s superficial to know what Nginx and Apache are, how statics are issued, what types of requests happen, what the server gives, what statuses, protocol types, HTTP, HTTPS and others.
It is equally important to work in several template engines and understand why they are needed. Over time, the ability to work in Unix systems, knowledge of the basic commands of the Bash script will come in handy. Knowledge of the DBMS, not only NoSQL, is also useful. You also need to understand how database queries are built, how heavy they can be – this will allow you to better understand the importance of data caching.
Almost every front-runner will sooner or later run into a docker, so it’s better to get to know him in advance too.
Knowledge of algorithms and Design Patterns, the ability to assess the complexity of algorithms are relevant in the front-end, as well as knowledge of OOP, which can not be avoided. There are areas that any developer will encounter, but there are additional skills that depend on a specific project. And here you need to look at the situation and the tasks assigned to the developer.
If you need a scalable, supported project, you need to respect both sides, understand what kind of pain and complexity your colleague may face. It is always important to search for optimal solutions in a specific situation, in a specific project, so it is advisable to be a little full stack. As Kozma Prutkov said: "A limited specialist is like a flux, its fullness is one-sided." For all areas, it is necessary to know the generally accepted practices for creating a quality product, the principles of SOLID, KISS and DRY.