Привет! Хочу поделиться своим опытом становления 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 часов в неделю, это были вечерние и ночные часы после работы, и это было очень не просто.

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

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

В первый год я сконцентрировался на следующих курсах, входящих в программу, и проходил их практически параллельно.

  1. Java-разработчик с итоговым проектом – поисковый движок.

  • Java Core. Базовый синтаксис, абстракции, коллекции, исключения, отладка, логирование, функциональное программирование, многопоточка, файлы и сеть;

  • ORM Hibernate, JDBC;

  • протокол Http, REST;

  • Redis, Mongo;

  • Spring Boot и Liquibase;

  • тестирование;

  • оптимизация приложения.

Понравилось: много практических заданий, нарастающая сложность, наличие текстовых шпаргалок по урокам, предельно понятные объяснения, выход за рамки голого Java Core, хороший итоговый проект с использованием forkJoinPool.

Не понравилось: блоку с многопоточкой не хватает реальных кейсов применения.

  1. Основы SQL

  • базовые команды, Selec`ты, группировки, Join`ы;

  • немного про индексы и ключи;

  • обзорный урок по Oracle и Postgres.

Понравилось: быстрая база.

Не понравилось: нет практических заданий, почти ничего нет по оптимизации запросов, мало информации по EXPLAIN(а жаль, внезапно на всех собесах их спрашивают)

  1. Веб-вёрстка «Базовый уровень»:

  • инструменты разработки;

  • Figma;

  • HTML + CSS;

  • Flexbox;

  • формы;

  • изучение методологии «Блок. Элемент. Модификатор»;

  • адаптивность на мобилке и десктопе;

  • кроссбраузерность;

  • доступность;

  • Bootstrap.

Понравилось: много практических заданий, нарастающая сложность, комплексность подаваемого материала.

Не понравилось: Тут даже придраться не к чему: мне кажется, что многие начинающие веб-разработчики в начале пути так не погружаются в материал. Очень круто.

  1. Система контроля версий Git:

  • установка и работа с Git на Windows, Mac, Linux;

  • работа в известных IDE;

  • подключение ssh;

  • командная работа в Git.

Понравилось: всё разжёвано до предела, можно без проблем повторять за ментором, описывают лучшие практики командной работы.

Не понравилось: Тут также сложно до чего-то докопаться.

Изменения, произошедшие со мной за год обучения, и дальнейший план действий

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

Я распылялся на четыре вышеуказанных курса, смотрел вакансии по моей текущей профессии и прикидывал, на сколько мне хватит накопленных денег.

Чудесным декабрьским днём я принял решение и написал по собственному. Денег по прикидкам мне хватало где-то до сентября – октября 2022. Спойлер – нет ?.

На момент увольнения я успел:

  • подойти к итоговому проекту «поисковый движок» и изучить большую часть Java Core;

  • полностью закрыть блок с Git и SQL;

  • довести блок «Веб вёрстка. Базовый уровень» почти до самого конца. Как показала реальная работа – правильно, ведь знаний, полученных в ⅘ курса Java разработчику более чем достаточно.

Новый виток обучения

Как я уже говорил ранее, меня уже не сдерживала работа и я очень плотно засел за учебу. Фактически я уделял учебе уже по 8 и более часов в будни, при этом стараясь уделять внимание своей физической форме и развлечениям.

Само собой такой подход вызвал новый сильнейший подъем мотивации и интереса к изучаемому материалу.

Следующие 8 месяцев прошли достаточно продуктивно и я успел:

  1. Полностью пройти Java Core.

  2. Дописать и защитить проект «Поисковый движок» – Можете заценить код. Онлайн-демо я перестал поддерживать недавно, не вижу смысла платить за выделенный сервер.

  3. Пройти большую часть курса «Разработка на Spring Framework». Оценивать я буду обновленный на текущий момент курс:

  • основы Spring Framework;

  • Spring Boot, стартеры, Docker

  • Web, шаблонизаторы, работа с БД

  • REST, Тестирование, Транзакции, AOP, Swagger;

  • Redis, MongoDB;

  • Kafka;

  • WebFlux;

  • Security, в том числе реактивная часть.

Понравилось: каждый модуль — это отдельный проект, есть юнит и интеграционные тесты, подробно описана работа Testcontainers, потрогали Веб-клиенты, посмотрели JOOQ, Транзакции, NoSql DB, Kafka, за реактивщину отдельное спасибо Павлу Вавилову,  сделали итоговый проект (бэк – бронирование отелей).

Не понравилось: иногда бывают повторяющиеся склейки видео, что не является особой проблемой. «Разработка на Spring Framework» еще один пример того, как должен выглядеть курс.

  1. Начал курс «Алгоритмы и структуры данных для разработчиков»

  • сортировки;

  • бинарный поиск;

  • реализации структур данных(списки, хэш – таблицы, стеки, очереди, куча);

  • рекурсия;

  • жадные алгоритмы;

  • графы;

  • деревья и бор;

  • алгоритмы сжатия информации;

  • битовые Алгоритмы;

  • криптографические алгоритмы.

Понравилось: плавное увеличение сложности, подробное описание действий, присутствуют все необходимые алгоритмы.

Не понравилось: нет практических заданий, в паре задач есть ошибки.

  1. Пытался решать задачки на 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 такой проблемы конечно же нет, учитывая то, что ты не просиживал штаны, конечно.

На сколько я успел завершить за три года предлагаемые курсы входящие в профессию:

  1. Java-разработчик и итоговый проект – 100%

  2. Разработка на Spring Framework без итогового проекта – 80%

  3. Командный проект – 100%

  4. Основы SQL – 100%

  5. Веб-вёрстка «Базовый уровень» без итогового проекта – 46%

  6. Система контроля версий Git – 100%

  7. Enterprise-технологии в Java-разработке(Agile, CI/CD, Kafka, WebSokets, микросервисы) – 60%

  8. Алгоритмы и структуры данных – 62%

  9. Презентация итоговых проектов(оформление, публичные выступления) – 100%

  10. Вебинары по профессии – 50%

  11. Работа в bash – 0%

  12. Безопасность БД (добавили уже после моего трудоустройства) – 0%

  13. Веб-вёрстка «Продвинутый уровень»(Верстка писем, SVG, анимация на JS, оптимизация загрузки стилей и прочего, GULP, Sass, PUG, Grid, финальный проект) – 0%

  14. Практика по Java (добавили уже после моего трудоустройства, три кейса – telegram-бот, тарифный калькулятор, обмен валюты) – 0%

  15. Agile: Scrum и Kanban в работе над продуктом (добавили уже после моего трудоустройства) – 0%

  16. Карьера и развитие программиста (интересный курс, как позже оказалось. Много про поиск работы и собеседования) – 15%

Финальные советы желающим сменить профессию

  • Изучите свежую информацию по курсам.

  • Соблюдайте баланс между трудом и отдыхом, потерянное здоровье не купишь!

  • Подготовьте денежную подушку и способ заработка на случай форс-мажора.

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

  • Закройте все долги, кредиты и прочее, чтобы вас это не тяготило.

  • Закладывайте на переход минимум пару лет, а то и больше. Переоценить свою мотивацию и прогресс очень легко.

  • Готовьтесь много, очень много учиться и иногда застревать на недели, приступая к сложной задаче, это нормальная практика

  • Обогащайте свои знания из сторонних источников – книги, статьи и прочее лишними точно не будут.

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

  • Без стеснения залетайте на интенсивы и стажировки при возможности, лишнего опыта не бывает.

  • Рассчитывайте только на себя!

От всей души желаю выбравшим схожий путь удачи, с удовольствием отвечу на ваши вопросы в комментах или в телеге, прикрепленной к моему профилю.

Комментарии (3)


  1. artemfisher
    02.07.2024 14:46

    В процессе изучения. Пошёл второй год. Курсы отмёл сразу, всё по официальной документации. С работы не увольнялся, нашёл на графике 2/2. 2 дня работаю, 2 дня - по 8 часов программирование. Полёт нормальный


    1. ikazakof Автор
      02.07.2024 14:46

      Почему бы и да. Если вам подходит изучение по офф документации и например изучение проектов в открытом доступе это супер.

      3 дня по 8 часов программирования звучит эффективнее чем учеба после работы.

      Я бы наверно добавил, что такой способ также не для всех, я лично люблю подобие структуры в обучении.

      Желаю вам добиться своей цели!


    1. aiminkai
      02.07.2024 14:46
      +1

      Плохой подход. Надо командная практика с советами опытных.

      Оф доки это, так скажем, свободный полёт тела в вакууме, со всеми известными законами.

      В реале пёрышко и камень падают по-разному