Что нужно знать начинающему бэкенд-разработчику, кроме языка программирования

Что такое backend?

Бэкенд (англ. back-end) — это программно-аппаратная часть сервиса. Это набор средств, с помощью которых происходит реализация логики веб-сайта. Это то, что скрыто от наших глаз, т. е. происходит вне компьютера и браузера.

Как только вы введёте запрос на странице поисковика и нажмёте клавишу «Ввод», frontend закончится и начнётся backend. Ваш запрос отправится на сервер Яндекса или Google, т. е. по месту расположения алгоритмов поиска. Именно там и происходит вся «магия». Но вот, на мониторе появляются данные, которые вы запрашивали, — это происходит возвращение во frontend.

Также можно сказать, что backend — это процесс объединения пользователя с сервером.

Что касается backend-разработчика, то он использует любые инструменты, которые доступны на его сервере. На практике программисты применяют любой из универсальных языков: PHP, Ruby, Python, Java. Кроме того, при backend-разработке задействуются СУБД (MySQL, PostgreSQL, SQLite, MongoDB и пр.).

В зависимости от особенностей продукта меняются и обязанности backend-разработчика.

Плюсы и минусы профессии

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

Минусы:
непростое обучение;
высокий порог входа: требуется многое знать и уметь;
для получения хорошей должности требуется опыт и серьезное портфолио;
требования к программисту сильно отличаются от компании к компании;
обязательное знание английского;
нет единой концепции при обучении и общего стандарта набора навыков;
для перехода с уровня на уровень требуется не менее 2-3 лет, здесь не возможно быстро построить карьеру и за 5 лет стать ведущим специалистом.

Как стать frontend-разработчиком? Что нужно знать и уметь?

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

  1. Освоить HTML и CSS. HTML – это язык разметки веб-документов. CSS – каскадные таблицы стилей. Они управляют оформлением различных элементов на страницах (например, размером шрифтов).
  2. Изучить JavaScript – основной язык, который нужно знать frontend-программисту. Существуют различные библиотеки готовых скриптов, написанных на JavaScript. Их тоже лучше изучить, чтобы пользоваться ими и ускорять свою работу. Пример такой библиотеки – jQuery.
  3. Изучить методологию верстки, например, БЭМ от Яндекса. Методология помогает создавать веб-приложения по определенным принципам, которые помогают разбираться в чужом коде и в своем тоже по прошествии какого-то времени.
  4. Изучить фреймворки, в частности, Bootstrap. Фреймворк – это набор неких готовых решений, на базе которых можно создавать веб-сайты быстрее, чем при написании кода с нуля.
  5. Освоить кроссбраузерную верстку и научиться создавать страницы, которые одинаково выглядят в разных браузерах.
  6. Изучить адаптивный дизайн, т.е. дизайн, который подстраивается под размеры экрана пользователя. Таким образом сайт приемлемо выглядит на разных устройствах (компьютер, планшет, смартфон).
  7. Не лишним будет освоить языки серверного программирования на базовом уровне. Например, язык PHP – один из самых популярных в среде веб.
  8. Изучить Git и научиться работать с системами контроля версий.

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

Лучшие книги и средства обучения

  • Базовая книга по вашему языку программирования — мне нравятся издания O’Reilly, многие переведены издательством «Питер». 
  • Аналогично базовые книги по вашему стеку. 
  • Кукбуки (cookbook) по языкам и рекомендации корпораций, статьи в блогах и т.д.
  • Бек Кент, Экстремальное программирование. Разработка через тестирование — отличная книга для любого разработчика в принципе, но особенно для бэкендера. Проникнуться философией TDD дорого стоит.
  • Джоэл Х. Спольски — можно читать его блог, можно ещё на просторах Рунета найти электронную книгу «Джоэл о программировании» — сборник постов из блога на русском.
  • Роберт Мартин «Идеальный программист», «Чистый код» — переводная книга от «Питера» хороша, но в оригинале стиль и шутки вообще бесподобны.
  • Мартин Фаулер и коллектив авторов «Шаблоны корпоративных приложений» — «взрослая» книга для джавистов, но не помешает ни для одного серверного языка как сборник инсайтов и крутых находок.
  • Бесплатные курсы и видео, которых бесконечно много на Youtube на русском и английском языках. Просто слушайте, повторяйте, систематизируйте знания. Для начала подойдут любые, очень скоро вы научитесь отличать крутые вещи от дилетантских. 
  • webref.ru — очень классный сайт для разработчиков веба, разбирайтесь, обучайтесь. 
  • codecademy.com — интерактивный сайт для обучения разработке на разных языках программирования на английском, с самого низкого, нулевого, уровня. 
  • ITc | сообщество программистов — вагон организованной информации с курсами, лекциями и чем угодно. Читайте комментарии, легко определяйте лучшее для обучения.
  • Библиотека программиста — куча книг по любой айти-тематике.

Кто такой backend-разработчик

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

Еще они отвечают за:

  • корректное функционирование сайта;
  • организацию и работу с базами данных;
  • обработку пользовательской информации;
  • безопасное хранение личных данных;
  • разработку алгоритмов работы веб-ресурса;
  • взаимодействие с внешними сервисами;
  • оптимизацию кода.

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

Более 100 крутых уроков, тестов и тренажеров для развития мозга

Начать развиваться

Если вы видите на экране подобное сообщение или какой-то бессмысленный набор букв и цифр, то произошел сбой и за это отвечает backend-developer.

Чем отличается от frontend-разработчика

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

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

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

Может, труд бэкенд-разработчика и незаметен, но без него будет бесполезна и работа фронтенд-специалиста – ничего попросту не будет функционировать.

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

Чем занимаются фулстек-разработчики

Фулстек-разработчик — это специалист, который сочетает в себе навыки фронтендера и бэкендера. Он может разрабатывать как клиентское, так и серверное ПО. 

Клиентом в программировании называют систему, которая отправляет запросы на выполнение каких-то процедур, получает ответы и отдаёт результат пользователю. Сервер же выполняет процедуры в ответ на запросы пользователя и передаёт на клиент результат выполнения этих процедур. В веб-контексте клиентом чаще всего выступает браузер, а сервер — это веб-сервер (машина и набор программ в облаке). 

В разрезе веб-разработки клиентское ПО — это те программы, которые выполняются в браузере. Например, браузер рисует весь интерфейс, реализует его анимацию, отправляет какие-то данные на сервер. Серверное ПО — это те программы, которые выполняются на сервере. Например, сервер может отфильтровать данные миллионов пользователей Яндекса по году рождения и отправить клиенту только рожденных в 1990 году.

Фулстек-разработчик может создать графический интерфейс, запрограммировать всю необходимую логику, выполняемую на сервере, а потом построить связь между этими двумя частями, чтобы получить единое приложение. Помимо работы с HTML и CSS он также знает, как писать программы, которые исполнит браузер, — и то, как запрограммировать сервер. Фулстек может сам создать форму регистрации и дописать к этой задаче весь серверный код, который проверит, не был ли зарегистрирован такой пользователь ранее. Если человек уже есть в базе, то сервер отправит сообщение об ошибке в браузер, если нет — сохранит данные в базу данных, а браузеру отправит ответ об успешной регистрации пользователя.

Кто это?

  • обеспечение корректной работы всех функций сайта и его вычислительной логики;
  • организация и работа с базами данных посредством СУБД;
  • разработка базовой логики и алгоритмов работы приложения;
  • API;
  • необходимые интеграции с внешними сервисами;
  • тестирование и отладка приложения и отдельных компонентов.

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

Full-stack-разработчик

По данным «Мой круг» full-stack и back-end разработчики в 2018 году получают до 140 тысяч рублей. Front-end – до 125 тысяч.

Может ли один и тот же человек заниматься и фронтенд, и бэкенд разработкой? Если он разбирается и в том, и в другом – почему нет: такой разработчик называется Full Stack.

Он умеет решать любые задачи по разработке веб-сервисов и сайтов: знает серверные языки, JavaScript, HTML и CSS, может оптимизировать сайт под поисковики и превратить сделанный в Photoshop макет дизайна в рабочий интерфейсный код (вы же помните, что интерфейс сайта рисует дизайнер, но на самом сайте всё будет описано кодом?).

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

Это, кстати, очень важно: многие front-end и back-end разработчики просто не понимают друг друга и ставят невыполнимые задачи, а full-stack специалист как раз может стать связующим звеном

Учиться сразу на fullstack нет смысла: обычно программист сперва осваивает одну часть работы – frontend или backend – и уже потом добавляет к багажу знаний навыки по смежному направлению.

Inner source. Assess

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

Inner Source — это как Open Source, только внутри компании, который позволяет уменьшить зависимость от смежных команд разработки, что должно привести к ускорению выполнения задач.

Разберем на примере. Допустим, у вас есть две команды и первая команда хочет доработку от второй. Команда 1 приходит к команде 2, добавляет свою задачу в очередь бэклога и получает блокирующую зависимость в исполнении своего проекта. В случае с Inner Source все репозитории открыты внутрь компании. В таком подходе команда 1 может сделать pull request в целевую систему, а владелец системы — команда 2 — эти изменения проверит и вольет в основную ветку. Выходит, что первая команда получит свою доработку быстрее за счет использования собственного ресурса, чем если бы ждала, своей очереди в бэклоге другой команды.

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

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

Подробней ознакомиться с Inner Source можно на сайте комьюнити Inner Source.

Карьерный рост и зарплата

Карьера бэкенд-разработчика начинается со ступени “стажер”. Средняя заработная плата – 20–40 тыс. руб.

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

Он работает под началом своих старших коллег и перенимает у них опыт. Зарабатывает от 30 до 60 тыс. руб.

Средний специалист на продвинутом уровне разбирается в языках программирования. Активно использует фреймворки и начинает самостоятельно выполняет задачи на проекте. Зарплата колеблется в районе 70–120 тыс. руб.

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

Проектирует и решает сложные задачи, работает в проектах крупного масштаба. Часто консультирует других программистов.

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

Цена за его работу начинается от 150 тыс. и может удваиваться, а в некоторых случаях – утраиваться.

После карьеры бэкенд-разработчика можно осваивать новую вершину – должность фулстек-разработчика – специалиста, совмещающего в себе frontend и backend-программиста.

Если говорить о зарплатах в городах, то выстраивается такая картина:

  1. Москва: 80 000–300 000 руб.
  2. Санкт-Петербург: 70 000–250 000 руб.
  3. Калининград: 40 000–170 000 руб.
  4. Ростов-на-Дону: 30 000–220 000 руб.
  5. Омск: 40 000–150 000 руб.
  6. Хабаровск: 60 000–160 000 руб.

Все цифры – это средние значения. Все зависит от навыков программирования, общих тематических знаний, опыта и личностных характеристик.

Что нужно уметь

Если вы откроете вакансию любого бэкенд-разработчика, то там будут примерно следующие требования:

  • знание Python, PHP, Ruby или Java (если всё сразу — это огромный плюс);
  • часто хотят, чтобы вы знали JavaScript и Node.js, чтобы реализовывать часть логики на клиенте;
  • AJAX — помогает обновлять данные на странице без её перезагрузки;
  • базы данных — MySQL, PostgreSQL или MongoDB;
  • Django и другие фреймворки для быстрой разработки;
  • умение работать с API;
  • владение Git или любым инструментом контроля версий.

Отдельно ценится умение работать в UNIX-системах, разбираться в том, как устроены сетевые технологии и владение сетевыми протоколами. Но на самом старте можно и без этого.

Где найти backend программиста на проект?

  • В интернете есть много профильных ИТ-сайтов, на которых можно бесплатно разместить объявление о поиске разработчика.
  • Посмотрите каталог веб-программистов. При помощи фильтров в каталоге можно найти разработчиков, владеющих нужными вам технологиями.
  • Добавьте проект на биржу для программистов. Добавление вакансий на ней – бесплатное.

Рекомендуем

Профессия менеджер по персоналу (HR-менеджер)

По прогнозам экспертов, востребованность профессии будет только расти. HR-менеджеры – это специалисты по управлению персоналом компании. Они …

Профессия репетитор

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

Где учиться на бэкенд-разработчика

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

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

Frontend-разработчик

Front-end – «лицевая» часть сайта: всё, что видит пользователь. Меню, текст, картинки, раздражающие (или, если сделано хорошо, не раздражающие) рекламные баннеры – всем этим занимается frontend-разработчик. В разработке дизайна он тоже участвует: «рисует» всё, конечно, веб-дизайнер, но контролирует его работу именно фронтенд.

Задачи frontend-разработчика

  • Придумать и сделать удобный и понятный интерфейс сайта;
  • Сделать так, чтобы сайт понравился и пользователям, и владельцу. Например, владелец захочет разместить рекламу – фронтенд должен поставить её так, чтобы баннер было видно, но он никому не мешал;
  • Добиться того, чтобы сайт одинаково выглядел и на компьютере, и на смартфоне независимо от браузера и размера экрана.

Три основных инструмента  frontend-разработчика: HTML, CSS, JavaScript.

Machine learning in Frontend. Trial

ML может применяться в задачах разработки веб-интерфейсов. Благодаря библиотеке Tensorflow, которая является одной из популярных библиотек для ML и имеет версию для Node.js и браузера, мы получаем возможность машинного обучения на известном стеке. Здесь JavaScript подтверждает свою универсальность.

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

Одна из наших команд экспериментировала и сделала сервис, предсказывающий вероятность посещения следующей страницы. Затем интегрировала этот сервис в стратегию предзагрузки одного из проектов — теперь в некоторых случаях пользователь при переходе на следующую страницу увидит ее моментально, без ожидания загрузки. Мы разработали свое решение на базе Tensorflow.js. Конкретно для этой задачи существует open-source-решение от Google — Guess.js, которое на основе данных из Google Analytics делает похожее. Советуем попробовать.

Еще из примеров использования ML в задачах фронтенда можно выделить анализ кода для выявления дубликатов, анализ верстки на соответствие гайдлайнам и даже возможность поправлять ее, распознавать документы в браузере, не передавая их по сети, генерировать пользователям индивидуально подстроенный интерфейс, повышать accessibility — допустим, голосовым управлением.

Немного практики с сессионными токенами и защита от CSRF

Сессионные токены — лакомый кусочек для злоумышленников. Это очень важные данные, сродни паре «логин-пароль». Можно использовать различные схемы защиты этих токенов, предлагаю рассмотреть одну из них.

Для начала сделаем такой токен доступа, у которого будет небольшой срок жизни. Тогда злоумышленник, предпринимающий атаку на похищение токена, может не успеть им воспользоваться даже в случае кражи. Однако если сделать период действия слишком коротким, обычному пользователю будет неудобно: перелогиниваться каждые 10 минут — то ещё удовольствие. Поэтому токены можно разделить на 2 вида: токен доступа (access_token) и токен обновления (refresh_token). С помощью access_token пользователь получает доступ к ресурсам API, а с помощью refresh_token пользователь запрашивает у API новый access_token. В чем же смысл? Злоумышленник ведь может украсть refresh_token и с помощью него получить действительный access_token. Для того, чтобы разобраться в этом, давайте рассмотрим небольшую модель с REST API.

Пусть эндпоинт аутентификации POST /auth имеет следующий вид:

Запрос Ответ
Body

Пользователь вводит свой логин и пароль, в теле ответа получает access_token. Фронтенд-приложение этот токен запоминает и далее может делать авторизованные xhr-запросы, например GET /user

Запрос Ответ
Body
Headers

Время жизни access_token, предположим, 10 минут, значит, через 10 минут пользователю придется перелогиниться для продолжения работы в приложении. Чтобы пользователя «не выбрасывало», нужен refresh_token, время жизни которого существенно выше, например, сутки. Тут встаёт вопрос, где же хранить эти токены со стороны браузерного клиента, ведь очевидно, что хранить их вместе не стоит. Рассматривать будем только 2 вида хранилища: localStorage, способное держать информацию в рамках одного источника одностраничного приложения, и httpOnly Cookie, привязанное к конкретному домену бэкенда

Session storage привязан к конкретной вкладке, поэтому не подходит, а обычные Cookie слишком небезопасны.
Важно понимать, что refresh token нужен только пользователям веб-страницы, а пользователи, обращающиеся к API со своих серверов, могут сами обновлять access_token при помощи логина и пароля

Приложение на другом сервере, обращающееся к нашему API, не использует Cookie для общения. Ему необходимо добавлять access_token в заголовок запроса для подтверждения авторизации. Фронтенду тоже нужен доступ к access_token для добавления этого заголовка. Поэтому использование localStorage в качестве хранилища access_token — неплохой путь с учётом небольшого времени жизни и принятых мер по защите от XSS. А в качестве хранилища для refresh_token стоит использовать httpOnly cookie. Тогда в бэкенде нужно сделать так, чтобы на запрос авторизации POST /token/auth он формировал ответ с соответствующим заголовком Set-cookie.

Запрос Ответ
Body
Headers

Мы помним, что любые cookies уязвимы к CSRF-атакам. Необходимо защитить refresh_token от CSRF атак дополнительно CSRF-токеном. Что? Ещё один токен? А его где хранить? Дополнительный токен не нужен, с задачей хорошо справится access_token. Используем его для проверки, что запрос POST /refresh выполнен санкционировано от авторизованного пользователя.

В эндпоинте POST /token/refresh используем для проверки сразу 2 токена: старый access_token взятый из localStorage и refresh_token взятый из httpOnly cookie при помощи заголовка cookie

Запрос Ответ
Body
Headers

Со стороны бэкенда проверка access_token из заголовка X-CSRF-Token должна пропускать случай, если этот токен уже просрочен, но не так давно (~ время жизни refresh_token).
Важно знать, что если мы работаем в рамках политики CORS, то при совершении XHR-запроса с участием cookie нужно проводить такой запрос со специальным флагом withCredentials: true для XMLHttpRequest и credentials: ‘include’ для fetch. Без этого флага браузер запретит использовать cookie, в том числе и httpOnly, серверу с доменом, отличным от домена источника

Таким образом, храня access_token и refresh_token в разных хранилищах, используя доступные средства защиты от XSS и CSRF-атак, мы сделаем наше приложение безопаснее.

ПРЕИМУЩЕСТВА ПЛАТНЫХ КУРСОВ

Для самостоятельной учебы профессия очень сложная. Придется долго и кропотливо учиться, это займет много времени. В изучении дисциплин помогут различные учебники, статьи на специализированных ресурсах, видеоролики, размещенные в открытом доступе. Однако из-за охвата различных областей могут возникнуть пробелы в знаниях, которые будут иметь решающее значение при работе в проекте. Также не будет обратной связи от наставника, анализа ошибок и рассказов о том, почему нужно делать именно так, а не иначе. Лучший способ погрузиться в профессию — это сочетание самообразования и курсов для обучения. Курсы имеют ряд преимуществ:

  1. Структурированная информация. Все материалы расположены по темам, создавая единую схему от начала обучения до конца. Вы видите прогресс, вы чувствуете, что уровень знаний растет.
  2. Обратная связь. Наставник ответит на все вопросы, поэтому вы сможете прояснить для себя любые нюансы гораздо быстрее, чем гуглить и переключаться с одной ссылки на другую. Кроме того, у него уже есть практический опыт, и вы можете получить ответ, основанный не только на теории из учебников.
  3. Профессиональная ценность. После платных курсов вы получите сертификат, с помощью которого сможете устроиться на работу. Вы повысите свою ценность как специалиста, пройдя курсы повышения квалификации.

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

Менеджер зависимостей

Долго писать не буду, а сразу скажу, что это без сомнений Glide. Если вы работали с gradle или maven, то вам наверняка знакома парадигма объявлений зависимостей в неком файле с последующим их задействованием по необходимости. Так вот Glide — это хомячий Gradle, с решением конфликтов и прочими плюшками.

Кстати, если у вас возникнут проблемы при тестировании, когда go test лезет в папку vendor, жадно тестируя каждую либу, то проблема решается элементарно:

Этот параметр исключает папку vendor из тестирования. В сам репозиторий достаточно положить glide.yaml и glide.lock файлы.

Мобильной разработке это все никак не поможет, но просто, чтобы вы знали)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *