Веб-разработка сегодня разительно отличается от того, что было пару лет назад, а обилие новых техник сбивает с толку новичков в программировании. Это и послужило основой для создания пошагового и наглядного руководства разработчика, которое дает четкое представление об определенных аспектах веб-разработки.
Не так давно был опубликован материал о современном фронтенд-разработчике 2018 , в котором мы обещали выпустить дорожные карты по бэкенду и оптимизации разработки. Мы держим свое обещание, поэтому данная статья будет посвящена современной бэкенд-разработке..
До сегодняшнего дня дорожная карта по бэкенду представляла собой просто свод технических рекомендаций без четкого указания способов их применения. Мы переработали данные материалы и создали пошаговое руководство для облегчения понимания всего процесса.
Без лишних предисловий давайте перейдем сразу к делу.
Информация будет разбита на отдельные части и добавлено детальное описание каждого шага.
Перед тем, как начинать изучение бэкенда, у вас должно быть хотя бы минимальное понимание того, как реализуются базовые вещи на HTML/CSS (этот шаг не указан в таблице выше).
Картинка для привлечения внимания — листайте дальше
Шаг 1— Изучение языка
Существует великое множество языков программирования — вам остается только выбрать наиболее подходящий вариант. Чтобы упросить эту задачу, я разбил языки на подкатегории.
Языки сценариев: Python, Ruby, PHP, Node.js, TypeScript (дополнительно).
Функциональные языки: Elixir, Scala, Erlang, Clojure, Haskell.
Мультипарадигменные языки: Goland, Rust.
Корпоративные решения: Java, .NET
Новичкам в бэкенде я бы посоветовал начинать со сценарных языков, т.к. они строго регламентированы правилами, поэтому научиться им можно намного быстрее. Если вы немного понимаете во фронтенде, то, легче всего вам будет освоить Node.js. Кроме того, этот язык хорошо котируется на биржах разработчиков.
Если вы можете похвастаться опытом в бэкенд-разработке и знаете хоть какие-то сценарные языки, то мой вам совет: не зацикливайтесь на скриптах и переходите к языкам из раздела «функциональные» или «мультипарадигматические». Например, если вы уже работали в PHP или Node.js, то не переходите к Python или Ruby, а попробуйте Erlang или Golang. Так вы разовьете гибкость мышления и станете более открытыми новому опыту.
Шаг 2 — Используйте свои знания на практике
Самый лучший способ научиться чему-либо — это практика. Как только вы определитесь с выбором языка и разберетесь в общих принципах его построения, то сразу переходите к практике. Постарайтесь написать как можно больше простых приложений. Вот парочка идей для начала:
· Реализуйте ряд команд, которыми пользуетесь в bash (например, функционал ls);
· Напишите команду, которая отбирает и сохраняет reddit посты в /r/programming в формате JSON-файла;
· Напишите команду, которая выдает структуру каталога в формате JSON (например, с помощью jsonify dir-name вы получите JSON-файл со структурой внутри dir-name)
· Напишите команду, которая читает JSON-файл из примера выше и создает структуру каталога.
· Проанализируйте свои ежедневные задачи и постарайтесь автоматизировать как минимум одну из них.
Шаг 3 — Изучите менеджер пакетов
Как только вы освоили азы языка программирования и написали пару простых приложений, смело переходите к изучению менеджера пакетов выбранного вами языка программирования. Менеджер пакетов позволяет использовать внешние библиотеки в приложениях и открывать ваши библиотеки другим пользователям.
Если ваш выбор пал на PHP, то изучите Composer, для Node.js — присмотритесь к NPM или Yarn, для Python — Pip, а для Ruby — RubyGems. Вне зависимости от вашего выбора, обязательно научитесь правильно работе с нужным менеджером пакетов.
Шаг 4 — Стандарты и полезные рекомендации
В каждом языке есть свои стандарты и ноу-хау. Изучите их для выбранного языка. Например, в PHP имеется PHP-FIG и PSR, а для Node.js разные сообщества создали множество полезных руководств. Тоже самое придумано и для других языков программирования.
Шаг 5 — Безопасность
Обязательно проштудируйте информацию о безопасности. Почитайте рекомендации OWASP, разберитесь в различных проблемах с безопасностью и методах их решения для выбранного вами языка программирования.
Шаг 6 — Практика
К этому моменту вы уже изучили основы языка, его стандарты и примеры использования, вопросы безопасности и нюансы работы с менеджером пакетов. Самое время перейти к созданию пакета и передаче его другим пользователям для работы. Например, если вы выбрали PHP, то создавать пакеты будете на Packagist, в Node.js будете пользоваться пакетным менеджером Npm и т.д.
Как только это сделано, поищите похожие проекты на Github, отправьте пару запросов на включение. Вот несколько идей, которые могут помочь:
· Рефакторинг и реализация лучших идей, которым вы научились;
· Изучите существующие проблемы и постарайтесь решить какую-либо из них;
· Добавьте новый функционал.
Шаг 7 — Познакомьтесь с тестированием
Тестирование делится на несколько типов. Разберитесь в каждом их них, изучите его назначение. Для начала научитесь создавать модульные и интеграционные тесты. Разберитесь в специальной терминологии: пустышки, заглушки и т.д.
Погуглите различные приложения для тестирования, выберите наиболее подходящее
PHP — PHPUnit, PHPSpec, Codeception;
Node.js — Mocha, Chal, Sinon, Mockery, Ava, Jasmine.
Дабы не разжигать войны в комментариях, я не буду давать личных рекомендаций. Так что поищите в интернете и выберите самостоятельно.
Шаг 8 — Практический этап
Напишите пару модульных тестов для решения практических задач. В идеале, не основании примера из шага 6.
Почитайте про метрики тестирования и рассчитайте тестовое покрытие для написанных модулей.
Шаг 9 — Познакомьтесь с реляционными базами данных
Научитесь управлять данными в реляционной базе данных. Для начала выберите интересную вам разновидность, изучите профильную терминологию баз данных: ключи, индексы, нормализация, кортежи и т.д.
Существует несколько разных баз данных. Однако, если вы освоите одну из них, то остальные дадутся вам намного легче. Присмотритесь к MySQL, MariaDB (в принципе, это почти одно и тоже. Maria DB — это ответвление MySQL) и PostgreSQL. Начинать лучше с MySQL.
Шаг 10 — Практика
Самое время попробовать на практике все, что было изучено ранее.
Создайте простое приложение, используя все полученные знания. Тематика — совершенно не важна. Как вариант — простое приложение для ведения блога с реализацией следующих функций:
· Профили пользователей: регистрация, авторизация;
· Зарегистрированный пользователь может создавать посты в блоге;
· Пользователь может просматривать все свои посты в блоге;
· Пользователь может удалять все свои посты в блоге;
· Убедитесь в том, что пользователь видит только свои посты, а не записи, созданные другими пользователями;
· Напишите модульные и интеграционные тесты для приложения;
· Вы должны использовать индексы для запросов. Проанализируйте запросы и удостоверьтесь, что для них прописаны индексы.
Шаг 11 — Освойте фреймворки
В зависимости от проекта и выбранного языка программирования вам может потребоваться фреймворк. Для каждого языка создано множество фреймворков. Вам лишь нужно найти подходящие варианты и выбрать самый подходящий.
Если вы пишите на PHP, то я бы советовал присмотреться к Laravel или Symfony, а также микрофреймворками (Lumen или Slim). Для Node.js также написано много фреймворков, однако самым популярным остается Express.js
Шаг 12 — Практика
Для практических целей преобразуйте приложение, созданное в Шаге 10, для использования выбранного фреймворка. Еще раз закрепите все навыки, включая тестирование.
Шаг 13 — Освойте базу данных NoSQL
Для начала, разберитесь, что это такое, для чего нужно, и в чем их отличие от реляционных баз данных. Функционал различных NoSQL немного отличается, поэтому потратьте время на небольшое исследование всех сходств и различий. Самые популярные со схожим функционалом: MongoDB, Cassandra, RethinkDB и Couchbase. Если вам нужна только одна база данных, то смело берите MongoDB.
Шаг 14 — Кэширование
Изучите, как реализуется кэширование на уровне приложения. Разберитесь с правилами использования Redis или Memcached и проведите кэширование в приложении, написанном в Шаге 12.
Шаг 15 — Создание RESTful API
Изучите REST и процесс создания RESTful API. Обязательно прочитайте раздел про REST в книге Роя Филдинга. Заготовьте парочку веских аргументов для встречи с кем-то, кто утверждает, что REST пригоден только для создания HTTP API.
Шаг 16 — Освойте различные методы авторизации
Почитайте материалы про различные методы авторизации и проверки подлинности. Вы должны понять, что это, с чего его едят, а также разобраться в принципах использования того или иного метода.
· OAuth — открытая аутентификация;
· Базовая аутентификация;
· Аутентификация по токенам;
· JWT — Аутентификация по JSON Web Tokens
· OpenID
Шаг 17 — Брокеры сообщений
Почитайте о брокерах сообщений, разберитесь в их назначении и использовании. Существуют различные брокеры, но самые популярные — это RabbitMQ и Kafka. Если тема вас заинтересует, то сначала освойте RabbitMQ.
Шаг 18 — Поисковики
По мере роста Вашего приложения простых запросов в реляционной или NoSQL базе данных будет не достаточно, поэтому Вам придется прибегать к помощи поисковых систем. Опять же, опций много, в каждой есть свои отличия.
Примеры: ElasticSearch, Solr, Sphinx.
Шаг 19 — Научитесь пользоваться Docker
Docker — это отличное подспорье в разработке. Он может все, начиная с репликации рабочей среды, очистки ОС или ускорения выполнения кода и заканчивая тестированием и развертыванием. Ключевой вопрос: «как же Docker поможет именно мне?» я оставлю открытым — вы сможете нагуглить самые подходящие варианты. Для этого шага освойте принципы работы с Docker.
Шаг 20 — Понимание работы веб-серверов
Если вы дошли до этого шага, то, скорее всего, уже успели познакомиться с веб-серверами. В данном шаге изучите различия между веб-серверами, разберитесь в принципах и ограничениях использования параметров конфигурации, а также технологиях написания приложений с учетом этих ограничений.
Примеры: Apache, Nginx, Caddy, MS IIS.
Шаг 21 — Научитесь пользоваться Web Sockets
Не обязательный пункт, однако лишние знания еще никому не навредили. Научитесь писать real-time веб-приложения с использованием веб-сокетов и напишите парочку примеров. Веб-сокеты можно использовать в каком-то из уже созданных приложений. Например, для приложения по ведению блога можно добавить функционал актуального обновления списка постов.
Шаг 22 — Изучите GraphQL
Научитесь создавать API с помощью GraphQL. Разберитесь в его отличии от REST, и почему его называют REST 2.0.
Шаг 23 — Присмотритесь к графическим базам данных
Графические модели — это очень удобный способ представления отношений данных, а графические базы данных позволяют быстро и удобно хранить, восстанавливать и создавать запросы. Почитайте про использование Neo4j или OrientDB.
Шаг 24 — Не останавливайтесь на достигнутом
В процессе изучения теории и практики вы будет сталкиваться с ситуациями, которые мы не разбирали в этой статье. Не пугайтесь, будьте открыты новым знаниями.
И помните, что ключ к успеху — практика, практика и еще раз практика. Вначале все выглядит действительно страшно и не понятно, может появиться чувство, что вы ничего не понимаете. Но это нормально.. Со временем вы поймете, что все начинает получаться.
Перевод статьи Adnan Ahmed: Modern Backend Developer in 2018