Многозадачность в IT: все, что вы хотели узнать о бэкенд-разработке
Более половины россиян покупают товары в интернете, десятки миллионов человек прокладывают маршруты в навигаторах, ищут информацию о погоде и курсе валют, читают новости и смотрят видео. За стабильность и скорость работы этих ресурсов отвечают бэкенд-разработчики. Они следят за тем, чтобы сервера выдерживали нагрузку, а базы данных продолжали работать, даже когда на сайт одновременно заходят десятки тысяч человек.
Чем занимаются бэкенд-разработчики
Бэкендеры отвечают за реализацию невидимой для пользователя серверной части сервисов и приложений. Это отличает бэкенд-разработчиков от специалистов по фронтенду, которые занимаются созданием графического интерфейса.
Эксперты в бэкенде продумывают архитектуру ресурса, обеспечивают безопасное хранение и передачу данных, следят за тем, чтобы сервис работал быстро и устойчиво. По сути, они создают фундамент проекта — без них сайт или веб-приложение, какими бы красивыми и удобными они ни были, останутся бесполезными.
Например, недавно Яндекс Маркет запустил возможность хранить и продавать товары со своего склада на любых площадках. Это потребовало от команды бэкенда изменений в сервисе хранения и обработки заказов, разработки нового API для создания таких заказов и работы с ними. Каждую из этих задач решала независимая команда из бэкендеров и фронтендеров, а технический лидер — по сути, тоже бэкенд-разработчик — координировал весь процесс.
Сейчас бэкендеры все чаще совмещают обе роли — они могут и код написать, и верстку поправить. Таких специалистов называют фулстек-разработчиками. Обычно хорошие бэкендеры — это мастера на все руки и короли многозадачности, ведь они одновременно отвечают за разные направления работы. Расскажу о навыках, которые нужны, чтобы успешно развиваться в бэкенде.
Быть универсальным специалистом
Без знания языков программирования стать хорошим бэкендером не получится. Вообще, нужно готовиться при необходимости писать код на любом языке. При этом знание конкретного языка, на мой взгляд, менее важно, чем понимание общих принципов computer science, алгоритмов и подходов к проектированию систем. Если человек силен в Java, то сможет при необходимости быстро перейти на Python. Конечно, есть узкие области, например, оптимизация производительности Java Virtual Machine, которые за два дня не освоишь. Там есть подводные камни, нужен опыт. Но в целом переключаться между языками несложно. Мы стараемся поощрять универсальность наших разработчиков, кроме того, сотрудники всегда готовы помочь коллегам по команде, когда нужно с чем-то разобраться.
Примерами универсальности могут быть также навыки в DevOps — скажем, умение развернуть и обеспечивать работу базы данных для своего сервиса, или продуктовая аналитика, когда разработчик на основе доступных данных делает вывод об успешности запуска и самостоятельно определяет зоны роста в продукте.
Уметь оптимизировать свой и чужой код
Научиться программировать — только полдела, разработчику важно освоить навык оптимизации своего и чужого кода. Дело в том, что код для больших проектов пишут порой десятки и даже сотни специалистов. Бэкендерам нужно делать код легкочитаемым и гибким на случай, если коллегам потребуется изменить любую часть сайта или приложения.
Частым спутником основного языка бэкенд-разработчика служит SQL. Сложность работы с ним в том, что не всегда достаточно научиться писать запросы к базе данных на этом языке: еще хочется, чтобы запросы работали быстро. Поэтому типичная задача бэкенд-разработчика — создание модели хранения данных или оптимизация SQL-запросов к существующей модели.
Видеть картинку в целом
Бэкендеру важно уметь комплексно оценивать весь проект, чтобы продумывать архитектурные стандарты и требования к системе. Главная задача специалиста — обеспечить баланс между скоростью разработки и гибкостью решений. Поэтому, прежде чем начать работу, бэкендер анализирует бизнес-задачи и старается обеспечить максимальное переиспользование существующих систем. Обычно это вызвано тем, что не всегда есть полная уверенность в успешности запуска и сначала хочется быстро проверить гипотезу и только потом развивать и масштабировать систему.
Например, когда мы только начинали строить маркетплейс четыре года назад, то взяли максимум от уже имеющегося решения для сравнения цен, добавили функциональность корзины и заказа и запустились в полуручном режиме. Параллельно с запуском команда технических лидеров постаралась заранее выявить слабые места в существующей архитектуре и запланировала проекты для их системного исправления.
Разбираться с данными
Бэкенд-разработчикам нужно уметь обрабатывать и систематизировать большие объемы данных. Прежде чем начать работы над любым сервисом, нужно определить, как будут храниться данные на серверах. Например, когда мы создавали архитектуру нового хранилища товарных предложений, то выбирали, где можем обеспечить загрузку данных через очередь, чтобы не перегружать систему, а где требуется синхронная загрузка, чтобы пользователи мгновенно видели обновления. Это позволило учесть баланс интересов партнеров (интернет-магазинов), покупателей и наши затраты на серверные ресурсы.
Поддерживать сервис после запуска
Даже после запуска разработчики продолжают постоянно совершенствовать продукт — собирают обратную связь от пользователей, развивают и оптимизируют проект. Когда тестировщики проверяют, как сервис реагирует на высокую нагрузку, и ищут баги в системе, к ним подключаются бэкендеры. Они дорабатывают код, чтобы сервис бесперебойно реагировал на запросы пользователей и обеспечивал постоянный доступ к базе данных.
Для обеспечения гарантий высокой доступности сервиса мы применяем хаос-тестирование, когда команда тестировщиков произвольным образом выключает или замедляет разные бэкенды и проверяет работоспособность всего сервиса. В результате мы формируем список проблем, которые далее отправляются команде разработки для решения.
Как освоить эти и другие навыки бэкендеров
Минимальный набор знаний и навыков, необходимых для работы в бэкенде, можно получить в технических университетах, но это не единственный путь. Например, можно развивать навыки через практику на рабочем месте. В крупных компаниях менторы помогают новичкам погрузиться в инфраструктуру и составить план развития: какие скилы нужно прокачать и какую литературу прочитать. На этом этапе ключевая задача сотрудника — быстро нарастить hard skills, чтобы соблюдать дедлайны и решать рабочие задачи без багов.
Другой вариант — заниматься самообразованием. Бесплатный Летний лекторий Академии Яндекса поможет погрузиться в профессию бэкенд-разработчика и получить навыки программирования, которые пригодятся в дальнейшей работе. Студенты Лектория будут изучать Python или Java, осваивать создание архитектуры продукта, нагрузочное тестирование, управление базами данных и многое другое.