Без каких знаний не обойтись бэкендеру в 2024 году

Аватарка пользователя Рафаил Агазода

Узнали у middle и senior бэкендеров, что нужно изучать в 2024 году, чтобы оставаться востребованным специалистом.

Обложка поста Без каких знаний не обойтись бэкендеру в 2024 году

Изучать бэкенд с нуля и даже актуализировать уже имеющиеся знания и навыки — задачка не из простых. Мало того, что основное время уходит на работу и дом, нужно постоянно следить за трендами разработки, чтобы оставаться востребованным специалистом.

Выбрать стек для обучения тоже непросто: языков, технологий, библиотек и фреймворков столько, что глаза разбегаются.

Мы попросили middle и senior бэкендеров ответить на вопросы:

  1. Что должен был уметь бэкендер в 2023 году?
  2. Какие тренды во бэкенде в 2024 году? Что нужно изучить, чтобы прокачаться?
  3. Специалистов какого стека не хватает на рынке?

Вот, что они ответили.

Вы изучаете новые технологии, если они становятся востребованными на рынке?
Да, учу новые языки, работаю с новыми библиотеками и фреймворками, даже если моя основная работа этого не требует
Изредка: обучаюсь новому только в том случае, если чувствую, что знания гипотетически могут пригодиться мне в работе
Нет, давно не учил ничего нового, да и учусь только в том случае, если этого требует работодатель
***

Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.

Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.

***

Что должен был уметь бэкендер в 2023 году?

Идеальный стек в 2023 году для бэкэнд программиста следующий:

  • Строго типизированный язык Go или Java;
  • Умение работать с каким-либо из веб-серверов для выбранного языка, например, Echo/Gin для Go или Tomcat/Jetty для Java;
  • Базы данных – SQL (Postgres) и/или нереляционная база данных – MongoDB/DynamoDb/…
  • Кэши, например, Redis;
  • Очереди, Kafka, SQS;
  • Облачные провайдеры – Amazon, Azure, Google Cloud;
  • Также будет полезно, если есть опыт работы с слабо-типизированными языками, так как часто приходится работать с ситуациями, когда быстрое решение было написано на NodeJS или Python, а новые сервисы пишутся уже на Go или Java;
  • Метрики, знание как работают и умение работать со стандартными пакетами вроде prometheus;
  • Принципы и виды тестирования – юнит, компонентные, и интеграционные тесты.

Еще одним немаловажным аспектом является знание верхнеуровневой архитектуры для того, чтобы быстро разбираться, как взаимодействуют сервисы, какой поток данных и гарантий доставки, сценариев отказа системы в целом. Здесь полезно понимать, что такое CAP теорема и о чем она, знать про optimistic и pessimistic locking, за счет чего будет масштабироваться сервис. Чем более опытен разработчик, тем вероятнее прохождение еще и интервью на дизайн систем.

Сохраняется спрос на Go разработчиков. Постепенно снижается спрос на разработку микросервисов – всё больше компаний тяготеют к монолитизации для уменьшения издержек на поддержку и инфраструктуру. Базы данных всё так же остаются актуальны. Из протоколов общения между сервисами становится всё более популярным GRPC.

Ответ оказался полезен?
Да
Нет

Вот и прошел 2023 год, ставший для кого-то первым годом, проведенным в роли “IT-шника”, а кто-то в этом году повысил свой грейд (уровень) и перешел на новые позиции а может и в новые компании. Естественно, все вышеперечисленное невозможно без упорного труда и постоянного совершенствования своих навыков.

Те кто только начал свою карьеру разработчика уже проделали большую работу, за что им мое почтение, и мне не понаслышке известно, что старт требует много усилий, времени и терпения. Но все мы рано или поздно сталкиваемся с неким плато, когда твои первые задачи перестают казаться тебе чем-то нереально сложным а к задачам старших коллег ты не знаешь как подступиться и многие новички (уровни intern/junior) сегодня задаются вопросом “Как мне продвинуться дальше по грейду? Что мне изучать чтобы открыть для себя этот новый горизонт?”

Когда мы затрагиваем переход из грейда middle в senior то тут все проще, речь идет о примерно таких же технических знаниях только с большей ответственностью, ведь senior это тоже middle, только с большим опытом реализации бизнес задач и он способен брать на себя ответственность за принятие глобальных, архитектурных решений, правильную постановку задач, декомпозицию системы и тд. Но в случае с intern/junior, речь как раз таки о совершенствовании навыков применения технологий.

Давайте заглянем в стэк. Говорить о конкретном стэке не совсем уместно, так как он может со временем меняться как и компания где вы работаете. Но если говорить об основном стэке среднестатистического back-end разработчика то сегодня это:

ЯП:

  • Java;
  • Golang;
  • Python;
  • PHP;
  • C#.

БД:

  • Postgres;
  • MySQL;
  • Oracle.

Кэши:

  • Redis.

Управление событиями системы:

  • RabbitMQ;
  • Kafka.

CI/CD:

  • GitLab/Hub pipelines;
  • Docker;
  • K8s (тут на самом деле нет необходимости углубляться, но понимать верхнеуровнево что такое Node, а что Pod стоит).

Также некоторые ЯП не могут обойтись без фреймворков, например Java – Spring, Python – Django, PHP – Laravel. В Golang тоже есть, но их я не встречал в проде ни разу за 3,5 года работы с этим языком.

Итак, на текущем уровне, intern/junior, разработчик должен владеть:

  • основными навыками написания кода (типы, переменные, функции, объекты);
  • знать основные идиоматические конструкции того языка который он выбрал
  • уметь в SQL-запросы;
  • написать юнит-тесты;
  • правильно пушнуть код в репу и не запутаться в ветках;
  • уметь пользоваться хотя бы одним фреймворком своего ЯП.
Ответ оказался полезен?
Новый текст вопроса
Новый текст вопроса

Идеальный стек бэкенд-разработчика в 2023 году включает в себя следующие технологии.

Языки программирования

  1. JavaScript/TypeScript (Node.js): Для разработки серверной части приложений.
  2. Python: Для разработки веб-приложений, обработки данных, микросервисов и искусственного интеллекта.
  3. Java/Kotlin: Для крупных приложений и масштабируемых сервисов.
  4. Go: Используется для создания высокопроизводительных систем и сервисов.

Фреймворки и библиотеки

  1. Nest.js (Node.js): Для построения быстрых и масштабируемых веб-приложений.
  2. Django (Python): Для быстрой разработки и обеспечения безопасности веб-приложений.
  3. Spring Boot (Java/Kotlin): Для создания эффективных и надежных приложений.

СУБД (Системы управления базами данных)

  1. MongoDB: Для работы с данными в формате JSON и NoSQL базами данных.
  2. PostgreSQL: Для реляционных баз данных, обеспечивающих согласованность и надежность данных.
  3. Redis: Для кэширования данных и повышения производительности.

Контейнеризация и оркестрация

  1. Docker: Для контейнеризации приложений и обеспечения их переносимости.
  2. Kubernetes: Для управления и оркестрации контейнеризированными приложениями в масштабе.

Архитектурные паттерны

  1. Микросервисная архитектура: Для создания модульных и легко масштабируемых систем
  2. Git: Для контроля версий кода.
  3. Jira, Trello или аналогичные сервисы: Для управления задачами и проектами.

Но хочется отметить, что выбор технологий зависит от конкретных требований проекта и предпочтений команды разработчиков.

Ответ оказался полезен?
Да
Нет

В 2023 году для бэкенд-разработчиков было критически важно обладать глубокими знаниями в технологиях, таких как Go (Golang), PHP, Python, JavaScript, и Ruby.

Go выделялся благодаря своей скорости и простоте использования, в то время как PHP сохранял свою популярность благодаря широкому распространению и новым обновлениям.

Python продолжал оставаться востребованным за свою универсальность и простоту синтаксиса, а JavaScript и Ruby оставались популярными за их гибкость и эффективность в веб-разработке.

Важными были также умения работы с базами данных, особенно с MySQL и PostgreSQL, а также понимание RESTful API и компетенции в области кибербезопасности.

Ответ оказался полезен?
Да
Нет
***

Какие тренды во бэкенде в 2024 году? Что нужно изучить, чтобы прокачаться?

В тренде распределенные системы. Event-driven подход, а вместе с ним работа через очереди и деление систем на микро-сервисы, NoSQL базы данных. Так же в тренде применение AI – от векторных баз данных вроде Quadrant, до интеграции GPT API для самых различных задач.

Ответ оказался полезен?
Да
Нет

Сохраняется спрос на Go разработчиков. Постепенно снижается спрос на разработку микросервисов – всё больше компаний тяготеют к монолитизации для уменьшения издержек на поддержку и инфраструктуру. Базы данных всё так же остаются актуальны. Из протоколов общения между сервисами становится всё более популярным GRPC.

Ответ оказался полезен?
Да
Нет

Меня зовут Вячеслав Аксёнов, я бэкенд Java/Kotlin разработчик с опытом 5+ лет. Я отлично помню какая ситуация была на рынке в 2018 году и хорошо вижу, какая она сейчас.

Для того, чтобы понять какие навыки необходимы для начинающего и продвинутого бэкенд разработчика сейчас, необходимо понять, с чем вы будете работать.

Как правило, Java/Kotlin бэкенд разработчику приходится иметь дело с распределенными системами, в которых есть большое количество бизнес логики, базы данных, брокеры сообщений и выстраивание взаимодействия с фронтенд системами.

Давайте пойдем по-порядку.

Языки программирования

Прямо сейчас лидером в коммерческой крупной разработке является Java версии 1.8 и выше. Также видно, что крупные “модные” компании типа Ozon и Avito полагаются на GoLang. В компаниях поменьше очень много используется Python, NodeJS. Также в каких-то старых системах встречается PHP. Нет смысла пытаться ухватить все, если бы я сейчас начинал свой путь в разработке, я бы фокусировался на Java, либо Go как на самых перспективных вариантах.

Работа с базами данных

Опыт работы с различными системами управления базами данных (СУБД), такими как MySQL, PostgreSQL, MongoDB, и умение проектировать, оптимизировать и поддерживать базы данных.
Как правило, достаточно знаний синтаксиса PostgreSQL или Oracle. Уметь писать SELECT/UPDATE/INSERT запросы и описывать структуры таблиц.

API и веб-сервисы

Создание и поддержка API для обмена данными между клиентской и серверной частями приложения, а также интеграция с внешними сервисами.
Как бэкенд рахработчику вам предстоит проектировать API, который будет использоваться любыми потребителями – как фронтэнд, так и бэкенд. А также вам будет необходимо уметь их реализовывать на языке, который вы выбрали. В сфере Java/Kotlin бесспорным стандартом индустрии является фреймворк Spring.

Архитектура приложений

Понимание принципов построения масштабируемых и эффективных архитектур приложений, таких как микросервисы, серверы приложений и т.д. 
Для применения этих знаний в работе, вы будете уже как минимум middle/senior уровня. Но даже на начинающем этапе не будет лишним собирать информацию.

Безопасность

Знание основных принципов безопасности при работе с данными пользователей, включая хранение паролей, защиту от атак и шифрование данных.
В целом, многие из этих правил для бэкенд разработки одинаковые и не требуют много внимания для соблюдения. Но всегда будет полезно изучить как не допускать базовых SQL Injection уязвимостей.

Работа с CI/CD платформами

Знание основ CI/CD или то, как запустить свое приложение и какие системы используются для автоматизации этих процессов. В подавляющем большинстве сейчас в силу исторического наследия, используется Jenkins, в более новых проектах стараются использовать GitLab CI.

Также помимо так называемых Hard скилов, разработчику требуется знать и окружающую кухню для того, чтобы уверенно чувствовать себя в работе.

Версионный контроль

Опыт использования систем контроля версий, таких как Git, для управления кодовой базой и совместной разработки. В качестве стандарта для коммерческой разработки сейчас используется GitLab.

Тестирование

Навыки написания и автоматизации тестов для обеспечения надежности и стабильности серверной части приложения. Это касается как написаний unit и интеграционных тестов кодом, так и для базовой ручной проверки своего приложения. Имея эти навыки можно проще понимать то, как работают QA инженеры, а также Automated QA инженеры.

Коммуникация и совместная работа

Умение эффективно взаимодействовать с другими членами команды разработки, включая фронтенд-разработчиков, дизайнеров и тестировщиков.
Величайшее заблуждение – что бэкенд разработчик обязательно сидит в углу, пишет код и ни с кем не общается. На самом деле, вы такой же член команды, как и все остальные. Вам необходимо уметь слышать других людей, уметь доносить свои мысли, иметь запас терпения и вежливости.

Понимание основных принципов разработки ПО

Знание методологий разработки, таких как Agile или Scrum, и умение следовать лучшим практикам программирования.
Опять же, классикой для планирования задач сейчас является Jira+Confluence, в компаниях поменьше иногда Trello. Но любая уважающая себя компания выстраивает понятные и прозрачные процессы, а вам как бэкенд разработчику, нужно уметь этими инструментами пользоваться.

Бэкенд-разработчики играют ключевую роль в создании устойчивых и эффективных веб-приложений, обеспечивая их надежную работу на серверной стороне. В современном мире технологий, где цифровые продукты становятся неотъемлемой частью повседневной жизни, этот профессионал обладает широким спектром навыков и обязанностей.

Бэкенд-разработчики – это не только технические специалисты, но и ключевые участники команд, создающих инновационные и удобные цифровые продукты.

С учетом быстрого развития технологий и постоянных изменений в требованиях рынка, бэкенд-разработчики продолжают совершенствовать свои навыки и следить за последними тенденциями в индустрии. Их роль становится все более важной для обеспечения высокой производительности и безопасности веб-приложений, а их вклад остается неотъемлемой частью успешного цифрового мира.

По сути, продвижение к следующему уровню это процесс плавный, и он включает в себя постепенное углубление в то чем вы каждый день пользуетесь. Например, вы пишете SQL запрос, да он может работать и выполнять то, что требуется в задаче, но потом возникает ситуация что под большой нагрузкой он работает недопустимо медленно, и тут вы погружаетесь в построение правильного индекса в БД, read-through cache и прочие оптимизации. То есть, сталкиваясь с проблемами и находя решения вы обретаете опыт, попутно погружаясь в технологии с которыми уже знакомы.

Конечно, гораздо лучше оказаться в ситуации, когда возникающая угроза работоспособности не вызывает у вас панику, вы уже где-то читали об этом, или даже пробовали в pet-проекте. Поэтому я рекомендую заниматься развитием постоянно. Например, выделяя даже по 30-50 мин в день на чтение книги Мартина Клепмана про высоконагруженные приложения или Стива Макконнела про совершенный код, вы существенно продвинетесь вперед как специалист в своем деле. Клепман даст вам понимание о принципах и нюансах построения крупных распределенных систем, научит решать проблемы согласованности данных и как взаимодействуют отдельные компоненты в таких системах. Макконнелл научит правильно мыслить во время написания кода, выстроить определенный шаблон написания хорошего и тестируемого кода. Это будет хорошим фундаментом.

По углублению в тот ЯП которым вы пользуетесь и в его эко-систему, что-то кроме официальной документации предложить сложно, читать хабр тоже полезно, но при этом не забывать проверять информацию в официальной доке, не просто читая статью “по диагонали”, но пробуя написать что-то, используя то что вы узнали из нее.

Также сегодня сильно продвигается микросервисная архитектура и Domain Driven Development. В этой связи, достаточным ресурсом для понимания будет Microservice Architecture – кажется там есть все, для того чтобы узнать как это делается.

Кстати не стоит забывать и о коммуникативных навыках, чем дальше вы хотите расти, тем больше вам необходимо общаться в коллективе, взаимодействовать с другими командами, правильно выстраивать процессы, уточнять бизнес требования к продукту и тд. Тут мне очень помогла, в свое время, книга Роберта Мартина “Идеальный программист”. Она не о технических знаниях, но вкладывает понимание обобщенного образа того самого идеального программиста, который умеет говорить нет когда это нужно, работать в команде и быть эффективным в быстро меняющейся среде.

Ответ оказался полезен?
Да
Нет

Тренд 1 — Микросервисная архитектура

Тенденция к созданию масштабируемых, гибких и легко обновляемых систем на основе микросервисов продолжает развиваться. Разработчиков интересуют инструменты для управления и мониторинга микросервисных архитектур.

Тренд 2 — Serverless Computing

Serverless computing, или “бессерверное” вычисление — модель облачных вычислений, в которой разработчики могут выполнять отдельные функции или части кода, не управляя инфраструктурой серверов. В этой парадигме пользователи оплачивают только фактически используемые вычислительные ресурсы во время выполнения своих функций, вместо поддержки постоянной доступности серверов.

Тренд 3 — Графовые базы данных

Для эффективного представления и обработки сложных связей и зависимостей в данных. Изучение технологий, таких как GraphQL, также может быть актуальным.

Тренд 4 — Работа с большими данными и аналитика

В связи с увеличением объемов данных, навыки работы с большими данными и инструментами аналитики продолжают оставаться востребованными.

Тренд 5 — Контейнеризация и оркестрация

Использование контейнеров (например, Docker) и оркестраторов (например, Kubernetes) остается важным аспектом для развертывания и масштабирования приложений.

Ответ оказался полезен?
Да
Нет

В 2024 году мы наблюдаем акцент на развитии технологий метавселенной, интеграции AI и ML в бэкенд, а также использовании edge computing и блокчейн технологий. Особенно выделяются разработчики, владеющие NestJS и TypeScript, что позволяет обеспечить модульную архитектуру и строгую типизацию для повышения эффективности и надежности в разработке.

Ответ оказался полезен?
Да
Нет
***

Специалистов какого стека не хватает на рынке?

В данный момент много вакансий на Go и Java.

На Golang активно переписываются множество проектов в различных стартапах а так же разрабатываются новые проекты с нуля.

Java отлично представлена в FinTech секторе – банках, страховых компаниях, торговле, многих интеграторах и так же в целом больших компаниях.

Ответ оказался полезен?
Да
Нет

Кажется, что не хватает всех. : )

Если вы сейчас выбираете стек, я бы советовал идти в Go – быстрый вход и большое количество вакансий.

Но если у вас уже есть экспертиза и хочется чего-то нового, то я бы посмотрел в сторону Rust – в долгосрочной перспективе он может оказаться хорошей ставкой.

Ответ оказался полезен?
Да
Нет

Сегодня на рынке очень не хватает специалистов именно такого стека:

  • Понимание инструментов (ЯП, БД) и почему именно их используешь
  • Умение писать читаемый и структурированный код который можно покрыть тестами
  • Понимание построения распределенных систем (микро-сервисной архитектуры)
  •  Умение понять задачу до того как приступите к ее решению, уточнять, задавать вопросы, быть легким в коммуникации.

Кто-то может быть ждет что я напишу набор инструментов который надо знать чтобы продвинуться, но мое мнение – разработчик это не набор инструментов, а набор навыков и системное мышление которые позволят прийти к решению задачи любым подходящим набором инструментов.

И конечно же я не могу не порекомендовать просто быть активным в работе, брать задачи за которые еще не брался, не бояться предлагать решения, даже если они не совсем верные, после обсуждения со старшими коллегами они превратятся в верные а вы сможете принять опыт старших в процессе обсуждения. Будьте открыты и не бойтесь совершать ошибки – это ведь часть пути. Если хотите иметь то чего никогда не имели (грейд выше) – делайте то чего никогда не делали.

И всегда помните – любая большая и сложная система, это множество маленьких простых блоков правильно собранных вместе.

Ответ оказался полезен?
Да
Нет

Я бы выделил:

  1. Go (Golang): язык программирования Go становится все более популярным в разработке высокопроизводительных и эффективных приложений. Он хорошо подходит для создания микросервисов и обработки параллельных задач.
  2. Rust: Rust получает внимание благодаря своей производительности и высокой степени безопасности при работе с системным уровнем кодом. Он может быть использован для разработки высоконагруженных приложений.
  3. Kotlin (с Spring Boot): Kotlin, как язык, и Spring Boot, как фреймворк, становятся популярными в мире Java-разработки. Kotlin часто используется в сочетании с Spring Boot для разработки современных и надежных приложений.
Ответ оказался полезен?
Да
Нет

Сейчас на рынке ощущается нехватка специалистов, владеющих современными технологиями, включая AI, ML, edge computing и блокчейн. Также востребованы навыки в области метавселенной и кибербезопасности. Особую ценность представляют разработчики с опытом работы с NestJS и TypeScript для создания масштабируемых веб-приложений.

Я бы порекомендовал бэкенд-разработчикам продолжать обучение и осваивать новые технологии. Важно уделять внимание изучению современных подходов в разработке, таких как работа с метавселенной, AI и ML, а также укреплять навыки в области кибербезопасности. Не менее важно освоить NestJS и TypeScript, которые открывают новые горизонты в разработке веб-приложений.

Ответ оказался полезен?
Да
Нет

В последние годы микросервисы стали одним из актуальных архитектурных трендов в сфере разработки ПО. Amazon, Netflix, The Guardian, Twitter, PayPal, SoundCloud уже начали использовать микросервисные системы на облаке. В Китае Tencent, Baidu, Jingdong, Taobao, 360 Search также начали мигрировать к микросервисной архитектуре. Например, в системе WeChat от Tencent содержится более 3 000 микросервисов, размещенных на более чем 20 000 машинах. Онлайн-сервис системы Netflix использует более 500 микросервисов, вовлекая 5 миллиардов взаимодействий микросервисов в день. Каждая страница Amazon включает от 100 до 150 вызовов микросервисов.

Использование данного подхода предполагает построение приложений как набора маленьких, независимых сервисов, взаимодействующих друг с другом через API. Такой подход обеспечивает большую масштабируемость и гибкость, поскольку каждый сервис может быть разработан, развернут и управляем независимо.

С другой стороны, создание микросервисов позволяет легко перемещать приложения между разными средами, такими как разработка, тестирование и производство, без необходимости внесения изменений в код. Что в свою очередь увеличивает скорость и качество разработки, а также процесс доставки решения до клиента.

В совокупности это помогает улучшить эффективность разработки, так как позволяет более маленьким и направленным на определенные задачи командам работать независимо над различными частями приложения.

Таким образом можно сделать вывод, что контейнеризация и микросервисы стремительно набирают популярность как способ создания и развертывания программного обеспечения, и ожидается, что их применение будет продолжать расти в ближайшие годы.

IT специалистам я бы рекомендовал повышать компетенции развивать понимание различных технологий и инструментов для построения микросервисов. По-моему мнению знание следующих технологий поможет быть востребованным в 2024 году:

Контейнеризация

  1. Docker для создания, развертывания и управления контейнерами, где будут запускаться микросервисы.
  2. Kubernetes для оркестрации и управления контейнеризированными приложениями.

Коммуникация между сервисами

  1. RESTful API и GraphQL для определения интерфейсов, через которые микросервисы могут обмениваться данными.
  2. RabbitMQ, Kafka для обеспечения асинхронного взаимодействия и обмена сообщениями между микросервисами.

Мониторинг и отладка

  1. Prometheus, Grafana для мониторинга состояния и производительности микросервисов.
  2. Elasticsearch, Logstash, Kibana для централизованного сбора, хранения и анализа логов.
Ответ оказался полезен?
Да
Нет
***

Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.

Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.

Для начинающих
Советы
Бэкенд
Планы обучения
16107