• »
История успеха
Евгения Рудого
Привет!
Меня зовут Евгений, и я устроился работать Java-разработчиком в СберТех.
Перед этим был проделан большой путь, который я постараюсь подробно изложить и, возможно, кому-то помочь этим. Для удобства он будет разбит на разделы. Погнали.
Мой путь
Однажды в 22 года (сейчас мне 25), когда еще занимался продажами, я понял, что хочу делать что-то реальное, созидательное. Ну, и банально захотелось больше перспектив в своей жизни, какого-то развития. Вспомнил, что еще в школьные годы тянулся к программированию, и решил снова попробовать это дело.
Так я наткнулся на JavaRush, где бессонными ночами проходил уровни, которые позволили мне многое изучить в мире Java. Но уже тогда я понимал реалии рынка: да, по моему скромному наблюдению, зарплаты программистов неплохо выросли, но вместе с ними — и требования. И я понимал, что одного JavaRush будет все же маловато (хотя курс действительно крутой, который настоятельно рекомендую пройти всем — выстроите очень крепкий фундамент для себя).
В общем, я пошел на стажировку от JavaRush — как позже оказалось, это был курс TopJava. Здесь было море новых вещей. Честно скажу, было сложно. Но это однозначно к лучшему. Здесь был получен огромнейший объем информации, изучена масса дополнительных источников (в курсе есть куча полезных ссылок на них). Забегая наперед, скажу свою основную ошибку: нужно было сразу брать ревью кода (позже поймете, зачем).
После курса я прошел пару собеседований и понял, что мои знания все же еще достаточно сырые, потому что было не так много практики, были пробелы в знаниях. Ну, и дальше решил закрепить основы, потому что чувствовал, что плаваю в некоторых вещах. Собственно, пошел на курс BaseJava (который прохожу и поныне). Уже сейчас могу сказать, что курс идеально подходит для этого. Вроде думаешь, что все знаешь, но каждый раз открываешь для себя что-то новое в, казалось бы, очевидных вещах.
Также очень важным пунктом хочу выделить ревью кода: ребят, это не какой-то маркетинговый ход, что оно существенно повышает качество обучения и все такое. Это чистая правда, лично убедился в этом и продолжаю это делать. Поначалу я думал, что все делаю правильно и ко мне не может быть нареканий, но как же я ошибался. Ребята, которые проводят ревью (Максим, привет), в хорошем смысле, придираются к малейшим мелочам. И ты хочешь-не хочешь, но начинаешь писать грамотный, логически структурированный чистый код. Одной теорией уже не ограничиваешься, а реально пишешь правильный код на практике. А в программировании, убежден, практика дает 95% всех навыков.
Параллельно я плотнее изучал Spring и Hibernate.
В самом конце, пусть и пока поверхностно, но изучил микросервисы на Spring Cloud.
После я начал проходить собеседования. Забегая наперед, могу сказать, что довольно успешно. В следующем разделе как раз остановлюсь на них.
Что советую изучить перед поиском работы:
1. JavaRush — очень важный фундамент с самого нуля, изучение самой Java Core, Коллекций, Многопоточности;
2. Ближе к 35-му уровню, когда уже будет намечаться стажировка (которую однозначно советую) крайне рекомендую параллельно пройти курс от JavaOPs — BaseJava. Как уже говорил, это заполнит пробелы в ваших знаниях + если он будет еще и с ревью (а это однозначно самое важное!), то даст очень много практических знаний;
3. Собственно, переходим к стажировке после 35-го уровня — TopJava. Она не самая легкая (как по мне), поэтому и рекомендовал пройти перед этим BaseJava. С другой стороны, именно тут вы получите огромный практический опыт + реальный проект. Кстати, на него, как на, по сути, мой практический опыт, работодатели очень обращали внимание;
4. Параллельно со стажировкой изучаем Spring, Hibernate (хотя бы поверхностно — там нет чего-то сверхсложного), SQL (хотя бы до уровня JOIN'ов). Ну, про всякие Tomcat, Maven, JUnit и т. д. я молчу;
5. В качестве финала настоятельно рекомендую изучить микросервисы: понять, как что работает, в каком порядке запускается, как собирается в Docker'е и т. д. На собеседованиях (особенно в банках) на это так же очень обращают внимание. Если вы это более-менее знаете, то это позволит вам сразу выше задать планку — на вас уже могут смотреть как на junior+.
Что обычно спрашивали на собеседованиях:
Вначале вы просто кратко рассказываете, чем занимались, какие проекты выполняли (и вот тут-то и пригодится ваш проект на TopJava и микросервисное приложение). Также описывайте проекты, которые делали в рамках изучения, например, Spring.
Очень важно: ваш репозиторий — это ваше всё, ваша визитная карточка. Там обязательно должны быть эти проекты, ссылки на него должны быть во всех резюме.
Далее могут спрашивать про алгоритмы, их сложность. Возможно, дадут решить какие-то задачи. Очень вероятно, что будут теоретические вопросы про JMM, Garbage Collector, что особенного есть в Java 8 (или даже 11), особенности hashcode() и equals().
Обязательно спросят про Коллекции, их иерархию, что для чего нужно, какие есть. Очень сильно вероятно, что попросят сравнить быстродействие ArrayList и LinkedList. Однозначно будет вопрос, как устроен HashMap, как работают Comparator, Iterator.
Точно будут спрашивать про Исключения: их иерархия, какие проверяемые, какие — нет, как их можно обработать, что когда может возникнуть, нужно ли их обрабатывать и т. д.
90%, что спросят про Многопоточность: для чего нужно, как создать потоки, какие их состояния, блоки синхронизации, какие могут быть проблемы в многопоточности (состояние гонки, взаимная блокировка), основные методы.
50/50, что спросят про основные паттерны проектирования: синглтон, стратегия, шаблон и т. д.
Далее плавно вопросы будут уходить в Enterprise: основы сети (что такое http и т. д.), какие есть методы запроса (GET, POST и возможно спросят про PUT, DELETE). Могут спросить про REST и даже про SOAP, их отличия. Возможно, спросят, как работает MVC, а также всякие частности оттуда: сервлеты и т. д.
Обязательно будут вопросы про Spring. Думаю, смысла нет расписывать, что именно. Просто нужно изучить все, что с ним связано (например, курс Заура Трегулова на Udemy «Spring для начинающих» и серию видеоуроков Наиля Алишева по Спрингу (кстати, по ним делал приложения, о которых потом, в том числе, рассказывал работодателям).
Некоторые компании, особенно банки, будут активно гонять по микросервисах. О них уже писал выше. Так что лучше тоже изучить.
Также могут быть прочие вопросы, типа принципов SOLID, ACID и т. д.
Как происходил процесс поиска работы:
Я разослал всего 17 откликов на ХХ. Прочитали их примерно половина работодателей, практически все сразу изъявили желание провести собеседование. Реально же я их провел примерно 7 штук, и где-то в 5 из них в конечном итоге получил оффер.
Везде были достойные условия и зарплата, достойные компании.
В конечном итоге я выбрал СберТех, о чем вполне себе не жалею, мне все нравится.
Что могу отметить:
1. Повторюсь, ревью кода в таких проектах JavaOPs как BaseJava и TopJava действительно крайне важно! Это заставит вас осваивать всё максимально на практике, просто прослушать курс уже не получится;
2. JavaRush изучите хотя бы до 35 уровня (а лучше — до 40-го);
3. Изучайте также и побочные курсы как дополнение (Спринг, SQL и т. д.). Изучите все те вещи, что написал выше;
4. Если что-то не получается, что-то не знаете, опускаются руки и все такое — ребят, не вы первые . Это нормально, всё решаемо (как минимум, у вас есть Гугл и StackOverflow). Просто немного стараний и усидчивости, и все придет. Да и вообще, именно так опыт и приходит, как мне кажется;
5. Если задались целью стать Java-разработчиком, то идите до конца!
По моему опыту, если очень хорошо постараться, то все это можно изучить и за 1 год. В среднем, думаю, 1.5 года, если прямо комплексно все делать.
Да, я слышал, что некоторые сливаются на этом пути. Да, где-то это тяжело, где-то нужна усидчивость. Но после первой же зарплаты вы поймете, что не зря учились все это время — это если говорить о материальном. Но реально же, я бы не советовал сюда идти только из-за денег — мне кажется, надолго так не хватит никого. Вам нужно хоть немного любить это, вы должны реально этим интересоваться. А деньги — это уже вторичное.
Люди и ресурсы, которым искренне благодарен и кого мог бы с уверенностью посоветовать:
1. JavaRush — как и говорил, важный фундамент для старта;
2. JavaOPs и их проекты (BaseJava, TopJava и т. д.) — вы изучите все, что только можно;
Также спасибо их команде:
Григорий Кислин — организатор этих курсов, который реально хочет дать вам всю эту информацию и который всегда поможет.
Максим (на проекте BaseJava) — проводит ревью на данном проекте. От него не ускользнет ни один ваш косяк в коде. Хотите-не хотите, но он заставит вас делать код лучше.
Есть еще и другие ребята, но пока что я не работал с ними, не знаком. Но точно знаю, что они также знают свое дело и всегда вам помогут.
3. Наиль Алишев и его всевозможные курсы (Spring и т. д.) — после него даже все самое непонятное становится предельно понятным;
4. Заур Трегулов — классные и понятные курсы по Java и Spring, очень наглядное их объяснение;
5. Леонид Тишкевич и его курс на Udemy «Java c нуля и до первой работы» — именно там я и разработал свое первое микросервисное приложение, на которое так обращали внимание многие компании и которое, как мне кажется, окончательно ставит вас в ранг junior+.
Мои контакты
Если вдруг еще остались какие-то вопросы, то лучше всего со мной связываться в TG: @MrBadline или ВК: https://vk.com/badline13.
Оперативно отвечать не обещаю, но я постараюсь.