«Бэкенд — это просто! Выгрузить данные в нужном формате из одной системы и загрузить в другую. И так почти на каждом проекте!», — заявил недавно мой коллега Сергей, старший Python-разработчик. Я решил спросить у бэкендеров в нашей компании, с какими задачами они сталкиваются, какими hard и soft skills должны обладать мидлы в бэкенд-разработке.

«90% задач — это работа с базами данных»

Сергей

Старший разработчик Python

Типовые задачи

  • Делать обработку данных, которые заполнил пользователь.В работе с базами данных используют четыре основные функции — CRUD: create (создание), read (чтение), update (редактирование), delete (удаление).

  • Взаимодействовать с другими системами. Например, прикрутить систему оплаты.
    Мы пишем API, с ним взаимодействует клиент. Либо мы взаимодействуем с помощью API между собой, если это микросервисная архитектура. Как правило, у нас не одна база: есть база очередей, база Redis. Мы заходим в базу, берем оттуда данные, возвращаем либо куда-то отправляем, отдаем клиенту.

Опыт Сергея: работал тимлидом, разрабатывал бот, настраивал обработку заявок в банке

Hard и soft skills мидла в бэкенд-разработке

Hard skills

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

  • Уметь писать чистый код и создавать чистую архитектуру.О концепции чистого кода писал Роберт Мартин в книге «Чистый код» и Стив Макконнелл в книге «Совершенный код». Чистый код — это код, который легко читать, понимать и поддерживать. Он улучшает качество продукта и упрощает работу команды разработчиков.

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

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

Soft skills

Самое важное — это soft skills. Мидл-разработчик должен не бояться разговаривать с коллегами, принимать конструктивную критику.

Что почитать

  • Адитья Бхаргава «Грокаем алгоритмы. Руководство. Иллюстрированное пособие для программистов и любопытствующих».

  • Аллен Бенджамин Дауни «Основы Python. Научитесь думать как программист».

  • Дэвид Бизли «Python. Исчерпывающее руководство».

Читайте книги. Если не читается, то смотрите видео. Если не смотрится, то задумайтесь, надо ли вам это?

«Стандартная задача — написание endpoint для веб-сервисов»

Андрей

Разработчик Python

Типовые задачи

Частая задача — написание endpoint для веб-сервисов. Это относится к обработке данных: получить данные, что-то с ними сделать, сохранить базу, извлечь что-то из базы и отдать обратно клиенту.

Опыт Андрея: работал с данными ЦИК, разрабатывал систему расчета стоимости квартир

  • ЦИК
    Работал на двух проектах, связанных с ЦИК. На одном из них скачивал данные о кандидатах с сайта центральной избирательной комиссии. Клиенты занимались проведением избирательных кампаний для кандидатов на разных уровнях. Они обратились с такой задачей, потому что на сайте избирательной комиссии не было поиска по фамилии, хотя запрос тривиальный. В качестве рекламы клиенты хотели запустить сервис — удобный инструмент для работы с кандидатами.

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

  • Система расчета стоимости квартир
    Проект по расчету стоимости квартир был несложным. Аналитики определили формулу. Разработчикам нужно было извлечь из базы данные по высоте квартиры, выгрузить данные по количеству детских садов в районе, автобусных остановок, дорожных развязок с онлайн-карт и рассчитать по формуле.

    Сначала мы сводили данные в базу, потом делали по ним расчет. Затем расчет трассировали. Формулы были простыми, но их было много. Код был понятный, но нужно было аккуратно скомпоновать много мелочей.

  • Другие проекты
    Занимался поддержкой интернет-магазина. Еще разрабатывал систему для гостиниц: администраторы заводили в ней бронь, отмечали обеды, оплаты, формировали отчеты для МВД.

Hard и soft skills мидла в бэкенд-разработке

Hard skills

  • Знать SQL, чтобы от зубов отскакивал. Нет проектов, которые с ним не взаимодействуют.

  • Знать ORM-библиотеки, которые позволяют взаимодействовать с SQL.

  • Знать стек, как приходят веб-запросы, что происходит под капотом.

Soft skills

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

Что почитать

  • Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес «Шаблоны проектирования».

  • Мартин Фаулер «Шаблоны корпоративных приложений».

  • Стив Макконнелл «Совершенный код».

  • Энди Орам, Грег Уилсон «Идеальный код».

  • Роберт Мартин «Чистый код».

  • Егор Бугаенко «Элегантные объекты».

«Типовые задачи: работа с REST-сервисами, схемы SQL, работа с внешними сервисами»

Георгий

Разработчик Java

Типовые задачи

  • Работать с REST-сервисами.

  • Работать с безопасностью, аутентификацией, авторизацией пользователей.

  • Создавать схемы SQL: писать сложные запросы с Join, HAVING и прочими. Это позволяет приложению быстрее реагировать на запросы пользователей.

  • Уметь работать с внешними сервисами, с микросервисами. Например, интегрировать в свое приложение платежные системы. Это тоже актуальный навык.

  • Уметь работать с данными от пользователя.

Опыт Георгия: госпроекты, корпоративные проекты, кредиты пользователей, наставничество

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

  • Перешёл на корпоративные проекты: продажи продуктов, работу с продуктами, работу с пользователями, полноценные REST-приложения, JSON, Spring Boot.

  • Работал на проекте с кредитами пользователей. Занимался системой расчета долговой нагрузки.

  • Выполнял роль наставника. Помогал новым разработчикам на моем проекте: показывал, как и с чем взаимодействовать, как «дебажить», где логи и метрики.

Hard и soft skills мидла в бэкенд-разработке

Hard skills

  • Нужно в совершенстве знать свой язык, владеть синтаксисом.

  • Уметь работать с базами данных, реляционными, нереляционными.

  • Уметь работать с безопасностью, знать, как настраивать аутентификацию и авторизацию.

  • Проводить оценку задач и разбивать задачи на подзадачи.

  • Проводить интеграционные и модульные тесты. Да, мы не тестировщики, а программисты, но знать модульные и интеграционные тесты важно. На собеседовании это один из основных вопросов.

Soft skills

  • Уметь работать в команде. Например, когда разработчики говорят, что нужно поменять технологию, потому что она будет быстрее, ты должен это принять. Если проводится код ревью, нужно признать свои ошибки. Не должно быть такого: «Я все знаю сам, вы неправильно меня ревьюите». Самое важное — слушать членов команды, даже джунов.

  • Уметь правильно и вовремя задавать вопросы по задачам, чтобы потом не переделывать по несколько раз.

  • Быть вежливым, спокойным.
    Бывает, что дают задачу, а потом говорят: «Ой, она, оказывается, не нужна». Твоя работа, над которой ты три дня сидел, уходит в мусорку. Это просто нужно воспринимать как опыт.

Что почитать

Я начинал изучать разработку с чтения книг.

  • Роберт Мартин «Чистый код: создание, анализ и рефакторинг».

  • «Паттерны проектирования».

В Ютубе много информации и для новичков, и для продвинутых. Также я проходил онлайн-курсы. Хороших и качественных курсов мало, но мне повезло найти такие, задачи на курсах были максимально приближены к рабочим. После каждого модуля, задачи, проекта было настоящее собеседование по всем пройденным темам.

«Частая задача — работа с данными: сохранить, извлечь, удалить, оптимизировать запросы»

Роман

Разработчик Java

Типовые задачи бэкенда

Нужно хорошо понимать чужой код, архитектурные решения, лежащие за этим кодом.

Сложно выделить типовые задачи, потому что у каждого проекта своя специфика. Один проект про телекоммуникации, другой про бизнес-процессы. Базы данных на каждом проекте разные: в одном новый NoSQL, в другом PostgreSQL, в третьем MSSQL или Oracle.

Hard и soft skills мидла бэкендера

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

  • Мидлу нужно передавать свой опыт другим, быть ментором.

  • Начинать включаться в процессы проектирования.

  • Очень важно быть терпеливым.

  • Нужно постоянно развивать себя.

Опыт ​Романа: был тимлидом, внедрял third-party, single sign-on

Первый большой проект, который я делал  с проектной документации до имплементации — проект по единовременной установке софта на большое количество компьютеров. На этом проекте я был тимлидом, разрабатывал документацию, писал код.

На другом проекте занимался внедрением third party в продукт.

Был опыт, когда внедрял single sign-on для большого софта, который был написан на трёх языках С++, Java и JavaScript — достаточно сложно было. Это были микросервисы.

Hard и soft skills мидла бэкендера

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

  • Мидлу нужно передавать свой опыт другим, быть ментором.

  • Начинать включаться в процессы проектирования.

  • Очень важно быть терпеливым.

  • Нужно постоянно развивать себя.

Что почитать

  • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides «Design Patterns: Elements of Reusable Object-Oriented Software».

  • Martin Fowler «Refactoring».

  • Martin Fowler «Enterprise Patterns».

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

Как вы считаете, какие задачи чаще всего решают мидлы в бэкенд-разработке?

Комментарии (23)


  1. GothicJS
    13.08.2024 08:09
    +10

    «Бэкенд — это просто! Выгрузить данные в нужном формате из одной системы
    и загрузить в другую. И так почти на каждом проекте!», — заявил недавно
    мой коллега Сергей, старший Python-разработчик.

    Это заявление больше похоже не на сеньора питониста, а на джуна фронтендера)


    1. Fox_exe
      13.08.2024 08:09

      Ага, миддл - это когда эти данные надо не только перегрузить из одной базы в другую, но ещё и обработать: Проверить на корректность, посчитать статистику, как-то отреагировать на разрывы связи, ошибки в данных и прочее.
      А потом с этими данными надо работать дальше - показать юзеру в удобном виде, с кучей доп. данных, скорее всего из других баз. Сделать выгрузку во всякие эксельки...
      Ко всему этому ещё желательно прикрутить счётчики, логи и прочий мониторинг, чтобы сисадмины/девопсы/ты_сам могли следить за состоянием процесса загрузки/выгрузки...

      Словом, там геморроя в разы больше, чем может показаться.


      1. petejones83
        13.08.2024 08:09

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

        А это разве не "выгрузить данные в нужном формате из одной системы и загрузить в другую"?


        1. calculator212
          13.08.2024 08:09
          +1

          А это разве не "выгрузить данные в нужном формате из одной системы и загрузить в другую"

          А атомная электростанция это просто большой кипятильник)


      1. Faxfox
        13.08.2024 08:09

        И все это должно отработать за 0,0000..001 сек


        1. Fox_exe
          13.08.2024 08:09
          +1

          Ах да, оптимизация... Это то, о чём джун по определению не знает, а миддл уже начинает догадываться (или вспоминать хоть иногда)...


    1. chesser69
      13.08.2024 08:09
      +4

      Это больше похоже на шутку которую приняли всерьез.


    1. Dolios
      13.08.2024 08:09

      Это заявление похоже на "классический" стёб и самоиронию. Я даже на 146% уверен, что именно стёбом оно и является. Ведь все знают, что бэкенд-разработка, это просто перекладывание json-ов. А вот к вашим софт скилам у меня теперь вопросы :)


  1. kompilainenn2
    13.08.2024 08:09
    +11

    Soft skills

    Из софтов: нужно уметь разбираться в чужом коде.

    Какая полезная статья


  1. artemfisher
    13.08.2024 08:09
    +1

    Написано настолько абстрактно, что сложилось мнение что к джунам требования выше чем к миддлам


    1. 26rus_mri
      13.08.2024 08:09
      +3

      Так ведь так и есть :-D


    1. SimonTheHuman
      13.08.2024 08:09
      +1

      Варнинг! ДУХОТА!

      Это потому что к джунам требования на агрегаторах вакансий пишут ашары, а тут мы мнение инженеров читаем) Вообще многие моменты, очевидные для спецов, тут так же опущены.


  1. duke_alba
    13.08.2024 08:09

    Почему-то в навыках не было указано: написать сервер... :-)


  1. VirtualVoid
    13.08.2024 08:09
    +2

    Имхо, получился какой-то съезд клуба любителей чистого, совершенного и элегантного кода :))


  1. Boilerplate
    13.08.2024 08:09
    +4

    Скиллы настолько капитанские, что я бы добавил еще один вид.

    True skills: уметь дышать, кушац, пить и незаметно пукать. Это всё тоже нужно любому бек-енд разработчику. Никто не поспорит?


    1. ogost
      13.08.2024 08:09
      +2

      Судя по статье автор явно предпочитает пукать как можно заметнее


  1. Dolios
    13.08.2024 08:09
    +4

    Знать SQL, чтобы от зубов отскакивал. Нет проектов, которые с ним не взаимодействуют.

    Какой диалект, какой СУБД? Зачем надо, чтобы отскакивало, если используется ORM?

    Soft skills. Из софтов: нужно уметь разбираться в чужом коде.

    Советы профессионала сразу видно :) Я себе записал, софт скиллс - это умение разбираться в чужом коде (с)

    Самое важное — это soft skills. Мидл-разработчик должен не бояться разговаривать с коллегами, принимать конструктивную критику.

    Это тоже записал :)

    Мидлу нужно передавать свой опыт другим, быть ментором.

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

    Я бы сказал, только Георгий тут не написал лютой дичи, передайте Георгию моё спасибо.


    1. petejones83
      13.08.2024 08:09

      Какой диалект, какой СУБД? Зачем надо, чтобы отскакивало, если используется ORM?

      Диалект как раз не важен, если ORM используется. А знать надо, возможно, чтобы уметь индексы правильно накидывать?


      1. SwingoPingo
        13.08.2024 08:09

        Индексы можно накидать в GUI так же хорошо, как и с DDL, благо делается это так редко и на больших БД так долго, что еще не каждый раз решаются. Возможно автор имел в виду не SQL, а принципы работы современных БД, коих тоже пруд пруди и если все изучать "что б отскакивало", то на ничего остального времени не хватит. Впрочем это тоже кое что говорит о компетенциях самого автора.


  1. petejones83
    13.08.2024 08:09

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


  1. Kvazarrius
    13.08.2024 08:09

    "Бэкенд — это просто! Выгрузить данные в нужном формате из одной системы и загрузить в другую" - дальше этот высер не читал


    1. Andrey_Solomatin
      13.08.2024 08:09

      Иногда бэкенд это про крудошлёпить.

      > Опыт Сергея: работал тимлидом, разрабатывал бот, настраивал обработку заявок в банке

      Судя по опыту и фотке, это начинающий сеньёр.


  1. sepulkary
    13.08.2024 08:09
    +1

    Самое важное — это soft skills.

    Адитья Бхаргава «Грокаем алгоритмы»

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

    Как стать middle Python-разработчиком? Изучите Python (с упором на asyncio, multithreading, multiprocessing), pytest (+ mock), PostgreSQL, SQLAlchemy, FastApi, алгоритмы (в объёме хотя бы techinterviewhandbook.org/grind75), Apache Kafka, Docker (+ Compose, + Swarm), GitHub Actions, архитектурные паттерны. Если хотите найти работу быстро, то добавьте к этому списку Django (в этом случае замените SQLAlchemy на Django ORM) и k8s.

    Вместо «Грокаем алгоритмы» возьмите «Алгоритмы: построение и анализ» Кормена и «Высоконагруженные приложения» Клеппмана.

    Soft skills — это вовсе не только мантра «Я слышу своих коллег и признаю свои ошибки», а умение анализировать, делать выводы, знание психологии, умение донести свою позицию, практика ведения дискуссии. Плюс английский язык.

    Просто же всё.