О чём и для кого эта статья?
Статья о том, как шаг за шагом при дефиците свободного времени обучиться и устроиться на работу сразу Middle Java разработчиком перескочив через Junior ступеньку, основанная на личном опыте, и о том, как мне это помогло, когда сразу после трудоустройства пришлось тянуть проект практически в solo.
Статья родилась как некий ответ на вопросы, которые мне часто задавали люди, находящиеся в таком же положении, как и был когда-то я, когда времени на обучение почти нет и хочется войти в IT кем-то выше, чем Junior разработчик.
Но сначала давайте пару слов о разнице между Junior и Middle
Если кратко, то всё сводится к разнице в знаниях, опыте в Java и фреймворках, способности эффективно решать задачи и самостоятельно и принимать небольшие проектные решения.
Для проведения более чёткой границы по hard skill’ам существуют матрицы компетенции, содержащие порядка сотни пунктов, которые чётко разграничивают что должны уметь Junior, Middle и Senior разработчики. К примеру, по одной такой матрице Junior должен как минимум знать monitor, wait/notify/notifyAll/sleep, synchronized, volatile, Thread, Future, Callable, основные Thread-safe коллекции, в то время как Middle должен к этому всему ещё знать ReentantLock, ReentantReadWriteLock, Standard Executors (Single-Thread, Fixed, Pooled), Scheduled Executor, Atomic (Integer, Boolean, etc), Concurrent collections, BlockingQueues.
Что было в моей жизни до IT
В школе учился в физмат классе. Всегда, мечтал стать программистом, но не верил в свои силы, поступил на ТехМаш и окончил универ с отличием став инженером в области машиностроения. Устроился CAE (Computer-aided engineering) инженером в российский филиал международной немецкой фирмы. Но в свои 30 лет понял, что хочу осуществить давнюю мечту и так начался мой путь в IT.
Почему я решил сразу стараться приобрести Middle компетенцию?
В 2017-2018 на рынке труда был переизбыток джунов, и некоторые эксперты заявляли, что на одну Junior вакансию может приходиться аж до 700 откликов! Естественно, это не повсеместно и один джун откликается ещё на несколько десятков вакансий. Но всё равно, конкурс был большой. Это впоследствии подтверждали те из коллег, кто трудоустраивался на свою первую работу в эти годы.
В это же время был ощутимый дефицит Middle специалистов и стали появляться курсы, которые утверждали, что сразу стать Мидлом реально. Я подумал, что за этим маркетинговым ходом всё же есть что-то рациональное и поэтому решил, что нужно попытаться сразу поднять планку компетенции выше уровня Junior, считая, что даже если по скиллам не буду соответствовать Middle, те знания, которые приобрету, чтобы его достичь всё равно будут весомым преимуществом среди других соискателей, что позволит легче пройти собеседование и трудоустроиться.
Как я учился
Что я использовал для обучения:
1. Учебники. Я так называю книги, которые содержат теорию, примеры, всё объясняется очень доступно, подробно и по ним удобно заниматься. Ярким примером такового я считаю «Изучаем Java» Кэти Сьерра, Берт Бэйтс. Она же Java Head First.
2. Пособия. Так я называю те книги, которые содержат много дельной информации, описание, примеры, но в отличие от учебников по ним крайне сложно заниматься и лучше их рассматривать больше, как вспомогательные учебные материалы. К таковым отношу Java SE 9 Базовый курс и Java SE 9 Вводный курс Кея Хорстманна.
В конце статьи я прилагаю перечень литературы, по которой учился сам и рекомендую другим.
3. Видеолекции. На просторах Youtube и других платформ есть куча циклов видеолекций, которые в максимально удобоваримом формате позволяют въехать в курс дела и местами даже более доступны для понимания, чем учебники и пособия.
Хотел бы выделить канал Алишева @alishevN, Школу ITProger @itproger и Уроки Java @husivm
4. Тренажёры. Это курсы, в которых проверка задачи происходит в автоматическом режиме, нацеленные, в основном, на практику, где теория хоть и есть, но по сути является вторичной:
4.1 JavaRush – наверное, самый популярный ресурс среди прочих подобных, на котором недавно также появился свой полноценный курс.
4.2. Stepik – очень хорошие мини-курсы с тренажёрами и мини-лекциями по Java. Особенно хороши курсы по SQL, помогающие быстрее набить руку в написании запросов.
4.3. LeetCode – ваш помощник по решению алгоритмических задач.
5. Полноценные курсы. Образовательные платформы предлагают обучение «профессии» Java разработчика от 6 до 15 месяцев. Многие из них как раз и заявляют, что сделают из соискателя сразу мидла. Самое главное отличие от тренажеров: проверка домашних работ учителем, которому если что можно задать вопрос.
До трудоустройства я проходил таких два:
5.1. SkillBox, «Java-разработчик (архив)». Так получилось, что я попал в тот момент, когда курс задеприкейтили. Дело в том, что выпускной работой, над которой приходилось корпеть в течение всего курса, было создание клиента Телеграма – Javagram, для написания которого нужно было изучать Swing что было практически бесполезно для бэкэндера в 2020-м. В определённый момент времени Javagram стало пилить крайне сложно, API телеги менялось, курс отправили в архив и создали новый, который куда лучше, но я уже в него не попал, а в старом завяз, так и не пройдя до конца.
От тех, кто проходил уже новый курс слышал, что он крайне неплох, но я, увы, это не могу оценить.
5.2 JavaOnlineProjects, «Topjava». В него я попал автоматически после тестового задания на 36-м уровне в JavaRush. На мой взгляд, самое лучшее по соотношению цена/качество что есть на рынке. По окончанию курса в моём портфолио было 2 проекта на самом востребованном стеке Spring’а.
Его я рекомендовал и рекомендую всем, но с одной оговоркой. Мне, как и большинству ребят, кто его проходил, он показался довольно сложным, что на самом деле отчасти хорошо, потому как когда что-то даётся с трудом, усвоение материала идёт лучше.
Тем ни менее, без должной подготовки многие сливаются и идут на повтор, либо вообще не доходят до конца.
Лучшим способом этого избежать – это пройти JavaRush до конца, изучив все материалы и разделы, взять ещё несколько курсов из JavaOPs, либо аналогичные от другой платформы.
6. Статьи на Хабре. Особенно полезны и интересны статьи образовательных компаний и преподавателей курсов. В некоторых таких статьях вынесены почти полностью лекции, которые преподаются на курсах платформы. Хотя очень часто люди и не относящиеся к каким-то образовательным компаниям пишут крайне хорошие статьи для новичков. Например, вот эта.
Если расписать путь по периодам:
В 2018-м я начал изучать Java по учебникам: выполнял каждое упражнение, писал каждый код, что встречал. Видеолекции обычно включал фоном при возможности.
В 2019-м продолжал учиться, стал кодить на тренажёрах, купил подписку на JavaRush.
В 2020-м учебники сменились пособиями, созрел и взял курс в SkillBox.
В 2021-м комбинировал разные практики в обучении и проходил стажировку в JavaOPS и доводил свою компетенцию до уровня Middle.
Почему получилось так долго?
У меня был дефицит времени, поэтому на обучение у меня уходило приблизительно 1-2 часа в день на всех этапах, кроме стажировки. Её совмещать с работой я не мог, поэтому пришлось уволиться, зато на стажировку и параллельное обучение у меня уходило по 5-6 и более часов в день.
Если брать только период активности, то при вышеупомянутых 1-2 часах занятий в день у меня ушло на всё про всё где-то 3 года.
При должном наличии времени занимаясь по 2-4 часа в день, данный путь можно спокойно осилить за 1,5 года.
Собеседование
Бытует мнение, что современное собеседование это не про работу, а больше похоже на викторину. Такое отношение очень полезно, чтобы сэкономить себе нервы и если мы говорим о таких конторах как Яндекс, то это почти так и есть, но есть и много других, в которых собеседование проводят люди, которые заинтересованы получить себе в команду не победителя викторины, а человека, с которым им было бы комфортно работать и который бы справлялся со своими задачами самостоятельно – именно таким человеком я и старался стать.
Резюме
В резюме я не накручивал опыт, но стажировку указывал как первый опыт работы, что считаю правильным, естественно не скрывая при этом, что опыт не был коммерческим. Старался быть кратким и не лить воды, придерживаясь мнения, что резюме должно умещаться на одной странице.
Тестовое задание
Обычно это было стандартное CRUD Spring Boot приложение с некой БД.
В этом не видел ничего сложного и страшного и если был заинтересован в вакансии, то всегда выполнял его.
С тем уровнем практики, который у меня сложился при таком обучении на выполнение задания обычно уходит 1-3 дня.
Теоретическая часть технического интервью
Самый распространённый способ проверки знаний интервьюера в форме вопрос-ответ.
Когда не бежишь галопом по Европам, а все знания укладываются долго и структурированно, то и подготовка к ней занимает всего несколько дней.
Есть ресурсы для подготовки вроде https://github.com/enhorse/java-interview
Но самое главное – это не столько ресурсы, сколько уверенное знание и понимание всех основных и ключевых моментов в Java и фреймворках и создание своего собственного мини-конспекта для подготовки.
Практическая задача на знание синтаксиса и работы Java. (опционально)
Обычно задачка на несколько строк кода, предусматривающая знание работы JVM.
Что будет выведено, упадёт ли приложение с ошибкой и тд…
Алгоритмическая задача (опционально)
Обычная вещь на интервью в Яндекс, но данную практику стали перенимать и другие работодатели. Так что рекомендую к этому подготовиться. Лучший ресурс для этого – LeetCode.
Написание SQL запроса (опционально)
Для этого рекомендую учебник по SQL и тренажёры. Плюс ещё есть «шпаргалки», где вся информация о запросах очень коротко и популярно описана.
Задача из практики в реальной жизни (опционально)
Такие часто бывают и их главная цель понять, как будет действовать интервьюируемый, как он будет пытаться решить аналогичную уже на работе.
Из 10 собеседований, пройдённых за пару недель, я получил оффер по половине почти сразу и ещё один прилетел в течение месяца.
Если не считать первые два блина комом, то самое минимальное как меня оценивали – это Junior+ (подчеркнув, что это только лишь из-за отсутствия коммерческого опыта), на всех остальных меня оценили как мидла!
Я выбрал дочернюю фирму крупной российской корпорации, в одну из команд которой искали замену ушедшему одному из трёх Джава разработчиков. Когда я спрашивал потом, почему из всех претендентов выбрали именно меня, сказали, что из множества претендентов «я был на голову выше остальных».
Трудоустройство
Взяли меня именно Middle Java разработчиком.
Мне обещали (более того, это даже прописали в трудовом договоре) возможности роста, бесплатное обучение, выполнение работы «с минимальной помощью ментора» и кучу других фишек.
Поэтому зарплатные ожидания я занизил, что было моей ошибкой, и лишь потом узнал, что мог просить в 1,7 раза больше! (верхний порог моей вилки).
Онбординг был классный, но, когда я вышел после него, оказалось, что вслед за разработчиком, на место которого я устраивался, уволились и остальные два Джависта.
Оказывается, ещё год назад в команде было всего 5 разрабов, но не находя общий язык с начальством, все они ушли один за другим.
Я остался единственным разработчиком в команде с владельцем продукта и ещё двумя аналитиками. А через пару месяцев должен был быть релиз первой версии ещё сырого продукта, который пилили уже больше года.
Мои коллеги мидлы из других компаний и подразделений, с которыми я познакомился во время онбординга были в шоке. Друзья и знакомые рекомендовали сразу писать заявление и уходить.
Но я не уволился, чтобы не подводить тех, кто остался в команде и доказать, в первую очередь себе, что стал мидлом не только по оценке на собеседовании и графе текущей должности. И я сдюжил, хоть и было нелегко.
Уже через несколько месяцев нам дали зелёный свет, и я уже был по другую сторону собеседования, чтобы набрать себе в помощь ещё двух ребят.
Спустя два года после трудоустройства был сделан новый функционал, сдано ещё несколько релизов, проект был допилен, отшлифован и теперь я уже мог спокойно его покинуть.
Перед увольнением высказал пожелание, чтобы вместо меня выделили ставку и наконец‑то взяли Сеньора в команду, на что владелец продукта крайне удивился: «А ты разве не Сеньор?». Это мне придало сил и уверенности и им я как раз и собираюсь в ближайшее время стать, но для этого надо учиться, учиться и ещё раз учиться.
О том, что не ушёл в трудную минуту, не жалею, это был очень хороший опыт. Тех, кто это сделал до меня тоже не виню. Потому что действительно на себе ощутил ту ситуацию, в которой они отчасти были: проблемы с повышением грейда и ЗП (помимо корректировок по инфляции) То нет ставки, то кормят завтраками, то вот уже договорились, но меняется руководитель, потом руководитель руководителя, то всех переводят из одной структуры в другую и, в связи с этим все значатся в новой должности и невозможно никак повысить, потому что в системе это можно делать не ранее чем через полгода после того, как вступил в новую должность. Та же самая проблема была с обучением, которое я так и не мог получить и приходилось брать курсы уже за свои деньги.
Вот так я решил изначально стать Middle Java разработчиком, закончил курс, автор которого не безосновательно утверждал, что готовит именно Middle разработчиков, после был оценён как Middle на собеседовании, официально им трудоустроился, что было прописано в личном профиле, и в этой роли, по сути, в проекте и оказался, когда как единственный разработчик решал задачи самостоятельно и принимал небольшие проектные решения.
Задавался вопросом, а быть может надо было пытаться пройти стажировку и трудоустроиться Junior разработчиком раньше, а через пару лет опыта как раз бы и пришёл к Middle разработчику? — Возможно.
Знаю коллегу, который завершил ту же самую стажировку что и я и устроился в ту же фирму, что и я, но вот уже прошло почти 2 года, а он всё ещё Junior Java разработчик.
Так что не всё так однозначно.
Выводы, которые я сделал пока проходил этот путь
Нет никаких непреодолимых препятствий для того, чтобы стать разработчиком!:
Дефицит времени не делает цель недостижимой, он просто отодвигает её во времени. «Нет времени» зачастую просто отговорка. Я знаю людей, у которых по 2-е, 3-е детей, из которых есть совсем маленькие карапузы, требующие много времени и внимания. Но даже это их не останавливало, и они всё равно находили время для того, чтобы учиться.
Возраст тоже не является барьером. У меня в потоке на курсе было двое студентов, которых взяли на их первую работу джунами в 46 и 47 лет, и я уверен, что это не предел!
Расположение тоже не помеха, сейчас есть удалённые вакансии и даже переезжать никуда не нужно, что тоже на самом деле при большом желании не является преградой.
Немного ложки дёгтя
Не хочу быть неправильно понятым. Непреодолимых препятствий хоть и нет, но получается, увы, не у всех. Помимо желания стать разработчиком нужно обладать ещё упорством, целеустремлённостью, способностями и мотивацией. Не говоря уже о том, что то, чем человек занимается должно как минимум нравиться. Отчасти из‑за этого до конца курсов доходят не все.
Недавно подсчитал, из 13 моих друзей и знакомых, которые мне говорили, что хотят стать разработчиками, только половина начала обучение, а до трудоустройства дошёл пока только один.
И ещё несколько рекомендаций сомневающимся как не ошибиться с выбором пути
1. Первоначально понять, а действительно ли хочется быть разработчиком, ведь в IT есть не только программисты.
2. Если да, то определиться с областью, в которой хочется вести разработку. (front, back, gamedev, …)
3. Не покупать сразу курсы за OverДохрена денег, а приобрести учебник «для начинающих», «для чайников», «за 24 часа» и просто попробуйте. Если понравилось – Ваше. Есть сомнения – Нет.
4. Ознакомиться, какие есть RoadMap’ы, понять, какой должен быть путь обучения, взять уже имеющуюся, либо откорректировать и сделать свою.
5. Использовать любую возможность писать код по учебнику и в тренажёрах, учить теорию: установить на смартфон JavaRush, Stepik, Sololearn, фоном включать лекции, когда есть возможность, с собой носить учебник или хотя бы Карманный справочник, брать его в поездки.
6. Выучить основы Git’а, зарегаться на ГитХабе и начать уже писать код и выкладывать его.
7. Выбрать курсы с умом. В хорошем курсе помимо лекций и достаточных учебных материалов должна быть проверка домашних заданий, возможность задать вопрос и самое главное, в его лекциях и выпускной работе должен быть востребованный стек технологий, который легко гуглится среди вакансий на hh.ru и Хабр Карьере.
8. Если оценивают как мидла – проси ЗП как у мидла!
9. При подготовке к собеседованию лучше самому вести конспект из наиболее сложных вопросов и тех, которые вызывали затруднение на предыдущих интервью.
10. Зачастую соискатели в резюме и на собеседованиях пытаются создать такой образ, которому и близко не соответствуют: приписывают несуществующий опыт, навыки и знания. Я всегда считал куда лучшей практикой и в резюме, и на собеседовании пытаться максимально быть честным и, если ещё с чем-то не сталкивался и не знаешь, честно признаваться в этом и стремиться всегда соответствовать тому образу, который заявлял, иначе это может сыграть против тебя.
Ещё пару слов напоследок
Рынок постоянно меняется. Бум курсов и автоматизации многих процессов разработки постепенно сводит на нет дефицит людей с навыками уровня Junior. И на этом фоне, на мой взгляд, люди с навыками уровня Middle, даже если у них нет как такового опыта работы, будут в разы более востребованы.
Полный список литературы, который мне был полезен на протяжении всего обучения
Java 9 (8) для чайников | Барри Берд - Книга именно для тех, кто вообще ничего не знает о программировании. Всё очень хорошо и доходчиво объясняется и разжёвывается.
Изучаем Java | Кэти Сьерра, Берт Бэйтс. Она же Java Head First. – Это, пожалуй, лучший учебник, который не даст скучать: Пазлы, ребусы, задания и всё для наилучшего понимания и усвоения материала.
Java для всех (Программирование на Java для начинающих) | Алексей Васильев – Не так всё разжёвывается, как в предыдущем, но оригинал книги автор писал на русском, что ликвидирует возможные косяки перевода. Плюс немного больше материала.
Java за 24 часа | Кейденхед Роджерс – Прекрасный учебник. Несмотря на хайповое название действительно содержит кучу приличных и интересных вещей.
Java SE 9 (8) Базовый курс | Кей Хорстманн – Книги содержат все моменты теории Java и хорошо и лаконично её описывают. Ничего лишнего.
Java SE 9(8) Вводный курс | Кей Хорстманн – Книги содержат все моменты теории Java которые появились именно начиная с 8-й версии.
Java Concurrency на практике | Брайан Гетц – Однозначно лучшее пособие по многопоточности в Java.
SQL для чайников | Аллен Тейлор – Из той же серии, что и Java 9 (8) для чайников. Доступно крайне простым языком.
Spring Boot 2.0 | Фелипе Гутьеррес – На мой взгляд, это лучшая книга по Spring Boot с примерами для быстрого старта.
Spring 6 (5) для профессионалов | Юлия Козмина и другие – полное, хоть и не исчерпывающее, руководство по Спрингу. Единственное, в виду некачественного перевода, без слёз её читать на русском нельзя. Лучше пользоваться оригиналом.
Паттерны объектно-ориентированного проектирования | Банда четырёх. – Самая базовая и известная книга про шаблоны проектирования.
Java 8 Карманный справочник | Роберт и Патрисиа Лиугуори – очень полезная вещь, но не как справочник, а как краткий конспект для подготовки к собеседованию.
Java. Эффективное программирование | Джошуа Блох – это вообще классика, которая должна быть в библиотеке любого Java разработчика.
Комментарии (30)
temabed
26.07.2023 15:49+2Воодушевляет. Я бы поставил лайк, но мне нельзя, я новенький. А в бэкэндера решил выучиться после 35, кстати, вообще из гуманитария. И с дефицитом времени полный порядок (две работы, ИП, семья, дети... кошка). Но похвастаться мне еще нечем, на гитхабе только скрипты, поэтому пойду дальше учиться, а не на хабре мечтать...
syrtin Автор
26.07.2023 15:49Есть мнение, что программирование это как раз гуманитарная наука. Так что из гуманитария вообще может быть даже в каком-то плане удобнее переквалифицироваться.)
Тут главное видеть цель и не замечать препятствий)Batalmv
26.07.2023 15:49Интересно, на чем это мнение основано? :)
syrtin Автор
26.07.2023 15:49+1Обосновывают тем, что в программировании помимо навыков, связанных с математикой и инженерией есть множество гуманитарных, в частности языковых, ведь у кода есть свои правила, синтаксис и грамматика, а большая часть времени всё же приходится именно на чтение и изучение кода.
sshikov
26.07.2023 15:49+3К примеру, по одной такой матрице Junior должен как минимум знать monitor, wait/notify/notifyAll/sleep, synchronized, volatile, Thread, Future, Callable, основные Thread-safe коллекции, в то время как Middle должен к этому всему ещё знать ReentantLock, ReentantReadWriteLock, Standard Executors (Single-Thread, Fixed, Pooled), Scheduled Executor, Atomic (Integer, Boolean, etc), Concurrent collections, BlockingQueues.
Простите, но в реальности Junior вообще не должен допускаться до многопоточности (потому что это объективно сложно), особенно — с применением таких низкоуровневых примитивов, как wait/notify/notifyAll и т.п. В тоже время, упомянутые Atomic — средства более высокого уровня, которыми Junior как раз и должен пользоваться, когда пишет прикладное решение (если уж ему вдруг отчего-то такое доверили). Ну то есть, если ты джун, и никогда такого не писал — возьми то, что попроще, и воспользуйся готовым. Ошибиться, применяя ConcurentMap, намного сложнее, чем реализуя что-то свое на базе synchronized или volatile.
Иными словами, все должно быть наоборот — компетенции надо поменять местами, и тогда будет ближе к правде.syrtin Автор
26.07.2023 15:49Я тоже как и Вы считаю, что Junior не должен заниматься многопоточностью, потому что действительно это – объективно сложно. С этим согласен.
Также возможно Вы отчасти правы касательно коллекций, но при всей низкоуровневости считаю, что методы класса Object wait/notify/notifyAll "Junior должен как минимум знать", а именно в такой формулировке я это привёл изначально.Wait/notify/notifyAll в совокупности со sleep, synchronized, volatile, Thread, Runnable (+ не всегда, но зачастую ещё Future и Callable) именно так идут во всех учебниках для новичков и начинающих, преподаются на 6-м и 7-м уровнях курса Java Core на JavaRush. Это база.
В отличие от Atomic'ов которых обычно на первом этапе обучения Java нет!, а они появляются уже потом, когда изучается механизм CAS.sshikov
26.07.2023 15:49+2считаю, что методы класса Object wait/notify/notifyAll "Junior должен как минимум знать
Дело в том, что от этого знания нет никакого толку. Поэтому если я буду набирать вдруг джунов, я не буду у них это спрашивать. Надо будет — потом изучат. Как-то так. И начнут при этом пусть с высокоуровневых более новых примитивов, а не с того, с чего начинают в учебниках, написанных людьми, которые вообще никогда многопоточные приложения не писали.
Простите, тут я с Вами вообще никак не могу согласиться.
Простите, но вы (исходя из вашего текста) только начали изучать в 2018 году. А я был тимлидом в 2005, а работать на Java начал примерно в 1998. То есть, наш с вами опыт несопоставим. Можете не соглашаться, дело ваше. Мой пойнт в том, что на каждом уровне изучать надо то, что ты в состоянии применить, а не то что принято (на самом деле — то что исторически появилось раньше). Из того что оно раньше появилось — не значит, что оно лучше вообще, или лучше подходит джунам. Ровно наоборот — позже были созданы примитивы и классы (например коллекции или всякие барьеры), которые в использовании проще и удобнее, и дают меньше шансов ошибиться — потому что создали их на основе опыта применения первых версий.
syrtin Автор
26.07.2023 15:49Я сразу понял, что у Вас большой опыт в Java. Никак не хочу принижать вес Вашего опыта и знаний.
Но и Вы поймите, во-первых, то распределение – не моё know how, я не выдаю его за единственно верное и дал его как пример одного из,
а во-вторых, в курсах и учебных пособиях, которые созданы тоже людьми авторитетными в мире Java с опытом таким же значимым как и у Вас каноничным является именно такой приоритет для градации компетенций в Java.
Вашу логику я понимаю, но я буду придерживаться всё же того приоритета, который описал выше.sshikov
26.07.2023 15:49+1Так вы не обязаны моей логикой пользоваться, и я тоже не считаю ее единственно верной. Моя логика — это логика человека, который набирает разработчиков в команду, и кому важно, что они могут реально делать. Ваша — логика человека, который хочет сам научиться. У нас вполне могут быть разные приоритеты в порядке изучения чего-то. Да, это просто другой подход к матрицам и компетенциям — что на любом уровне не особо нужны компетенции, с которыми человек все равно не справится. Но если вы хотите все и систематически изучить в теории — то порядок возможно не так и важен.
Wan-Derer
26.07.2023 15:49+1Н-да.... Интересно. Учиться 1-2 часа в день и иметь реальные результаты это прям талант. Я учился с полным "отрывом от производства", больше года без выходных и праздников, потом 3 месяца искал работу, повезло устроиться туда где не требовалось знания Спринг, его доучивал уже работая.
Я в нашей компании вообще один "джавист", пилю куски, "побочные" относительно нашей системы и это сразу с нуля, не имея на старте вообще никакого опыта :)
Сейчас, через 2.5 года работы имею:
пару проектов, кое-как доведённых до рабочего состояния, но отложенных т.к. надобность в них временно отпала;
один проект в проде и реально используется (это прям была радость посреди вселенской безнадёги): Spring + Angular, да, я настолько один что и фронт приходится самому :)
текущий в работе: без Spring, но на Reactor-Netty + React, вот такая загогулина :)
Но как-то.... я не мидл, по деньгам уж точно. В общем, я не подвергаю сомнению историю автора, но думаю что это результат сочетания таланта и везения, но никак не "каждый так может".
PS: посоветуйте хорошие ресурсы по Reactor! Очень тяжело идёт эта тема.... В своё время так же не понимал Stream API, но нашёл на Степике отличный курс, который прямо на задачах "провёл" от простого к сложному, открыл мне эту чакру и теперь я с удовольствием использую стримы на практике. Вот бы то же самое для Реактора!
prok_iv
26.07.2023 15:49+1Прочитал вашу статью и понимаю что вы проходили . Та же история: 50 с лишним откликов на джуна в области администрирования и 0 приглашений. Тема везения на старте становится архи важной, так как до этапа , когда можно показать знания, даже не доходит.
syrtin Автор
26.07.2023 15:49+1Когда я выкладывал резюме, у меня количество приглашений было 20+, а я даже не откликался на эти вакансии, в то время, как у некоторых однокурсников было всего 2-3.
Помимо везения есть ещё ряд факторов и критериев, на которые обращают внимание HR и те, кому они передают резюме для ознакомления.
На эту тему общался с HR и как-то хотел написать это в статье.
Но все эти факторы настолько субъективны, спорны и порой обидны, хотя почти все поправимы, что, боюсь, если я их перечислю, меня закидают шапками, что я вообще не прав и всё совсем не так)))prok_iv
26.07.2023 15:49Через шапкозакидательство проходил, поэтому более чем понимаю.)
Но как человеку, который понимает: 1. что столкнулся с фильтром HR во всей красе 2. осознает, что что-то делает нет так. 3. Готов прислушаться и сделать выводы было бы познавательно.
syrtin Автор
26.07.2023 15:49Ок, тогда напишу в личку.
Afler
26.07.2023 15:49Что ж личку то! Если и мне напишете - буду признателен
А в общем знаниями не грех делиться, пусть даже субъективными
syrtin Автор
26.07.2023 15:49Потому что, Во-первых, как я уже сказал выше, многие вещи очень субъективные, спорные и вызывают очень много "да это всё не так" и "да все это и так знают", в то время как эти вещи Реально помогают из моей практики и моих коллег, друзей и знакомых
Во-вторых, это на самом деле действительно индивидуально и зачастую мне говорят, что у них всё так, но вообще ни просмотров, ни откликов, а начинаешь предметно смотреть и там обнаруживаешь один какой-то нюанс, который подправить и всё, у человека всё работает) просмотры у резюме крутятся, приглашения мутятся, так что порой надо таргетировано.
syrtin Автор
26.07.2023 15:49+1Полный список не буду приводить по вышеуказанным причинам, но вот Топ10, как оказалось, неочевидных вещей, которые казалось бы полный пустяк, но тем ни менее реально решают:
Нужно фото, при том Ваше, нормальное, чтобы Ваша анкета не была обезличенной и не отпугивала.
Нужно убрать из вакансии упоминание Junior, в заголовке анкеты и тексте, в анкете оно не нужно, что джун и так поймут.
Навыки должны быть в пункте "Ключевые навыки", а не где-то в тексте о себе. Поиск по ним.
Туда же в "Ключевые навыки" бесполезно пихать всякие "ответственный и компетентный", "очень хороший и старательный" это наоборот отталкивает.
Берите вакансии, на которые хотели бы откликнуться, посмотрите, какие там требования описаны и если что-то упустили, либо у Вас написано не так как там, то исправляйте.
В те же самые ключевые "Ключевые навыки" не пишите "Умею работать с БД" или "Работа с базой данных в Spirng", пишите конкретные технологии "SQL", "Spring Data", "Spring Data JDBC", "Spring Data JPA", "JPA", "JDBC",... то есть вообще детально нужно описывать.
Не лейте воду. К примеру, я мог бы в начале пути написать "Всегда хотел быть программистом. Мечтал об этом сколько себя помню. Свой путь начал... Хочу стать ...". Нет! Если хочется это как-то написать, то кратко и в одно предложение: "Люблю программировать".
Многие пишут "Я много не знаю, но сейчас этому учусь и буду знать...", "Сейчас не умею, но потом собираюсь приобрести навык в ...", "Готов улучшать и нарабатывать новые навыки ...". Нет! Это тоже не нужно. Учатся все, а вот такие промисы и завтраки никому не нужны, это отталкивает. Важно только то, что умеешь сейчас.
Опыт работы. Всё что меньше года желательно убрать, даже если это была подработка, прыгун не нужен никому. Исключением будет, если это действительно стажировка, первый опыт работы.
Не давать ложную и некорректную информацию, если HR Вас спалит, можете вообще пойти в ЧС, а Вы даже не узнаете об этом.
gluck59
26.07.2023 15:49+1Когда вы наберете достаточно опыта, то обнаружите что вместе с опытом приходит и возраст. И ваши 50 откликов превратятся в 250 с тем же результатом.
Т.е. до этапа, когда можно показать знания, вы точно так же не дойдете, потому что у эйчаров есть автофильтр по году рождения, отсеивающий вас еще в самом начале.
syrtin Автор
26.07.2023 15:49+1Про Reactor Netty: В основном, конечно, сейчас реактивное программирование идёт на Spring через WebFlux.
Какого-то удобоваримого ресурса по Reactor Netty в чистом виде на русском я не встречал, в учебниках вроде Spring Boot 2, который я приводил, эта тема даётся как преддверие к WebFlux.
Помимо https://projectreactor.io/learn, роликов на Ютубе и статей, только курсы, где изучается NIO -> Netty -> Reactor Netty -> WebFlux.Wan-Derer
26.07.2023 15:49+1К сожалению, на этом проекте Spring мне запрещён :) С одной стороны, потыкать на более низком уровне тоже интересно, но, блин, как же медленно всё даётся! Я есть страдать!
ЗЫ: зато сервер запускается за 0 секунд ... вместо 3-х - ДОСТИЖЕНИЕ! :)
yakun123
26.07.2023 15:49Поймите главное, если вас взяли мидлом в одну компанию, это совсем не означает что вы реально миддл. Это деление весьма условно. Миддл в Сбере и в Яндексе это разработчики совершенно разного уровня. Более того я часто видел ситуацию когда синьоры переходили на уровень Джуна, например, в FAANG.
syrtin Автор
26.07.2023 15:49+1Поверьте, я это прекрасно понимаю, всё очень относительно.
Но считаю, не стоит впадать в крайность, если так, то в каком-то отношении мы все джунишки, я в первых рядах))Поэтому, чтобы не было недопониманий, предвосхитив такую критику я специально выделил несколько критериев, которыми я оперировал.
Это и заявленный уровень курса, который закончил с отличием, и соответствие по матрице компетенции, в том числе по той, которая была у моей фирмы-работодателя, где тысячи джавистов, и то, как меня оценивали почти во всех других фирмах, и именно прописанная позиция в фирме, и такие критерии как самостоятельное ведение проекта, принятие проектных решений, сдача в релиз и так далее.
igorekudashev
26.07.2023 15:49+1Как раз таки и означает. Если человек работает на позиции мидла, то он мидл
headliner1985
26.07.2023 15:49Судя по тому что лежит в опенсорс от Яндекса на джаве, там либо не хватает ресурсов и времени, либо олимпиадники не дотягивают до международного уровня промышленного программирования. Смотрел Яндекс db sdk, по сравнению со spring data и прочими спринговыми библиотеками небо и земля. В принципе такое же ощущение и от гугловых sdk, там черт ногу сломит. Так что олимпиадность на мой субъективный взгляд даже вредна для хорошей промышленной разработки.
prok_iv
Спасибо за статью. Жизнеутверждающая. Как вы оцениваете фактор везения в своей истории?
Напоминает о том, что надо задавать себе вопрос: "Веришь ли ты в то что делаешь?" (главное не забывать об "ошибке выжившего")
syrtin Автор
Фактор везения всегда присутствует. Но мне кажется, тут больше сыграли такие факторы, как труд и подготовка, если конечно не считать момента, когда я попал в команду из которой от состава в 5 разработчиков в начале года к концу осени остался всего один и это был я. Тут уж повезло, так повезло.)