История начинающего Java-разработчика: почему я пошел на курсы и как изменил подход к поиску работы

Наш выпускник Евгений Кузнецов подробно поделился своим опытом «свитчера» — так называют людей, перешедших в IT из других сфер. В статье — рассказ о выборе направления и о трудностях поиска работы без опыта, рекомендации новичкам спустя первые месяцы работы в команде и честный отзыв об обучении в OTUS.

История начинающего Java-разработчика: почему я пошел на курсы и как изменил подход к поиску работы
Евгений Кузнецов
Выпускник OTUS

Привет всем! Я Женя, мне 34 года, вот уже 4 месяца работаю Junior Java программистом. Я шел в Java не с нуля, к моменту активного поиска работы у меня были и pet-проекты, и эксперименты с разными языками программирования. И все же трудоустройство параллельно обучению заняло полгода. Решил поделиться своим опытом перехода из инженера в IT, возможно, кому-то это поможет избежать ошибок и быстрее освоиться в новой профессии.

Пробовал Visual Basic, Python и все же остановился на Java

Я закончил МАТИ с дипломом магистра двигателестроения. За 12 лет инженерного стажа по большей части работал на зарубежные компании: Alstom Power, GE, Siemens. Кстати в Siemens довелось поработать «on site», 3.5 года в Швеции — могу с уверенностью сказать, что это были мои лучшие годы работы инженером.

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

Почему я сделал такой странный выбор языка? Все очень просто:

  • Некоторые коллеги уже использовали этот язык для написание скриптов, соответственно, была кодовая база, где посмотреть и чему поучиться.
  • Программа, в которой я работал (NX-CAD — система 3-d моделирования и создания чертежей) имела встроенный API для работы со скриптами для неё. Этот API написан на 4х языках — Visual Basic, Python, Java, C#.

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

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

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

Примерно через год я начал изучать Python и некоторые его фреймворки — в основном web (flask, django), также либы для мат. вычислений (numpy) и асинхронность (asyncio). Вместе с этим я решил создать git-репозиторий для своих небольших pet-проектов, про них я скажу отдельно позже. Также параллельно начал лениво изучать рынок вакансий и перспектив, так как рынок вакансий инженеров в России почти мертв (сейчас точно мертв с уходом иностранных компаний), если только вы не фанат, готовый служить за 60 тыс рублей + обед).

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

Самообучение: не бойтесь сразу переходить на фреймворки!

Для изучения я использовал открытые лекции Computer Science. Очень рекомендую лекции Тагира Валиева, по базовому синтаксису сложно найти что-то лучше. После базы сразу перешёл на Spring. Моё мнение — не бойтесь в начале изучения какого-либо языка сразу переходить на фреймворки! В процессе их изучения вы будете осваивать параллельно много всего нового: архитектуру приложения, ООП, базы данных, а также закреплять то, что изучали раньше, поэтому тянуть с этим не стоит.

Вообще со временем я пришел к такому выводу, что процесс изучения цикличен и многослоен. То есть когда вы что-то не понимаете — это нормально, когда вы делаете что-то новое с неполным пониманием первый раз — это тоже нормально. Фишка в том, что с каждым новым разом вы понимаете повторяемый материал глубже, постепенно доходя до сути. Я бы это назвал изучением чего-то сложного по слоям. То же самое, когда у меня что-то не получается — а такое происходит каждый день — для меня важно не опускать руки и пробовать разные варианты решения, читать несколько статей и разные взгляды этого вопроса и пробовать их все, пока не найду лучший для себя. И так, параллельно с этими попытками, проходит полное понимание проблемы. Проверено, это работает.

Первые провалы устроиться Java-разработчиком

После нескольких маленьких pet-проектов и около года изучения Java я начал подумывать о переходе в программисты. К тому же, мой контракт в Siemens заканчивался, а остаться там я не мог по семейным причинам. Я твердо решил: в Россию поеду программистом. Зарегился на hh и составил резюме, начал вялую охоту. Как потом оказалось, кликал я реально мало, надо было больше. Тут же почувствовал неприятный момент — очень много отказов сразу. По моим предположениям — из-за моего не-IT бэкграунда и возраста… Все еще есть негласное ощущение, что 33 года для начинающего прогера — это уже старпер. В общем, просмотров резюме мало, либо отказы, либо сложные задания сделать за 2 часа. Причём, по-моему, некоторые из них были реально неадекватны по соотношению требований и уровню должности соискателя. Почувствовав что-то не то, я решил посмотреть в сторону курсов на Java, так как действительно многих отпугивало, что в графе образования вообще не было никаких официальных документов.

Кстати, вот одно из заданий, где требования мне показались не совсем адекватными для уровня джуна:

Сделать сервис агрегации агрегаторов такси. Необходимо реализовать общую архитектуру, коннекторы к конкретным агрегаторам реализовывать не нужно, но нужно сделать общий интерфейс.

Сервис должен реализовывать возможность поиска предложений по адресам (в т.ч. асинхронно), бронирования и отмены бронирования. В качестве примера для имплементации можно взять API Iway.

Попробую объяснить, что в задании меня смутило:

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

2. Реализация поиска по адресам, в том числе асинхронно – простите, это как? :) Возможно, автор имел в виду «реализовать поиск по полю адреса в базе данных», а уже эти данные должны передаваться в другой сервис асинхронно, тогда это как-то укладывается в голове.

3. Ну и самое главное, это асинхронность – теперь с уверенностью могу сказать, что асинхронность на продакшн уровне не все сеньоры знают. Лично я считаю, это вообще одна из самых сложных для понимания тем в программировании.

Мне правда было бы интересно посмотреть на принятое решение, и что в итоге требовалось. Возможно, я сам не до конца понял суть задания, не исключено.

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

На курсе в OTUS проверяют жестко, но это мотивирует писать код качественно

Когда выбирал, куда пойти учиться, то сперва заглянул на сайт другой компании, у которой реклама на каждом шагу сейчас. На тот момент курс по Java у них был только от «zero to hero» длительностью два долгих года. Мне это не подходило, так как основы языка и какие-то базовые навыки у меня есть. Правда, там менеджер обещал пару «тёплых» собеседований с компаниями-партнерами, что звучало как некая гарантия трудоустройства при успешном окончании курса. Ну что, если это правда, то возможно, это неплохое подспорье, особенно для таких джунов-стариков, как я.

Я для себя решил поискать более короткую, и, соответственно, более сложную не с нуля программу обучения по Java, которую и обнаружил у OTUS. Это 6-месячный курс Java Developer Professional, который рассчитан на разработчиков уровня junior, поэтому я решил, что это мне подходит. Чтобы туда поступить, надо пройти вступительное тестирование. Там 20 вопросов на 40 минут, я сдал на уровень D, что было ок. Лекции были 2 раза в неделю с домашками, и в конце — итоговая работа.

Что понравилось:

  • Очень сильные преподы и, как следствие, очень полезные и интересные лекции.
  • Курс довольно хорошо последователен. Интересные домашки, которые для меня были довольно непростыми. Порадовало, что курс практико-ориентирован, для новичка это очень важно.
  • Почти весь материал актуален и полезен для работы для Java-разработчика.
  • ДЗ проверяют довольно жёстко, особенно Сергей Петрелевич — руководитель курса, за что отдельное спасибо, мотивирует писать код более качественно.
  • Занятия начинались по расписанию и все, что прописано в программе, было выполнено и предоставлено.
  • Помимо лекций преподы дают полезные ссылки. Правда, я почти все их уже читал до этого, но все же.
  • Есть пробные собеседования с руководителем курса под конец обучения, полезный опыт и тренировка.

Что не понравилось:

  • Не очень хорошая обратная связь с преподавателями, при проверке ДЗ в плане работы над ошибками — как я полагаю, из-за сильной загруженности. Они очень коротко отписывают, что неправильно, иногда прям вообще не понятно, почему это не правильно. С одной стороны, может быть это и полезно — ты самостоятельно разбираешься в ошибках, но это отнимает больше времени, поэтому это минус.
  • На сайте не все видео доступны для скачивания — тут мне тяжело судить, нормально это или нет, но исходя из того, что нигде официального запрета на скачивание нет, и 403 только на некоторые видео лекций, то полагаю, что это просто косяк.
  • Некоторые лекции, на мой взгляд, не очень нужные. Например, теме lombok посвящено слишком много времени. Бесспорно, ломбок полезен и везде используется, но посвящать ему 3-5 часов лекции (да, это самая длинная лекция на курсе) я бы не хотел. Думаю, достаточно почитать основы, чтобы применять его на практике. Вместо этого хотелось бы больше материала про тестирование.

Пожалуй и все из негатива).

Карьерная консультация, которая изменила мой подход к поиску работы

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

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

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

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

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

Поэтому я одинаково благодарен преподавателям курса и Кате за замечательную работу со мной в ментальном и организационном плане — большое спасибо, вы супер!

Если подытожить время с OTUS, то я остался очень доволен обучением. Действительно, курс даёт качественный подъем в Java и в совокупности с поддержкой Центра карьеры (именно Кати) на пятом месяце обучения я уже устроился на работу.

Первый опыт работы

Расскажу немного о первом опыте работы джуном. В целом с момента регистрации на hh и устройством на работу заняло у меня около 7 месяцев, методом перебирания граблей.

Я работаю в команде java-backend около 4 месяцев и мне все нравится. Мне повезло попасть в интересный проект с многосервисной архитектурой и довольно обширным списком технологий: java 17, sql/nosql databases, kafka, etc.

И хочу поделиться мыслями с теми, кто только начинает и пока не имеет опыта командной работы:

  • База программирования очень важна. Это значит, необходимо знать основной синтаксис языка и нарабатывать алгоритмическое мышление. На одном из моих неудачных собесов тимлид сказал: «Тренируй мышление, решай задачи на leetcode», и был абсолютно прав! НИКТО не будет вас учить программировать и ни в каких книгах этого не описано, вам могут дать только материалы для изучения, остальное всецело зависит от вас.
  • Leetcode очень помог мне лучше мыслить и писать код более алгоритмически правильно, поэтому настоятельно рекомендую.
  • Обязательно заведите свой git репозиторий и складывайте все свои наработки туда. Конечно, желательно законченные задачи/проекты. Это очень пригодится и для вас в будущем, и для потенциальных работодателей. В моем случае очень многие вещи в работе я подсматриваю из pet-проектов и это действительно помогает в работе.
  • Тесты. Тесты. Тесты. В нормальных проектах тесты пишут везде, много и на каждый чих. Честно, я не люблю их писать, это требует от меня ментальных усилий каждый раз, но они заставляют смотреть на свой код более консервативно, вследствие чего исправляется очень много багов на раннем этапе разработки. Также это волей-неволей заставляет писать более чистый код.
  • Git. Git. Git. Как и тесты — must have, знать на уровне понимания merge/rebase, супер нужная вещь.
  • Любить программирование. Скорее, это не совет, а просто качество, которое должно быть, чтобы прорваться через довольно высокую конкуренцию среди джунов, особенно сейчас.

Я шел к своей новой должности 1,5 года с момента, как решил, что буду Java-разработчиком, попробовал проходить собеседования, пошел на курс OTUS и взялся всерьез за поиски работы. Горжусь проделанной работой и результатом — теперь у меня впереди огромное поле для роста. Надеюсь, мой опыт будет кому-то полезен. Всем успехов в профессиональном развитии!

1313
11 комментариев

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

9
Ответить

Так автор кто? Сразу видно

Ответить

"Свитчер" - XD. Вайтишники (войти в айти) их называют, а не свитчеры

5
Ответить

Комментарий недоступен

2
Ответить

Вообще со временем я пришел к такому выводу, что процесс изучения цикличен и многослоен

Да не многослоен он, а просто новички всегда тыкаются в разные стороны, с желанием сразу взлететь в стратосферу. Но стратосфера их не принимает, потому что крыльев не отрастили, вот и падают. А потом называют это "цикличный процесс".

Быстро, без "циклов" с падениями, можно обучиться только с кем-то, кто вам ведёт за руку и не даёт упасть в воздушную яму. Хотя это "быстро" тоже не за пять секунд, разумеется.

1
Ответить

Java вообще денежная тема, хотя для кого-то может показаться скучновато.

Ответить