Игра Яндекс Практикума
Игра Яндекс Практикума
Игра Яндекс Практикума

Что вы сможете запрограммировать через год, занимаясь по два часа в день: бэкенд

Отредактировано

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

72К открытий75К показов

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

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

Привет, меня зовут Андрей, и я PHP-разработчик. Работаю программистом 5 лет, повидал больше 20 проектов, познакомился с толпой руководителей, разработчиков, тестировщиков, аналитиков и других людей из сферы IT.

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

Перед началом: стек и задачи

Для успешного освоения годового плана обучения программированию я рекомендую придерживаться следующих правил:

  1. Старайтесь выделить хотя бы два часа в день. Не каждый, но желательно.
  2. Не ограничивайтесь одним источником информации. Параллельно с официальной документацией читайте форумы, изучайте курсы, задавайте глупые вопросы гуглу и смотрите видеоуроки. Но не злоупотребляйте последним — чревато ролью пассивного зрителя.
  3. Избегайте скуки. Нужно постоянно придумывать себе «‎челлендж». Как писал автор одной книжки для начинающих: «Это же программирование! Развлекайтесь!»
  4. Помните, что этот план — не истина в последней инстанции. Меняйте его под себя с учетом своих особенностей.

План универсален: всё, что будет различаться в другом стеке, это название языка и список сопутствующих технологий. Замените PHP на Python (Django), Ruby (Ruby on Rails) или C# (ASP.NET), а MySQL — на PostgreSQL или MSSQL, ничего не поменяется. А в двух самых популярных редакторах кода — IntelliJ IDEA и VS Code — поддержка того или иного языка включается пятиминутной установкой плагинов.

В нашем случае язык программирования — PHP. Рядом с ним будут стоять веб-сервер nginx (не люблю Apache) и любая база данных (допустим, MySQL). Это мейнстримное решение в стеке PHP, поэтому остановимся на нем.

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

Что мы встретим в краях бэкенда

  • объектно-ориентированное программирование (ООП);
  • работа с базой данных — например, повесить индекс или оптимизировать запрос;
  • работа с API на отправку и на получение данных;
  • приложения с MVC-архитектурой;
  • работа с хранилищами данных и сторонними сервисами;
  • паттерны проектирования;
  • система контроля версий.

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

Первый этап: основы языка, ООП, базы данных — 4 месяца

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

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

Основы языка

Время: 1–1,5 месяца

Открываем справочник языка и начинаем разбивать его на логические блоки. Берём первые пять: типы, переменные, операторы, конструкции и функции. Это первый пункт плана: основы языка.

При формате «примерно два часа в день» на это уйдет месяц-полтора. За это время надо суметь поставить PHP, написать на нем что-нибудь ради баловства, всё сломать и начать разбираться. Вспоминаем третье правило — избегаем скуки. Можете сразу придумать себе проект, и не надо говорить, что идей нет. Делайте приложение, связанное с вашими интересами или хобби. Каталог книг домашней библиотеки, инструмент для ведения записей или расходов на кота — вперёд и с песней! Через месяц у вас будет приложение — кривое и косое, но оно уже будет работать, и его автором будете вы.

Объектно-ориентированное программирование (ООП)

Время: 1 месяц

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

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

Базы данных

Время: 1–1,5 месяца

Мы уже написали приложение и даже переписали его на ООП, а всё ещё храним данные в массивах? Непорядок! На этом этапе нужно поставить какую-нибудь базу данных (самое простое — MySQL) и разобраться с языком SQL. В жизни так бывает, что люди сначала изучают базы данных и только потом ООП, но, на мой взгляд, это не слишком удобно: ООП — сложная вещь, на неё требуется больше времени. Пока человек будет с ней разбираться, весь SQL может выветриться у него из головы, и придется учить заново. Так что лучше сначала изучить ООП, а потом БД.

Начните с создания таблиц, наполните их данными, делайте запросы с условием и без. Возможно, за неделю изучения вы дойдете до пресвятого JOIN. Если нет, то за две — это нормально. Главное, не зацикливайтесь на SQL как таковом. БД пока выступают просто как хранилище данных для нашего приложения, а трюки с оптимизацией вы изучите позже. Достаточно разобраться, как это работает, и переходить на отправку запросов из PHP. В PHP для этих целей используется библиотека PDO — встроенный механизм работы с любыми базами данных. Как только поймёте, как работать с БД из PHP, можно прикручивать всё это к вашему приложению.

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

Второй этап: системы контроля версий, фреймворки, паттерны проектирования — 4 месяца

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

Системы контроля версий

Время: 3–5 недель

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

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

Фреймворки

Время: 1–1,5 месяца

В современной веб-разработке мало что пишут с нуля, потому что есть инструменты и каркасы разработки, в которых уже заложена необходимая функциональность. Для начала советую фреймворки Yii2 или Laravel (Yii для новичка будет немного проще, но Laravel, на мой взгляд, лучше организован). Просто начните точно так же с изучения их документации и перепишите с нуля ваше приложение, которое вы написали в самом начале обучения. Реализация одной и той же идеи с помощью разных инструментов позволит увидеть принципиальные различия в коде. Если же старый проект вам наскучил, напишите что-то новое. Необязательно выдумывать стартап — просто возьмите готовую идею и перепишите по-своему, это для опыта, а не для выхода на IPO.

Очень рекомендую разбирать всё, с чем вы сталкиваетесь, как можно подробнее. Увидели QueryBuilder — напишите свой, если не делали этого, когда разбирались с PDO. Увидели роутинг — посмотрите, как он сделан во фреймворке, и попробуйте придумать его самостоятельно. Зачем? Во-первых, чтобы набить руку. Во-вторых, чтобы лучше понимать работу и внутренние процессы очень многих вещей и это не было для вас магией. В-третьих, как я говорил в самом начале, — чтобы создать резюме в виде репозитория своих проектов. Если хотите, можете даже попробовать написать свой домашний микрофреймворк, тоже интересный способ изучать эту область: у меня своих фреймворков как минимум два, их создание помогло мне разобраться с такой вещью, как метапрограммирование.

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

Время: 2–5 недель

В ООП есть раздел, о котором очень многие почему-то говорят с придыханием — это «шаблоны ООП» или паттерны. Само появление этого раздела и одноименной книги связано с тем, что разработчики раз за разом сталкивались с одними и теми же проблемами проектирования, в итоге был предложен список из 23 шаблонов, решающих типовые задачи. Это так, краткий экскурс в историю. Почему мы не занялись этим раньше? Потому что без практики сразу погружаться в эту достаточно академичную область сложно. Банальный пример — как объяснить устройство и пользу паттерна «Строитель» (Builder), если до этого человек не изучил QueryBuilder? Это будет слишком сложно.

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

Третий этап: сопутствующие технологии — 4 месяца

Далее мы подходим к самой размытой части нашего плана — к многообразию сопутствующих технологий, и не только в области бэкенда, а программирования и разработки вообще. Разработка программного обеспечения безгранична, и ваши дальнейшие действия будут зависеть от ваших потребностей (или потребностей работодателя). Изучили Laravel или он вам просто надоел — изучайте Symfony, этот фреймворк не менее востребован. Захотели немного во фронтенд — изучайте JS, Angular, React, да хоть jQuery. Захотели изучить что-нибудь за пределами REST API — вебсокеты и GraphQL ждут вас. Хотите попробовать NoSQL, чтобы хранить документы, которые в обычную БД без боли не засунуть, или хранить настолько разрозненные данные, что никакой SQL не справится, — берите MongoDB или Redis и разбирайтесь до посинения. Хотите узнать, что такое поисковые движки и как у «взрослых дядь» работает текстовый поиск, — ElasticSearch и Sphinx к вашим услугам.

Обязательно изучите Docker — систему упаковки приложения для более удобного деплоя. Чем это может быть полезно для домашнего проекта? Если вы захотите сменить версию PHP или вообще язык, вам не придется что-то ставить на рабочую машину: достаточно поменять конфиги Docker, и приложение запустится без вашего участия. А еще немного поможет с пониманием, как взаимодействуют между собой отдельные части приложения: фронтенд, веб-сервер, бэкенд, база, что такое отдача статики (картинок и шрифтов). Таким образом, Docker позволяет не зависеть от окружения на сервере, от окружения на рабочем месте, упрощает сборку и развертывание проекта, повышает безопасность работы за счет изоляции всех частей приложения, в том числе и друг от друга. Маленький совет: если вы до сих пор работали на Windows, то настало время разобраться с Linux. Потому что Docker и Windows очень плохо дружат.

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

Следите за новыми постами
Следите за новыми постами по любимым темам
72К открытий75К показов