Привет! Хочу поделиться своим опытом становления Java разработчиком.
Немного об авторе: на момент написания статьи мне 36 лет, в ИТ-сфере — с 2009 года и начинал я с системного администрирования продуктов Microsoft(сервера, БД, приложения) в компании АО «Национальный центр вертолётостроения им.М.Л.Миля и Н.И.Камова».
Программирования в моей работе не было, из отдалённо схожего могу отметить владение разве что скриптовыми языками типа PowerShell, Bat, vbs, которые активно использовал при работе с системой управления ИТ-инфраструктурой MS System Center Configuration manager (теперь Endpoint).
Работал я довольно эффективно и за 11 лет успел побывать и руководителем отдела, и заместителем начальника службы ИТ.
Профильное образование «Прикладная информатика» я получил только в 2017 году, зато во время работы в АО «НЦВ им.М.Л.Миля и Н.И.Камова» успел пройти более 20 курсов по вышеуказанным продуктам и не только.
Мысли стать программистом начали посещать году в 2018, но постоянное повышение по карьерной лестнице, вместе с увеличивающейся на глазах зарплатой делали своё дело и оставляли меня в зоне комфорта — так мне тогда казалось.
Довольно быстро пришло осознание, что моя основная работа — это бесконечные совещания и тонна документооборота, при этом по настоящему я испытывал удовольствие только производя программный продукт, приносящий пользу.
В конце 2020 года такое положение дел меня перестало устраивать и я нашёл себе самый «жирный», как мне показалось на тот момент, курс по разработке на языке Java.
Что я нашёл?
Предварительно посмотрел в сторону высшего профессионального образования и выделил следующие плюсы:
потенциально хорошая база в смежных предметах;
контроль успеваемости и дисциплины;
именитые преподаватели с большим опытом;
доверие к высшему образованию у HR гораздо выше, как мне тогда казалось.
Что же по минусам? Думаю, они следующие:
стоимость обучения в топовых вузах;
высочайшая конкуренция в случае поступления на бюджет;
наличие смежных предметов, безусловно важных, однако не интересующих меня в связи с нехваткой времени;
в основном очный формат;
отсталость материала в «средних» вузах
длительность программ бакалавриат + магистратура ≈ 5 лет.
Хотел бы я вовремя определиться с вузом и направлением? Определенно да, но что есть, то есть.
На другой чаше весов были курсы, у которых я смотрел программу обучения и отзывы перед принятием решения.
Плюсами в таком способе обучения стали:
агрегация всей необходимой информации в одном месте;
современные подходы к разработке и инструменты;
наличие нескольких весомых пет-проектов в портфолио, демонстрирующие «товар лицом»;
низкая стоимость обучения относительно вузовского;
динамическое улучшение материалов курса, добавление новых блоков обучения, исправление недочетов;
взаимодействие с куратором по каждому домашнему заданию;
возможность учиться, когда удобно;
пожизненный доступ к курсу, правда без проверки заданий спустя срок, определённый в договоре;
карьерная консультация, пусть мне работу так и не успели найти, однако рассказали и показали, что поменять в резюме;
вишенкой на торте стало участие в командном проекте под руководством лида(спринты, таски, код ревью).
Из минусов могу отметить:
необходимость железной дисциплины —тебя никто не будет подгонять и заставлять учиться;
учиться и работать одновременно — довольно не тривиальная задача, при условии, что вы выполняете свою работу качественно;
первое время сбивало с толку обилие учебного материала, что не удивительно;
в начале запуска курса некоторые материалы не были полностью выпущены или имели недостатки, которые со временем исправили;
низкое доверие HR к выпускникам курсов.
Профессия Java разработчик PRO от Skillbox
Этот набор курсов, да, именно набор курсов, сразу захватил моё внимание и после непродолжительного исследования материала я приобрёл их себе.
Первый год я выделял на учебу от 10 до 20 часов в неделю, это были вечерние и ночные часы после работы, и это было очень не просто.
Думаю в первые пол года меня толкал вперед дикий интерес и я почти не замечал усталости, но со временем сместил основное время учёбы на выходные дни чтобы не слишком сильно заигрывать с усталостью.
Важное замечание: если вами не движет интерес и вы не получаете удовольствие от монотонного длительного исследования, то лучше поищите себя в другой профессии. В программировании, особенно на начальных этапах, вы будете засыпать и просыпаться думая, как вам лучше решить ту или иную задачу, а некоторые задачи и вовсе будете решать неделями. Здесь уж без любви и интереса — никак.
В первый год я сконцентрировался на следующих курсах, входящих в программу, и проходил их практически параллельно.
Java-разработчик с итоговым проектом – поисковый движок.
Java Core. Базовый синтаксис, абстракции, коллекции, исключения, отладка, логирование, функциональное программирование, многопоточка, файлы и сеть;
ORM Hibernate, JDBC;
протокол Http, REST;
Redis, Mongo;
Spring Boot и Liquibase;
тестирование;
оптимизация приложения.
Понравилось: много практических заданий, нарастающая сложность, наличие текстовых шпаргалок по урокам, предельно понятные объяснения, выход за рамки голого Java Core, хороший итоговый проект с использованием forkJoinPool.
Не понравилось: блоку с многопоточкой не хватает реальных кейсов применения.
Основы SQL
базовые команды, Selec`ты, группировки, Join`ы;
немного про индексы и ключи;
обзорный урок по Oracle и Postgres.
Понравилось: быстрая база.
Не понравилось: нет практических заданий, почти ничего нет по оптимизации запросов, мало информации по EXPLAIN(а жаль, внезапно на всех собесах их спрашивают)
Веб-вёрстка «Базовый уровень»:
инструменты разработки;
Figma;
HTML + CSS;
Flexbox;
формы;
изучение методологии «Блок. Элемент. Модификатор»;
адаптивность на мобилке и десктопе;
кроссбраузерность;
доступность;
Bootstrap.
Понравилось: много практических заданий, нарастающая сложность, комплексность подаваемого материала.
Не понравилось: Тут даже придраться не к чему: мне кажется, что многие начинающие веб-разработчики в начале пути так не погружаются в материал. Очень круто.
Система контроля версий Git:
установка и работа с Git на Windows, Mac, Linux;
работа в известных IDE;
подключение ssh;
командная работа в Git.
Понравилось: всё разжёвано до предела, можно без проблем повторять за ментором, описывают лучшие практики командной работы.
Не понравилось: Тут также сложно до чего-то докопаться.
Изменения, произошедшие со мной за год обучения, и дальнейший план действий
С одной стороны, работа съедала всё больше времени, скорость обучения снизилась и иногда были промежутки без учёбы по несколько недель.
С другой, заряд мотивации и желание вырваться из гнетущей, пусть и финансово стабильной обстановки, не иссякало.
Я распылялся на четыре вышеуказанных курса, смотрел вакансии по моей текущей профессии и прикидывал, на сколько мне хватит накопленных денег.
Чудесным декабрьским днём я принял решение и написал по собственному. Денег по прикидкам мне хватало где-то до сентября – октября 2022. Спойлер – нет 😅.
На момент увольнения я успел:
подойти к итоговому проекту «поисковый движок» и изучить большую часть Java Core;
полностью закрыть блок с Git и SQL;
довести блок «Веб вёрстка. Базовый уровень» почти до самого конца. Как показала реальная работа – правильно, ведь знаний, полученных в ⅘ курса Java разработчику более чем достаточно.
Новый виток обучения
Как я уже говорил ранее, меня уже не сдерживала работа и я очень плотно засел за учебу. Фактически я уделял учебе уже по 8 и более часов в будни, при этом стараясь уделять внимание своей физической форме и развлечениям.
Само собой такой подход вызвал новый сильнейший подъем мотивации и интереса к изучаемому материалу.
Следующие 8 месяцев прошли достаточно продуктивно и я успел:
Полностью пройти Java Core.
Дописать и защитить проект «Поисковый движок» – Можете заценить код. Онлайн-демо я перестал поддерживать недавно, не вижу смысла платить за выделенный сервер.
Пройти большую часть курса «Разработка на Spring Framework». Оценивать я буду обновленный на текущий момент курс:
основы Spring Framework;
Spring Boot, стартеры, Docker
Web, шаблонизаторы, работа с БД
REST, Тестирование, Транзакции, AOP, Swagger;
Redis, MongoDB;
Kafka;
WebFlux;
Security, в том числе реактивная часть.
Понравилось: каждый модуль — это отдельный проект, есть юнит и интеграционные тесты, подробно описана работа Testcontainers, потрогали Веб-клиенты, посмотрели JOOQ, Транзакции, NoSql DB, Kafka, за реактивщину отдельное спасибо Павлу Вавилову, сделали итоговый проект (бэк – бронирование отелей).
Не понравилось: иногда бывают повторяющиеся склейки видео, что не является особой проблемой. «Разработка на Spring Framework» еще один пример того, как должен выглядеть курс.
Начал курс «Алгоритмы и структуры данных для разработчиков»
сортировки;
бинарный поиск;
реализации структур данных(списки, хэш – таблицы, стеки, очереди, куча);
рекурсия;
жадные алгоритмы;
графы;
деревья и бор;
алгоритмы сжатия информации;
битовые Алгоритмы;
криптографические алгоритмы.
Понравилось: плавное увеличение сложности, подробное описание действий, присутствуют все необходимые алгоритмы.
Не понравилось: нет практических заданий, в паре задач есть ошибки.
Пытался решать задачки на Codewars, а потом на Leetcode.
Переломный момент
В августе 2022 у меня закончились деньги, которые я накопил.
Заработка у меня не было и я не придумал ничего лучше, чем устроиться в Яндекс автокурьером(на своей машине). В целом работёнка не пыльная, когда понимаешь как и какие заказы брать. Откровенные идиоты мне не встречались, может один раз, да и то мозг успешно стёр это воспоминание. Работал я в среднем 4, иногда 6 часов в день и заработанного мне хватало аккурат на поддержание моих штанов и штанишек моих домашних животных. В среднем выходило в лучшем случае тысяч 40 и конечно я занимал периодически, но зато мог больше учится.
В этот момент я начал готовить резюме (в чём мне помогла карьерная консультация от skillbox) и пытаться заскочить на работу.
Дельные советы для тех, кто также много лет отпахал в ИТ или другой области:
Не расписывайте подробно весь свой предыдущий опыт, достаточно собрать основные достижения с последней должности.
Если у вас много проф курсов, у меня, например, было более 20, то их тоже не надо пихать все, а только потенциально полезные в новой профессии.
Если вы участвовали в интенсивах или командных проектах, не стесняйтесь указывать это.
Время для смены профессии я конечно выбрал отличное. Раньше брали, по ощущениям, кого угодно стажером или джуном. А у меня же до доработки резюме не было откликов совсем. Параллельно я заскочил на полуторамесячный интенсив в компанию Ylab, но к сожалению не попал на финальную бесплатную стажировку. Из интенсива я унёс довольно интересную практику и повторно закрепил навыки. Из 300 претендентов я был, кажется 27, что неплохо. Правда на финальное собеседования прошли только 15, а попали на стажировку и того меньше.
Как понимаете, включать заднюю я не собирался и только ещё яростнее учился, чему способствовала работа курьером.
Командный проект
Изрядно наполучав отказы от потенциальных работодателей 14.11.22 я залетаю на командный проект.
Группа из шести бэкендеров и одного фронта вместе работают под контролем опытного лида (Дениса Холмогорова) над проектом социальной сети в течении трёх месяцев.
Можете заценить перезалитый с Gitlab проект — https://github.com/ikazakof/social-service
В процессе от нас по тем или иным причинам отлетают два человека и бэкендеров остаётся четверо, но зато какие!
На проект можно податься где-то с трети прохождения Java Core, но я бы рекомендовал ещё плотно позаниматься Spring Boot.
На плюсах и минусах тут я остановлюсь подробнее.
Плюсы:
Мощный лид с реальным и обширным опытом программирования. Денис дал нам очень много полезнейшего материала, который и сейчас является подспорьем в моей практике. Книги, статьи, личный опыт — всё это гармонично вписалось в нашу командную работу
Работа велась недельными спринтами. В начале каждого спринта, да и в течение недели, мы созванивались в удобное для большинства время для постановки задач. Задачи все фиксировались на Kanban доске в Gitlab. Практически каждый день мы созванивались командой и обсуждали у кого как выполняются задачи, у кого какие трудности возникают и, конечно, лид направлял нас в сторону решения задачи. Именно направлял, а мы самостоятельно копались в материале и выполняли таски. Я в какой-то момент заморочился и стал записывать наши дейлики, выкладывая в облако. Это помогало членам команды, которые были в другом часовом поясе и у которых иногда не было возможности подключиться, однако Денис проводил дополнительные встречи и с ними в таких случаях.
Git вели мы как большие ребята: отдельная dev ветка, от которой создавали ветки с тасками, Code review, слияние веток и, конечно, исправление конфликтов, если они возникали
Мощный многомодульный полноценный проект, который в последствии можно было бы разнести на микросервисы. Абстракции, Postgre, Liquibase, WebSocket, Kafka, Security на JWT token, Specification, AOP, Swagger, Feign-client, Капча, подключение внешних почтовых сервисов и сервисов хранения файлов.
Docker.
CI/CD на базе Gitlab и minikube.
Возможность помогать членам команды с их задачами, если освободилось время.
Полноценная защита своей части проекта с вопросами от приглашённых экспертов.
Минусы:
Как показала практика, залетать с трети курса Java Core не у всех получится, хотя и такой коллега у нас был, и успешно завершил все предназначенные для него таски.
К сожалению, не хватило времени разнести на микросервисы, а очень бы хотелось.
Нет реактивщины, опять же из-за нехватки времени.
Что же по итогу?
Во время командного проекта меня рекомендовали на должность Junior разработчика в Unicredit Bank и в конце декабря я без каких-либо проблем прошёл собеседование. Собеседующие оценили меня на уровень Junior+, что считаю отличным, особенно учитывая, на сколько я успел пройти весь курс.
Честно говоря, я не был готов к тому, что работодатели настолько сильно не хотят рассматривать Junior разработчиков. Сейчас то на позицию Middle такой проблемы конечно же нет, учитывая то, что ты не просиживал штаны, конечно.
На сколько я успел завершить за три года предлагаемые курсы входящие в профессию:
Java-разработчик и итоговый проект – 100%
Разработка на Spring Framework без итогового проекта – 80%
Командный проект – 100%
Основы SQL – 100%
Веб-вёрстка «Базовый уровень» без итогового проекта – 46%
Система контроля версий Git – 100%
Enterprise-технологии в Java-разработке(Agile, CI/CD, Kafka, WebSokets, микросервисы) – 60%
Алгоритмы и структуры данных – 62%
Презентация итоговых проектов(оформление, публичные выступления) – 100%
Вебинары по профессии – 50%
Работа в bash – 0%
Безопасность БД (добавили уже после моего трудоустройства) – 0%
Веб-вёрстка «Продвинутый уровень»(Верстка писем, SVG, анимация на JS, оптимизация загрузки стилей и прочего, GULP, Sass, PUG, Grid, финальный проект) – 0%
Практика по Java (добавили уже после моего трудоустройства, три кейса – telegram-бот, тарифный калькулятор, обмен валюты) – 0%
Agile: Scrum и Kanban в работе над продуктом (добавили уже после моего трудоустройства) – 0%
Карьера и развитие программиста (интересный курс, как позже оказалось. Много про поиск работы и собеседования) – 15%
Финальные советы желающим сменить профессию
Изучите свежую информацию по курсам.
Соблюдайте баланс между трудом и отдыхом, потерянное здоровье не купишь!
Подготовьте денежную подушку и способ заработка на случай форс-мажора.
Попробуйте интересующий курс в пробном режиме, если это возможно, хотя бы немного прикиньте, каково вам будет учится после основной работы.
Закройте все долги, кредиты и прочее, чтобы вас это не тяготило.
Закладывайте на переход минимум пару лет, а то и больше. Переоценить свою мотивацию и прогресс очень легко.
Готовьтесь много, очень много учиться и иногда застревать на недели, приступая к сложной задаче, это нормальная практика
Обогащайте свои знания из сторонних источников – книги, статьи и прочее лишними точно не будут.
Постарайтесь на начальных этапах оценить, насколько вам это нравится: программирование надо любить, чтобы была мотивация этим заниматься. Вас никто не будет подталкивать идти вперёд кроме вас самих.
Без стеснения залетайте на интенсивы и стажировки при возможности, лишнего опыта не бывает.
Рассчитывайте только на себя!
От всей души желаю выбравшим схожий путь удачи, с удовольствием отвечу на ваши вопросы в комментах или в телеге, прикрепленной к моему профилю.