Что нужно знать backend разработчику. Простыми словами о «фронтенде» и «бэкенде»: что это такое и как они взаимодействуют. Вопросы по базам данных
К переходам внутри департаментов иногда относятся по-разному. Кому-то просто привычнее видеть любые карьерные изменения внутри одной компании через призму роста должностей. Кто-то не считает возможным сменить сферу деятельности, даже если она смежная с текущей. Третьи же в принципе уверены, что переход из департамента в департамент означает, что человек занимает позицию “ни рыба, ни мясо”, и вряд ли добьётся чего-то значимого.
При этом некоторые работодатели всячески это приветствуют и считают чем-то вроде предохранителя от выгорания – человек сменит фокус внимания, сменит департамент или отдел, но не сменит саму работу в целом.
Меня зовут Костя, и я работаю в QIWI почти 4 года. Сегодня расскажу вам, как успешно перешел из frontend-разработки в backend.
Frontend
В QIWI я с конца 2014 года, начинал работать как разработчик iOS–приложений, и, в принципе, пару лет занимался разработкой QIWI-кошелька. При этом не могу сказать, что было скучно – задачи были довольно разные и в рамках одного приложения: мы занимались интеграцией кошелька с другими нашими сервисами, чинили баги, подтягивали анимацию. Кроме этого, был занятный опыт по созданию приложения для Apple Watch. Потом немного расширил фокус и поработал еще и над iOS-приложением для «Совести».
И вот примерно тогда я начал потихоньку переходить в бэк. В плане гибкой методологии это даже удобно – я переключался, в первом спринте мог делать какие-то задачки по бэкенду, а во втором проводить интеграцию API, которое я же и написал.
Но в бэкенде на то время было слишком мало разработчиков и слишком здоровенный бэклог, так что в итоге я все же переключился на бэкенд полностью. То, что я делаю сейчас, это классические задачи бэкендера – пишу код в наших микросервисах, чиню баги, занимаюсь рефакторингом, постигаю Kotlin. Есть возможность работать и над свежим продуктом компании – QIWI Инвестор.
Кстати, не могу сказать, что за эти два года получилось как-то закостенеть во фронте, я отчетливо осознавал, что там тоже есть, куда развиваться. К примеру, я вижу, что сейчас происходит в команде мобильной разработки, и понимаю, что, останься я там, продолжил бы расти дальше вместе с ребятами.
Так что тут сложилась win-win ситуация – я хотел помочь команде и продукту (перевес в разработке был сильно не в сторону бэкендеров) и набраться новых знаний. Тимлиды все поняли и отпустили меня без каких-то претензий, продакт тоже.
Кроме этого, знания хотелось именно диверсифицировать, чтобы не привязываться к одной платформе (Android мне немного не по душе, но и Apple все же сдает позиции). Ну и было желание в случае чего уметь взять и сделать себе приложение самому (и фронт, и бэк), если вдруг появится какая-то клевая идея. Пока вот не пригодилось, правда.
Backend
Само собой, сама первая проблема, с которой сталкиваешься при таком переходе, это пробелы в матчасти. В моем случае это были некоторые тонкости работы с базами данных, но здесь помогла как способность к самообучению, так и команда – ребята отзывчивые и всегда готовы прийти на помощь и что-то подробно объяснить. В QIWI в принципе с обучением на любых этапах все хорошо, будь ты хоть джуниором в самом начале работы, хоть вот так реши и смени сферу пару лет спустя.
Никого не раздражало, что первое время я явно работал не так эффективно, потому что во многое надо было въезжать (но в долгосрочной перспективе команда-то все равно в выигрыше).
Конечно, у меня и до этого был небольшой опыт в разных сферах – мобильные игры и веб, но это все были, скорее, попытки нащупать что-то свое, нежели именно набивание практического серьезного опыта.
Впечатления от бэкенда после фронтенда
Нет работы с UI. Вообще. Раньше приходилось убивать время на исправление багов в UI, сейчас – нет. Минусы такого положения – конечный пользователь не видит результатов конкретно моей работы, как это было с фронтом. Я пытался определить, что же сложнее – бэк или фронт, и понял, что (лично для меня) тяжелее всегда было работать с многопоточностью и сетевым стеком. И тут уже не так важно – за фронт ты или за бэк. На фронте я просто столкнулся с такими задачами впервые, без подготовки, а на бэкенде уже с каким-никаким опытом.
Набраться опыта и делать что-то крутое можно в любой области, было бы желание и усидчивость, здесь практики сходятся – сделать что-то (и сделать хорошо), и чтобы это работало надежно и легко поддерживалось. Причем для бэкендера не столь критично наличие или отсутствие опыта во фронте. Если разраб учитывает все мелочи, сам продумывает корнер-кейсы и в целом понимает, как будут использовать его API, то он и без фронт-знаний сделает все, как надо.
Мне проще обнаруживать возможные проблемы как раз потому, что я знаю особенности реализации наших мобильных приложений. Но это не какая-то сверхспособность – это набор знаний, которыми так или иначе обрастает любой бэкендер, который часто работает с фронтами.
Что в итоге
Backend-разработка стала для меня еще одним хорошим опытом – я научился писать код и проводить ревью, продумывать архитектуру. Это на самом деле интересно.
Но при этом, попробовав вживую что фронт, что бэк, я не скажу, что в случае чего сразу выбрал бы бэкенд в самом начале карьеры. Для меня все же важно видеть и понимать, как мой продукт воспринимают пользователи. С бэкендом это все довольно призрачно.
Скорее всего, выбирая сферу сейчас, я бы пошел в геймдев или веб-фронтенд. Веб все еще остается хорошей платформой для запуска новых продуктов, и при этом перестал быть жутким и сложным для понимания. Все эти туториалы из спагетти-кода и callback-hell остались далеко позади, к счастью.
Backend-разработчику нужно иметь хорошее фундаментальное техническое образование. Качественное образование дают МФТИ, МГТУ, МГУ, ИТМО или МИФИ. Но многое зависит от человека, от его желания и интереса. При наличии желания хорошее образование можно получить и в менее престижных вузах.
Профильные факультеты
Отсутствие профильного образования приведет к тому, что, когда у человека что-то не заработает, он просто не поймет, почему. Специализация очень важна: есть алгоритмы, структуры данных, понятие конечного автомата. Люди без специального образования не знают этого, и у них возникает много вопросов. Для разработчика важен особый навык — не знать всё подряд (это априори невозможно), а знать о существовании определенных вещей, о том, где их найти и как использовать.
Mail.Ru Group запустила программу бесплатного дополнительного образования «Технопарк » для студентов МГТУ им. Баумана, в рамках которой можно получить все необходимые для backend-разработчика теоретические знания и практические навыки.
Книги
Совершенный код. Мастер-класс
Опираясь на академические исследования, с одной стороны, и практический опыт, с другой, автор собрал из самых эффективных методик и наиболее эффективных принципов ясное прагматичное руководство. Каков бы ни был ваш профессиональный уровень, с какими бы средствами разработки вы не работали, в этой книге вы найдете нужную информацию, она заставит вас размышлять и поможет создать совершенный код.
Приемы объектно-ориентированного проектирования. Паттерны проектирования
В книге описываются простые и изящные решения типичных задач, возникающих в объектно-ориентированном проектировании. Кроме того, книга одновременно решает две насущные задачи. Во-первых, здесь демонстрируется роль паттернов в создании архитектуры сложных систем. Во-вторых, применяя содержащиеся в справочнике паттерны, проектировщик сможет с легкостью разрабатывать собственные приложения.
По пунктам: что нужно знать о бэкенде новичку в веб-разработке
- Запоминающая предыдущее состояние - реализуется с помощью сессий. Пользователь авторизуется один раз, а затем получает возможность свободно передвигаться по приложению и доступ к защищенным ресурсам (таким, как банковские транзакции или селфи в Snapchat), не отправляя данные, которые подтверждают его вход повторно.
- Не запоминающая предыдущее состояние - реализуется с помощью токенов. Пользователи делают все то же самое, но при выполнении каждого HTTP-запроса пользователю нужно отправлять идентификационные данные. Так обычно поступают с REST API. Сейчас золотой стандарт, не запоминающей состояние аутентификации с токенами, - JWT .
Есть и более продвинутый сценарий - многофакторная аутентификация. Она повышает безопасность приложения, добавляя дополнительные уровни защиты к логину и паролю. Хорошие примеры реализации есть у Google и Amazon .
Прим. перев. А у нас есть про двухфакторную аутентификацию и протокол FIDO U2F.
Заметьте, что для задач CRUD вам также нужно будет научиться проверять входящие данные и сверяться с разрешениями, прежде чем вы сделаете что-то с этими данными.
4. REST
Чтобы обеспечить управление ресурсами в вашем приложении (такими, как книги или аккаунты), нужно реализовать программный слой, принимающий запросы и формирующий ответы. Здесь вам доведется поработать с маршрутами (routes) и контроллерами (controllers). Они обеспечивают соблюдение ограничений, накладываемых REST - стилем архитектуры программного обеспечения для распределенных систем.
В типичном приложении на Ruby маршрут выглядит так:
Get "/photos/:id", to: "photos#show"
Что в это время происходит в системе:
- Приходит запрос на фото с этим маршрутом и передается контроллеру с помощью метода show .
- Этот метод, обращаясь к ресурсу из базы данных или к другому API, формирует и передает ответ в формате HTML или JSON.
- Клиент (в данном случае браузер компьютера) получает ответ и выводит фото на экран.
Запросы могут приходить из многих источников (их называют клиентами). Чаще всего запросы для веб-приложения формируются в форме ввода браузера. Но, если вы пишете бэкенд для мобильного приложения, то клиент - это API приложения, и он посылает запросы GET, POST, PUT, DELETE из приложения.
5. Формы и состояния
Формы - это самый распространенный способ общения пользователей с приложением. В основном через них пользователи и вводят все данные.
Вам надо создать формы для взаимодействия с бэкендом: если пользователь заказывает билет на концерт, то форма должна выглядеть, как сетка мест:
Когда пользователь начинает взаимодействовать с формой, вам надо сделать следующее:
- Основываясь на правилах приложения, проверить введенную пользователем информацию и показать ошибки или сообщение об успешной проверке.
- Изменить название состояния или формы в зависимости от того, кто и что пытается сделать.
- Разрешить передачу данных, введенных проверенным пользователем с достаточными правами, в бэкенд для обработки.
6. API
Чтобы ваше приложение стало по-настоящему популярным, вам надо начать делиться данными с другими приложениями. Например, вы - музыкальная компания, и вы хотите, чтобы стриминговые сервисы типа SoundCloud поставляли ваш контент, а пользователи могли покупать вашу музыку напрямую из их приложения. Здесь и нужен API.
17. Командная строка
В интерфейсе, доступном пользователю, есть ограниченное количество кнопок, которых недостаточно для полноценного управления приложением на всех уровнях. Но для этого есть командная строка, которая поможет вам добавлять модули в инфраструктуру вашего приложения, тестировать его и выкладывать на удаленный сервер.
Если вы задаетесь вопросом о навыках разработчиков, значит пришло время раскачать себя по полной программе и наконец подтянуть все те навыки и умения, которых прежде просто не хватало. Новые тенденции и технологии веб-разработки настолько быстро изменяются, что проследить за их работой порой просто нереально. И чтобы не потерять свою любимую работу, быть интересным и востребованным специалистом во все века - необходимо идти в ногу со временем и следить за новинками в сфере программирования и создания сайтов, ибо меняются не только сайты и их составляющие, но и запросы тех людей, которые заказывают себе интернет-платформу для бизнеса.
Сфера IT не стоит на месте, развивается постоянно, проекты с каждым днем более сложные, - конструктор, который легко собрать с готовым шаблоном.
Итак, основные функции back end разработчика сводятся к следующим:
- Осуществление задач по проектированию сервиса и архитектуры такового;
- Создание непосредственно ядра сайта;
- разработка в полном объеме платформы, а также ее функционала;
- знание кода, его архитектуры;
- разработка вех приложений, которые осуществляют поддержку интерфейса пользователя, а также безопасность такового;
- осуществление контроля и присмотра за всеми серверами;
- контролирование версий, баз с данными, а также непрерывной интеграции.
Чтобы быть настоящим профи в сфере бэкенд разработки нужно получить образование по специальности, а затем можно продолжить развиваться, посещая компьютерные курсы, проходя онлайн-тренинги и читая дополнительную литературу.
Важно знать и всегда помнить о том, что наличие фундаментального образования – это только основа, и для успешной работы этого будет недостаточно. Настоящий профессионал своего дела изо дня в день учится и развивается в одну ногу с современными тенденциями. Если этого не делать, обязательно придет молодой, успешный и перспективный. Поэтому важная составляющая - самообразование, чтобы знать, что сейчас востребовано, а что нет, какие технологии используются, а какие давно отошли на второй план. Ну и конечно практика и много раз практика!
Большинство современных работодателей, конечно, очень редко смотрят на образование, ибо, если есть желание работать, учиться и развиваться - будет работа и перспективы. А начать своё развитие при должном желании вы можете самостоятельно, благодаря нашему .
Эдуард Гурский, Technical Lead в команде Internal Development
Какими знаниями и навыками должен обладать бэкенд-веб-разработчик?
Бэкенд-веб-разработчик – это, по сути, человек, разрабатывающий серверную логику и осознающий, в каком контексте она будет исполняться – в контексте веб-приложений. Если бэкенд-веб-приложения реализуются на языке Java, а в большинстве случаев это так, то, по сути, к такому специалисту применимы все те же требования по знаниям и навыкам, что и к обычному Java-разработчику: знание языка, понимание работы и устройства основных библиотечных компонент Java SDK и т.д. Однако еще добавляются опыт работы с различными веб-фреймворками (упрощающими реализацию dependency injection, mvc и т.д.), умение оценивать и улучшать производительность приложения, его масштабируемость. Необходимо учитывать и понимать, насколько быстро пользователь приложения получит результат выполнения серверного кода, а также насколько безопасно и рационально ту или иную серверную функциональность делать доступной через браузер пользователя.
Почти любое веб-приложение использует какое-то хранилище данных. Поэтому человек, занимающийся разработкой серверной логики, должен иметь навыки работы с базами данных, а также опыт использования механизмов ORM .
Часто бэкенд-веб-приложение требует интеграции со сторонними сервисами или экспорт своей функциональности в виде внешнего API. Разработчик должен понимать, как реализуются такие задачи, какие протоколы и механизмы используются для этого.
Несмотря на то что такой человек в основном занимается разработкой серверной логики приложения, возникает необходимость отладки или прототипирования с использованием клиентской части приложения. Отсюда вытекает необходимость понимания работы стека протоколов TCP/IP, HTTP, принципов взаимодействия браузера с веб-приложением, базовые знания о верстке, CSS-стилях, JavaScript-возможностях.
Каков инструментарий бэкенд-веб-разработчика?
Обычно это IDE для разработки. Также временами требуется использовать профилировщик для решения задач производительности, чрезмерного потребления ресурсов и др. В нашей команде мы используем .
Каковы требования компании к уровню образования потенциальных сотрудников?
Мы не предъявляем никаких формальных требований к уровню образования кандидатов. Важнее опыт, понимание и интеллект, ну и, конечно, мотивация человека.
Какие требования предъявляются к опыту работы?
Любой опыт разработки production веб-приложений, конечно, является плюсом. Знания и навыки, описанные выше, не могут присутствовать у специалиста при отсутствии соответствующего опыта. На собеседованиях мы обычно интересуемся деталями участия в различных проектах, указанных в резюме, чтобы оценить опыт, который мог приобрести кандидат, реализуя такие задачи. Специалист, пробовавший различные подходы и технологии для решения схожих задач при разработке веб-приложений, умеющий анализировать плюсы и минусы каждого подхода, является весьма интересным кандидатом.
Есть ли особые требования, которые обусловлены спецификой деятельности компании?
Приветствуется опыт разработки приложений с использованием продуктов JetBrains. Мы все в компании стараемся пользоваться своими продуктами, потому что они удобные и потому что мы хотим сделать их еще удобнее!
Также в последнее время мы практикуем разработку веб-приложений на языке Kotlin . Это дает ряд существенных преимуществ, а также делает процесс написания кода на нем более приятным занятием. Приветствуется желание кандидата изучать новые языки и новые подходы реализации веб-приложений.