Front-end и Back-end — это две основные ветви разработки полного стека, в которых вы занимаетесь разработкой веб-приложений. Недавно я наткнулся на сообщение LinkedIn от одного из моих знакомых, которое, как мне показалось, было немного неуважительным по отношению к разработке интерфейса. В этом посте я решил высказать свое мнение о сложности этих двух разделов, относящихся к веб-разработке.
При работе с серверными технологиями инженеры имеют дело с механизмами обработки данных и выполнения над ними различных действий на серверах, которые остаются скрытыми от посетителей сайта. У нас есть несколько доступных языков программирования и фреймворков, которые используются для серверной разработки. Наиболее популярными из этих инструментов являются Java, C#, PHP и Python. Такие концепции, как кэширование данных, многопроцессорная обработка и оптимизированный поиск, связаны с бэкэнд-разработкой. Back-end разработка тесно связана с облачной инфраструктурой и управлением базами данных, хотя во многих инженерных отделах этим занимается отдельная команда. Некоторые из сложных аспектов бэкэнд-разработки:
- Внедрение механизма кэширования большого объема данных с помощью таких инструментов, как Redis.
- Проектирование монолитной или микросервисной архитектуры в зависимости от требований приложения.
- Реализация сложных алгоритмов поиска
- Механизм безопасности для баз данных и выполнения оптимизированных запросов.
Внешний интерфейс имеет дело с элементами, которые мы видим на веб-сайте, такими как кнопка «Нравится», которую вы видите в Instagram, изображения, кнопки, формы и многое другое. Для разметки мы используем простой HTML и CSS. Кроме того, чтобы оживить веб-страницы, мы используем Javascript. Звучит просто, правда? Ну не так быстро. Фронтенд претерпел значительные изменения за последнее десятилетие. Несмотря на то, что задействован только Javascript, в нем доступно довольно много фреймворков и библиотек, что, безусловно, создает некоторые проблемы для разработчиков при выборе. Существует несколько фреймворков Javascript, потому что они делают что-то лучше, чем другие. Кроме того, существует множество доступных CSS-фреймворков, которые можно использовать в сочетании с выбранной вами библиотекой Javascript, например React. Доступность этих многочисленных вариантов затрудняет выбор.
В старые добрые времена мы связывали внешний javascript с динамическими веб-страницами, созданными с использованием подходящего внутреннего языка, такого как PHP. Позже Jquery, потому что очень популярен. Настолько, что в какой-то момент у него было больше вопросов по Stackoverflow, чем по Javascript. Но в последние годы мы перешли к разработке одностраничных приложений (SPA). Популярные интерфейсные фреймворки, такие как React, Vue, Angular или Svelte, могут использоваться для разработки внешнего интерфейса в виде SPA. Эти приложения содержат повторно используемые компоненты. Часто нам также требуется централизованное хранилище данных для этих приложений, для которых мы используем такие библиотеки, как Redux. Мы можем предоставлять интерфейсный код, упакованный в виде статической папки, с помощью популярного сборщика ресурсов, такого как Web-pack. Эта сгенерированная статическая папка обслуживается сервером с использованием внутренней структуры. Существуют также такие фреймворки, как Next JS (для React) и Nuxt JS (для Vue), для создания SPA с улучшенной SEO (поисковой оптимизацией) и поддержкой маршрутизации. Проблемы, с которыми часто сталкиваются разработчики интерфейса:
- Проектирование компонентной архитектуры для интерфейсного приложения в React/Vue/Angular. Это включает определение повторно используемых компонентов, выбор набора пользовательского интерфейса, интерфейсную маршрутизацию, размещение внешних стилей, использование препроцессоров CSS. и более.
- Решите, какие пакеты использовать для реализации таких функций, как проверка формы, перетаскивание, интеграция API и многое другое.
- Сделайте сайт адаптивным на нескольких устройствах с разными размерами.
- Интеграция SEO для одностраничных приложений.
Для приложений малого и среднего размера я часто нахожу интерфейсную реализацию более сложной и трудоемкой. Но по мере того, как размер приложения растет и вам нужны сложные алгоритмы для обработки кэширования, параллельной обработки и связанных с ними вещей, сложность серверной части увеличивается. Например, написание простого CRUD-модуля очень просто для серверной части и более сложно для клиентской части. Для серверной части требуется больше знаний в целом по структуре данных и алгоритмам.
Мой окончательный вердикт заключается в том, что это зависит от различных факторов, таких как размер приложения, требования к функциям и т. д., но в целом можно утверждать, что серверная часть более сложна. Что касается шкалы заработной платы, то бэкенд-инженерам за аналогичный профиль в среднем платят немного больше, чем их фронтенд-коллегам, по крайней мере, в моей стране, и я ничего против этого не имею.
Пост, на который я наткнулся, похоже, продвигал повествование о том, что Back-end проектирование значительно более искусно по сравнению с front-end разработкой, с чем я категорически не согласен. Возможно, так было и раньше, скажем, десять лет назад. Но в наши дни, как я уже говорил выше, фронтенд-инжиниринг также требует очень больших навыков. Кроме того, есть полноценные инженеры, такие как я, которые занимаются и тем, и другим. На этом пока все, если у вас есть чем поделиться по этой теме, пожалуйста, заполните поле для комментариев.