Бэкенд-разработчик: какие знания нужны для трудоустройства

Есть 4 типа знаний.

  • Известные знания  —  то, что вы знаете, и вы знаете, что вы это знаете (например, как складывать цифры и как говорить по-русски).
  • Неосознаваемые знания  —  то, что вы знаете, но воспринимаете как должное и можете забыть (например, как печь хлеб и как играть на фортепиано).
  • Известные неизвестные знания  —  то, чего вы не знаете, но знаете, что это существует и что вы могли бы это изучить (например, боевые искусства и итальянский язык).
  • Неизвестные неизвестные знания  —  вещи, которые вы не знаете и даже не подозреваете об их существовании (например, искусство филателии и вычислительная гидродинамика).

При изучении программирования и поиске вакансий разработчика один из самых трудных моментов  —  выявить дважды неизвестные знания, то есть вещи, которые вы не знаете и даже не подозреваете об их существовании!

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

Основы

Каковы же основы веб-разработки?

1. Как работает интернет

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

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

Вы должны понимать основы HTTP, DNS и TCP/IP, знать, что такое клиент-сервер/запрос-ответ, и разбираться в том, как это все работает для обеспечения пользователям доступа к сайту.

2. Основы вычислительной техники

Важно не только знать принципы работы интернета, но и понимать, как устроен компьютер. Вот некоторые понятия, с которыми вам предстоит ознакомиться (но не обязательно знать на экспертном уровне).

  • Процессор, оперативная память и жесткий диск.
  • Операционные системы и основы использования терминалов.
  • Процессы, потоки и параллелизм.
  • Вычисления, связанные с вводом-выводом, а также с центральным процессором.
  • Сложность алгоритмов.

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

3. Основы работы веб-страниц

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

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

Вам понадобится овладеть 3 языками:

  • HTML;
  • CSS (достаточно иметь представление о CSS-подходах);
  • JavaScript (базовых знаний “ванильного” JavaScript вполне хватит).

4. Выберите язык бэкенда

Наконец-то мы подошли к написанию кода!

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

Итак, какой же язык стоит изучать?

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

Если хотите стать бэкенд-разработчиком, выбирайте Python или JavaScript.

Это современные языки, которые стремительно развиваются. Большинство новых стартапов сегодня строят свои проекты с их помощью. Python подходит для приложений, работающих с большими объемами данных. JavaScript популярен в пользовательских приложениях.

Также достойны упоминания следующие языки:

  • Go (быстроразвивающийся язык от Google);
  • Ruby (популярен в веб-разработке последние 15 лет);
  • Java (старый язык для корпоративных целей);
  • C# (корпоративный язык экосистемы Microsoft).

Навыки разработчика

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

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

1. Фреймворки

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

Для JavaScript используется Express (и, соответственно, NodeJS). А для Python  —  Django и/или Flask. Эти фреймворки следует изучить, поскольку они будут лежать в основе работы бэкенд-разработчика.

2. Основы работы с базами данных

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

В настоящее время технологии баз данных строятся по одной из двух общепринятых парадигм.

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

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

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

3. Как работают API: создание и применение

Большая часть современного интернета работает на основе интерфейсов прикладного программирования (API).

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

Вы должны знать основы API, как их использовать и создавать. В особенности REST API, использующие JSON,  —  это самая популярная опция.

Как бэкенд-разработчик, вы наверняка столкнетесь и с другими форматами, такими как SOAP API с использованием XML и GraphQL API. Знать все особенности этих разновидностей не обязательно, но полезно.

4. Кэширование

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

  • хранилища памяти, например Redis и Memcached;
  • сети распространения контента (CDN);
  • кэширование на стороне клиента, например кэш браузера, куки, локальное/сессионное хранилище.

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

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

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

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

Вы должны быть знакомы с различными видами тестирования:

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

Специализированные навыки

Бэкенд-разработчику также нужны навыки работы с другими технологиями, которые пригодятся при соискании вакансии веб-разработчика.

1. Контроль версий/Git

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

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

2. Использование терминала и SSH

Бэкенд-разработчик должен владеть терминалом. Выберите систему Windows или Unix, а затем изучите распространенные команды терминала.

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

Разработчиков бэкенда могут попросить подключиться по SSH к удаленным компьютерам (например, если речь идет о CI/CD-средах или промежуточных серверах) для отладки проблем. Поэтому базовые навыки работы с терминалом просто необходимы..

Изучите также псевдонимы команд  —  они помогут сэкономить много времени.

3. CI/CD

Непрерывная интеграция и непрерывное развертывание  —  это процессы, применяемые наиболее продуктивными командами разработчиков программного обеспечения.

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

Бэкенд-разработчик должен быть знаком с CI/CD и тем, как эта комбинация выполняет проверку нового кода. В некоторых случаях вам может понадобиться помощь при обновлении, поддержке или изменении рабочих процессов CI/CD. Чтобы устроиться на первую работу, будет достаточно полного понимания функционирования CI/CD. Если хотите “блеснуть” дополнительными навыками, научитесь настраивать CircleCI и Travis, чтобы автоматизировать запуск тестов для одного из проектов в вашем портфолио.

4. Контейнеризация/Docker

Одним из наиболее важных трендов в области разработки программного обеспечения в последние годы является контейнеризация.

С помощью ПО для контейнеризации, такого как Docker, можно определить:

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

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

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

Бэкенд-разработчики в большинстве организаций знают о контейнеризации и основах ПО Docker (как запускать/останавливать/перезапускать контейнеры). Вас также могут попросить внести изменения в Dockerfile и docker-compose.yml, поэтому стоит потратить время на изучение основ этой программы.

5. IDE/модульные редакторы

Разработчики тратят много времени на набор текста. На последнем месте работы за 2,5 года я создал в общей сложности 283 тысячи строк кода.

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

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

Что касается меня, то я предпочитаю меньше “наворотов” и более надежный контроль над работой редактора. Именно поэтому я использую Vim, модульный редактор, который обладает высокой кривой обучаемости, но делает редактирование текста достаточно быстрым.

Если вы готовы к трудностям, думаю, что изучение Vim того стоит. Также стоит подумать об использовании Unix в качестве IDE.

Подходы к работе с ПО

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

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

1. Принципы проектирования

Разработчики ПО используют несколько аббревиатур, обозначающих принципы, связанные с кодом.

  • DRY  —  Не повторяйтесь.
  • YAGNI  —  Вам это не понадобится.
  • KISS  —  Keep it simple stupid (“Не усложняй, тупица!”).
  • SOLID  —  этот акроним сложнее расшифровать. Наберите в Google “solid software” и вы найдете то, что нужно.
  • Gang of Four (GoF)  —  целая книга общих шаблонов кода для решения различных реальных задач.

2. Архитектурные шаблоны

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

  • монолит;
  • сервис-ориентированный;
  • микросервис;
  • бессерверный.

3. Наблюдаемость и мониторинг

Разработчикам нужно понимать, когда приложение “ломается”. Производственные приложения должны каким-то образом генерировать с помощью ошибок предупреждения для инженерной команды.

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

Начинающему разработчику следует знать основы логгинга и обработки исключений. Вы также должны быть хотя бы поверхностно знакомы с некоторыми из наиболее популярных инструментов для мониторинга, такими как Datadog, New Relic, Dynatrace и Sentry.

4. Масштабирование

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

Вот основные понятия и стратегии масштабирования, которые должен знать начинающий бэкенд-разработчик:

  • горизонтальное и вертикальное масштабирование;
  • фоновые задачи (воркеры);
  • балансировка нагрузки;
  • кэширование read-through и write-through;
  • базы данных для писателей/читателей и реплики чтения;
  • разбиение/шардирование баз данных.

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

Понимание основных принципов веб-безопасности также крайне важно для бэкенд-инженера.

К счастью, большинство фреймворков обеспечивают безопасность по умолчанию, поэтому вам не нужно глубоко вникать в криптографию, SQL-инъекции и CORS/CSRF-атаки. Однако вы все равно должны знать о существовании этих уязвимостей и о наиболее эффективных методах их предотвращения.

Если хотите получить представление о лучших стандартах веб-безопасности, ознакомьтесь с OWASP (проектом по обеспечению безопасности открытых веб-приложений).

Нетехнические (личные) качества

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

Вывод

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

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

Но теперь, когда у вас есть дорожная карта, вы знаете, что вы знаете (и чего не знаете). Если вы внимательно изучить все разделы этой статьи, обещаю, что вы будете готовы к работе уже на этапе собеседования!

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи Bennett Garner: What you need to know to get a job as a backend developer

Предыдущая статьяТоп-7 библиотек React
Следующая статьяДобавление личного домена в AWS WebSocket