Предварительный замечания:
- план отражает мой личный опыт и не претендует на истину в последней инстанции
- целью плана является трудоустройство на позицию junior backend разработчика (Python или Ruby)
- план предполагает, что вы уже определились с выбором желаемого языка программирования и направлением, которым хотите заниматься. Здесь это именно веб-разработка в части бэкенда. Выбор направления выходит за рамки этого плана.
- что выбрать Python или Ruby? Если у вас нет никакого опыта программирования, то Python. Ruby выбираем только в том случае, если а) у вас есть хоть какой-то опыт программирования б) вы уже попробовали Ruby и вам понравилось.
- перед началом плана прочитайте все уровни и определитесь, на каком находитесь вы. С этого уровня и начинайте.
- нужно ли строго придерживаться того порядка изучения, который предложен в плане? Нет, это не обязательно. Очевидно, что нет смысла изучать фреймворки, если вы еще не выучили язык. Или изучать продвинутые понятия ООП, если нет понятия об основах. Но в то же время, например, базы данных я поместил в Уровень 2 совершенно произвольно. Можно их начать изучать хоть с самого начала.
- нужно ли все указанные книги прочитывать от корки до корки, а курсы проходить от начала до конца? Нет. Читайте то, что вам заходит сейчас. Бросайте книгу/курс, если вам стало скучно.
Уровень 0.
Отсутствует опыт программирования. Совсем.
На этом уровне главная задача - научиться азам программирования и основам выбранного языка. Освоить синтаксис и основные конструкции.
Ну и побочная задача - понять, насколько это интересно, действительно ли хочется посвятить этому какую-то значительную часть жизни.
Книги:
Легкий способ выучить 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) включительно
Ключевой пункт: изучаем фреймворки. Для python это Django, для ruby это Ruby on Rails.
Как изучать фреймворки и по каким источникам? Я думаю, одним из лучших источников является официальная документация. Кроме этого есть книги и курсы на ютубе. Не буду указывать никакие ссылки, всё гуглится без проблем.
Пара книжек по Django, которые лично мне помогли больше всего:
- Django 3.0. Практика создания веб-сайтов на Python. Владимир Дронов
- Two Scoops of Django. D.R. Greenfiled, A.R. Greenfiled
Самое главное: изучать нужно на практике, только так. Ваши источнки, будь то официальная документация или ютуб-канал, нужно читать/смотреть только до тех пор, пока вы не ухватили идею, как всё это работает. Должно быть ощущение "Ага, я понял!"
После этого придумываем маленькие (МАЛЕНЬКИЕ!) веб-проекты и начинаем делать. Книги, документацию и ютуб используем как справочные материалы. Всё выкладываем на Гитхаб.
Составляем резюме, в котором в качестве "опыта работы" у нас будут наши "пет-проекты". (как правильно составить резюме погуглите, это выходит за рамки данного плана). Веерно рассылаем куда только можно.
На этом этапе возможна следующая ситуация. Вам в ответ на ваше резюме придет предложение выполнить тестовое задание. Выполняем и добавялем его в коллекцию своих "пет-проектов". Плюс, получаем фидбэк от профессионалов, которые ваше тестовое задание оценивали. Становимся сильно лучше, как программисты :) Приглашают на собес - идём, собесы также дают взрывной рост навыков.
Вероятно, на этом этапе вы еще не сможете трудоустроится. Но может быть и так, что сможете :)
Полезные общеразвивающие книги:
- "Совершенный код". С. Макконелл
- "Программист-прагматик". Э. Хант, Д. Томас
- "Программист-фанатик". Чед Фаулер
- "Человек эпохи 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 твои лучше друзья и наставники?
Не надо бояться искать и выбирать. Работа - это не семья, начальник - не папа с мамой, а коллеги - не братья. Если работа говно - меняем без лишних сентименов.
Если что-то не получается - это не твои проблемы, а проблемы тех, кто тебя нанял. Потому что либо они решили сложные задачи подешевке свалить на джуна, либо не могут организовать эффективное обучение или взаимодействие с командой.
Вообще, на данном уровне главные проблемы которые возникают - это проблемы психологического характера. Поэтому гуглим всё что можно по теме "синдром самозванца" и излечиваемся :)
В любом случае, если ты прошёл (прошла) весь этот путь, ты уже просто огромный молодец и крутой/крутая чувак/чувиха! Проделать такую колоссальную работу дорогого стоит. Даже не думайте позволять кому-нибудь (чаще всего самому себе) обесценивать свои достижения.