Подробный план самообучения на бэкенд-разработчика (Python или Ruby) "c нуля до профи"

Предварительный замечания:

- план отражает мой личный опыт и не претендует на истину в последней инстанции

- целью плана является трудоустройство на позицию junior backend разработчика (Python или Ruby)

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

- что выбрать Python или Ruby? Если у вас нет никакого опыта программирования, то Python. Ruby выбираем только в том случае, если а) у вас есть хоть какой-то опыт программирования б) вы уже попробовали Ruby и вам понравилось.

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

- нужно ли строго придерживаться того порядка изучения, который предложен в плане? Нет, это не обязательно. Очевидно, что нет смысла изучать фреймворки, если вы еще не выучили язык. Или изучать продвинутые понятия ООП, если нет понятия об основах. Но в то же время, например, базы данных я поместил в Уровень 2 совершенно произвольно. Можно их начать изучать хоть с самого начала.

- нужно ли все указанные книги прочитывать от корки до корки, а курсы проходить от начала до конца? Нет. Читайте то, что вам заходит сейчас. Бросайте книгу/курс, если вам стало скучно.

Уровень 0.

Отсутствует опыт программирования. Совсем.

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

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

Книги и курсы для начинающих:

Бесплатные курсы на stepik:

https://stepik.org/course/58852/promo

https://stepik.org/course/67/promo

Книги:

Легкий способ выучить Python. Зед Шоу

Изучаем Python. Марк Лутц

Python на примерах. А. Васильев

Ruby:

https://stepik.org/course/87996/promo

https://rubyschool.us/

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

Внимание! Начинаем учить английский и не заканчиваем на всех уровнях. Первоначальная цель: научиться читать технические тексты и документацию. Следующая цель: разговорный язык уровня B1 (лучше B2).

Уровень 1.

Уже разобрались с основами, теперь учимся писать хороший код.

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

Главная задача - изучить принципы ООП, научиться писать чистый код.

Побочная задача - освоить профессиональные инструменты разработчика: IDE/редактор (в том числе дебаггинг), Линукс, Git. Помимо самого языка изучаем его инфраструктуру: пакетные менеджеры, виртуальные окружения. Стандарты оформления кода, линтеры, статические анализаторы.

Что делаем:

- устанавливаем линукс в качестве второй ОС (ну или единственной, если прям в омут с головой). Если вы богатенький буратино, то просто купите себе Мак. Профессиональная разработка бэкенда на Питон/Руби не ведётся на Windows. Просто смиритесь с этим. Я рекомендую не заморачиваться с выбором дистрибутива, а просто установить Ubuntu.

- начинаем изучать Git: https://git-scm.com/book/ru/v2 и заводим аккаунт на Github

- КЛЮЧЕВОЙ ПУНКТ. Мы учимся применять на практике теорию, о которой пойдет речь дальше. Делаем маленькие (МАЛЕНЬКИЕ!) проектики. Это должны быть библиотеки и/или консольные программы, чтобы не заморачиваться с GUI или вебом (он нас ждёт на следующем уровне). Придумывайте себе задачи сами, можно погуглить идеи. Это может быть текстовая игра/квест, хранилище паролей, список дел, и т.п. Проекты обязательно ведём в Git и выкладываем на Github.

- разбираемся, что такое виртуальное окружение и используем его

python:

* venv https://docs.python.org/3/library/venv.html

* virtulenv https://virtualenv.pypa.io/en/latest/

* pyenv https://realpython.com/intro-to-pyenv/

ruby:

* rvm https://rvm.io/

* rbenv https://github.com/rbenv/rbenv

- используем пакетные менеджеры

python:

* pip

* poetry

ruby:

* gem

* bundler

- используем линтеры и учимся оформлять код в соотсветствии со стандартами

python:

* flake8

ruby:

* rubocop

- в python привыкаем ставить type hints и использовать mypy

Теория на этом уровне

Теории будет много. Прежде всего, это углубление в язык.

Для Python читаем книгу "Python. К вершинам мастерства" Лучано Рамальо.

Для Ruby читаем "Metaprogramming Ruby" Paolo Perrotto и "Ruby. Объектно-ориентированное проектирование" С. Метц

Далее теория по ООП. Читаем книги:

- "Чистый код" Роберт Мартин

- книги по паттернам проектирования

* Паттерны объектно-ориентированного проектирования. Э. Гамма, Р. Хельм, Р. Джонсон, Дж. Влиссидес. Это легендарная книга, в которой появилось само понятие паттернов проектирования. Авторов еще называют "бандой четырех" (Gang of Fourth, сокращенно GoF). Это первоисточник по данной теме, все остальные книги вторичны. Недостаток: академический стиль изложения.

* Шаблоны корпоративных приложений. Мартин Фаулер. Еще одно академическое издание. Сложно читается, читать всё не нужно, но можно брать что-то для себя.

* Любый другие книги по паттернам, в т.ч. применительно к вашему языку.

* начать можно с сайта https://refactoring.guru/ru/design-patterns/

- погуглить как можно больше материалов про SOLID. Начать можно с https://habr.com/ru/post/348286/

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

Уровень 2.

Изучаем разработку веб-приложений: базы данных, фреймворки. Делаем проекты. Начинаем рассылать резюме

Главная задача на этом уровне - научиться делать веб-приложения и сколотить из них портфолио.

Итак, для начала сосредоточимся на базах данных. Учить всё на Postgresql, это самая популярная СУБД.

Что надо знать:

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

- язык SQL вплоть до извлечения данных из нескольких таблиц (join) включительно

По Postgresql есть документация на русском: https://postgrespro.ru/docs/postgresql/14/

Есть и бесплатный курсы: https://postgrespro.ru/education/

Ключевой пункт: изучаем фреймворки. Для python это Django, для ruby это Ruby on Rails.

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

Пара книжек по Django, которые лично мне помогли больше всего:

- Django 3.0. Практика создания веб-сайтов на Python. Владимир Дронов

- Two Scoops of Django. D.R. Greenfiled, A.R. Greenfiled

Список книг по Ruby on Rails:

https://blog.railwaymen.org/8-ruby-on-rails-books-you-should...

https://programmingzen.com/rails-books/

Примеры книг на русском: https://progerlib.ru/ruby-books

Самое главное: изучать нужно на практике, только так. Ваши источнки, будь то официальная документация или ютуб-канал, нужно читать/смотреть только до тех пор, пока вы не ухватили идею, как всё это работает. Должно быть ощущение "Ага, я понял!"

После этого придумываем маленькие (МАЛЕНЬКИЕ!) веб-проекты и начинаем делать. Книги, документацию и ютуб используем как справочные материалы. Всё выкладываем на Гитхаб.

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

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

Вероятно, на этом этапе вы еще не сможете трудоустроится. Но может быть и так, что сможете :)

Полезные общеразвивающие книги:

- "Совершенный код". С. Макконелл

- "Программист-прагматик". Э. Хант, Д. Томас

- "Программист-фанатик". Чед Фаулер

- "Человек эпохи IT". Сомнез

Уровень 3.

Осваиваем деплой на реальные сервера

Главная задача - задеплоить наши проекты, которые мы делали на предыдущем уровне.

Для этого надо освоить:

- docker, docker-compose. Пожалуй самая сложна тема на данном уровне, но её освоение даёт огромное преимущество соискателю, плюс сильно облегчает жизнь разработчику. Вот несколько вводных статей с Хабра для начала:

* https://habr.com/ru/post/272145/

* https://habr.com/ru/company/ruvds/blog/438796/

* https://habr.com/ru/post/310460/

* https://habr.com/ru/company/ruvds/blog/450312/

- понятие о CI/CD на примере Github Actions

- думаю, понадобится научиться на элементарном уровне настравивать nginx

Как здесь действовать? Есть разные облачне сервисы типа heroku и pythonanywhere, куда можно деплоить. Но мне всегда нравилось купить самый дешевый VPS и деплоить туда. В любом случае, ваша задача в том, чтобы ваш веб-сервис был доступен в интернете по ссылке (думаю, домен второго уровня покупать смысла нет, достаточно что-то типа blalbal.herokuapp.com).

Заворачивайте ваши проекты в docker-compose.

Настройте https, сделайте, чтобы ваш пет-проект выглядел "как настоящий". Ссылку обязательно добавить в резюме! Это серьёзно повысит ваши шансы на трудоустройство.

Настройте CI/CD-пайплайн с помощью Github Actions. После этого ваш проект будет и с точки зрения разработки выглядеть почти профессионально. Еще плюсцы к вашему резюме.

По идее, если у вас будет 1-3 таких проекта, вас уже должны взять джуном без проблем. Если пока не берут, продожаем усиленно рассылать резюме и терпеливо ждём своего часа )

Уровень 4. Устроились на работу, что дальше?

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

Довольно часто бывает, что первая работа не самая удачная. Это нормально, потому что стояла задача заскочить в это поезд. Но когда вы уже в нём, то можно оглядеться и оценить ситуацию. Подходите к работе прагматично. Тут действительно классные дружелюбные ребята, с которым приятно работать? Или сборище мрачных снобов-мудаков? Или (что довольно часто бывает) просто нет никакой команды, и ты один сидишь со своими задачами и только google да stackoverflow твои лучше друзья и наставники?

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

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

Вообще, на данном уровне главные проблемы которые возникают - это проблемы психологического характера. Поэтому гуглим всё что можно по теме "синдром самозванца" и излечиваемся :)

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

Всем удачи!

Создал чат в телеграме: https://t.me/+k7E2Wp80WpBjNjky

Другие посты об образовательной платформе ищите по тэгу GeekBrains. Всю необходимую информацию и отзывы ищите в нашем специальном разделе. Там вы найдёте все актуальные курсы GeekBrains.

Лига программистов

1.5K постов11.4K подписчиков

Добавить пост

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

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