Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Сегодня расскажу про свой опыт перехода с джуниор позиции Java-разработчика на миддл — "скачок с джуна до мидла", а также поделюсь чек-листом, который поможет коллегам, оказавшимся в такой же ситуации.
Два года я работал в одной конторе на позиции джуна, но роста там особо не было. Надеялся, что скоро закончу магистратуру, и меня повысят до милда. Но этого не произошло. К слову, бакалавриат я закончил в СПбГУТ им. М.А. Бонч-Бруевича, факультет инфокоммуникационных сетей и систем, но знаний, которые можно непосредственно применять в современной продуктовой разработке, к сожалению, не получил. В программировании на Java я самоучка, и технический бэкграунд мне сильно в этом помог. Java изучал на практике, вникая в документацию и смотря ролики на ютубе.
Почему я ушел с предыдущей работы
В ту фирму я устраивался, когда учился в институте, и опыта у меня особо не было. Там в мои обязанности, в основном, входила поддержка интеграционного легаси проекта. Компания была маленькой, а данный проект — единственной джавовой разработкой, поэтому я время от времени переписывал уже имеющиеся решения с использованием новых технологий (новых очередей сообщений и т.д.) и ловил возникающие баги.
В планах было отучиться в магистратуре, после чего двигаться дальше по карьере, так как условия работы были весьма теплыми: зарплата меня вполне устраивала, начальство лояльно относилось к сотрудникам, а с коллегами можно было всегда отлично провести время после работы. Но все хорошее рано или поздно заканчивается, и в мою компанию пришло сокращение, под которое попал и я.
Поиск новой работы
Выхожу на рынок труда с полной уверенностью, что все рекрутеры мира только и мечтают обо мне. Но в итоге, меня зовут в средние конторы с такой же зп, а то и меньше, предлагая скучные задачи по поддержке кривого кода.
Собеседовался в EPAM и Luxoft. Эйчары максимально старались завлечь, рассказывая про крутые офисы, движуху внутри компании, ДМС и всякие “плюшки” в виде оплаты спорта и конференций. Но в итоге, так и не смогли ничего предложить по работе, потому что у меня не было опыта работы со Spring.
На первых собеседованиях я “набивал руку”, потому что общение с эйчарами было для меня в новинку. После каждого интервью я чувствовал себя все увереннее. Но основная проблема возникала на этапе тех. собеседования, где меня заваливали на каверзных теоретических вопросах, на которые я не мог четко ответить из-за слабой теоретической базы. Но даже после неудачных попыток, я выписывал все вопросы и задачи, с которыми не справился, и начинал заучивать. После 100500 собеседований на позицию джун+, мидл, результат был примерно одинаковый — готовы взять только на джуна с маленькой зп.
Новая работа
Сдаваться я не собирался, поэтому продолжал проходить собесы. Благо дистанционка, и можно было проходить хоть по 5 собеседований в день. И удача, после второй сессии тех. собеседования меня позвали сразу 2 компании — МТС и Цифровые Привычки.
Казалось бы, между МТС и неизвестной компанией выбор очевиден, но все оказалось не так просто. Цифровые Привычки к тому моменту успели выиграть несколько тендеров Сбера на 400 миллионов рублей и начали активно расти. Я думаю, все понимают, что вкатиться в айти компанию на стадии активного роста = получать достойную зп, так как из-за дефицита Java-разработчиков на рынке компания готова хорошо платить, когда у нее есть крупные проекты, на которые требуется больше сотрудников. Мое решение в пользу ЦП было также подкреплено бесплатным обучением по Java, которое в дальнейшем помогло в работе на проекте.
Чек-лист Middle Java Developer
Данный чек-лист основан на моем личном опыте в разработке, опыте прохождения технических собеседований и тех знаниях, которые я получил на обучении. В нем будут те ключевые навыки, которые помогли мне получить должность мидл разработчика. Условно разделю их на hard и soft skills.
Hard skills
Понимание технологического стека проекта, на который ты собеседуешься.
Нужно действительно разбираться в наборе инструментов, которые применяют в работе на проектах, а также важно четко ответить на теоретические вопросы о конкретном применении того или иного инструмента на тех. собеседовании. Например, в моем случае было важно знать JavaSE, JavaEE (JAX-RS, JAX-WS, JMS), Spring framework (Core), SQL, Maven, GIT, XML/XSD.
Сильная теоретическая база.
Нужно уметь объяснять, как ты выполнил ту или иную задачу. Почему использовал конкретно этот подход, а не другой. На тех. собеседовании любят капнуть глубоко в теоретические аспекты, на которых неподготовленный разработчик сразу заваливается. Например, меня на собеседованиях часто спрашивали, как устроен HashMap.
Уметь разбираться в чужом коде.
Сто процентов на новой работе придется иметь дело с чужим кодом, и не всегда он может быть адекватным. Поэтому на тех. собесе также дают задачи на ошибки в чужом коде, к этому надо быть готовым.
Уметь писать интеграционные тесты, осознанно подходить к обдумыванию тест-кейсов.
Написание интеграционных тестов — де факто стандарт современной разработки. Интеграционные выполняются автоматически и помогают удостовериться, что новые изменения не сломают старый функционал.
Знание различных методологий разработки.
Как минимум, нужно понимать, чем отличаются Agile, Scrum и Cascade, чтобы при выходе на проект было проще включиться в работу.
Умение решать задачи на собеседовании.
На тех. собесе кандидата просят решить несколько задач на алгоритмику. Очень часто они совершенно не связаны с реальными задачами разработчика, но решать все равно придется.
Знание английского - желательно, но не обязательно.
Если ты устраиваешься в российскую компанию, то знание языка не требуют. Но нужно иметь ввиду, что вся техническая документация в большинстве случаев написана на английском.
Soft skills
Быть заинтересованным и коммуникабельным.
На собеседовании стоит показать свою коммуникабельность, потому что если твои хард скилы немного не дотягивают до того уровня, который требуется на проекте, то у тебя есть шанс дать понять работодателю, что ты в состоянии быстро освоить все недостающие навыки.
Умение работать в команде.
Этот навык сильно помогает, потому что как я писал выше, работать с чужим кодом не всегда бывает легко, и нужно быть готовым постоянно общаться с коллегами, задавать вопросы, а также самому давать разъяснения, если это нужно. Также здорово, если ты можешь донести свои мысли и идеи до команды так, чтобы их поняли все.
Способность оценить трудозатраты.
Этот навык поможет избежать невыполнимых обещаний, после которых тебе придется работать по 20 часов в день, чтобы сдать проект в срок, который ты сам озвучивал.
Навык постановки целей и задач.
Это всегда полезно для собственного роста и развития, особенно если собираешься дальше строить карьеру.
В общем, начинающему специалисту, который вроде уже и не джун, но еще и не мидл, реально трудно найти работу с интересными задачами и достойной зп. Без хороших теоретических знаний и опыта тяжело устроиться на мидл позицию в нормальную компанию. Поэтому важно постоянно учиться, практиковаться и прокачивать софт скилы.
Также ниже прикрепляю ресурсы, которые помогли мне при подготовке к собеседованиям на Middle Java Developer.
Ресурсы для подготовки к собеседованию
Сайты, где можно найти самые часто задаваемые вопросы на собеседованиях:
Stack Overflow
JavaRush
Interview Review
Tproger
Чаты в телеграмме, где можно обсудить разные темы с другими разработчиками и порешать задачи:
Разбор вопросов на интервью
Java задачи
Java задачи с собеседований
Docker
Spring Boot & Spring Data JPA (англоязычный чат)
Ютуб:
Тут можно посмотреть, как проходят интервью
Подборка лекций Евгения Борисова ("Спринг-потрошитель") с конференций
Видеолекции по Spring
Где можно тренироваться решать задачи:
LeetCode
Codeforces
Тренировки по SQL запросам
Тренировки по Git запросам