04 июня 2016

"Алло, мы ищем Java Developer-a!"

Всем привет!
Так случилось, что в конце мая 2016 года я решил "закинуть удочку" в мир предложений о работе для Java Developer-a в Москве, дабы синхронизировать своё представление о нём с реальностью, оценить насколько мой skill set вообще релевантен требованиям работодателей и не остаться к хренам без хорошей работы подстелить себе соломку на всякий случай :)

На данный момент я уже вторую неделю прохожу собеседования в московских компаниях разного вида (продуктовая и заказная разработка) и уровня "крутости".

Возможно, мой срез состояния рынка вакансий Java Developer на май 2016 поможет кому нибудь сориентироваться в трендах работодателей, чтобы оставаться привлекательным для работодателей разработчиком. Всё ниже описанное - мой личный опыт, прошу это учитывать.

Площадки публикации CV


Первым делом стоит написать своё резюме (Curriculum vitae, CV), в котором стоит указать информацию о себе, где учились, где работали (чем занимались, с какими технологиями работали, сколько лет), какие ваши профессиональные интересы, достижения и всё остальное, что может описывать вас как профессионала. Интернеты полны кучей сайтов с примерами небанального оформления CV.

Далее укажу ряд рекомендаций, которые на мой взгляд должны вас качественно выделить из толпы "23-ёх летних Senior Java Developer-ов" с резюме до колен в 3 страницы A4.
  • Если вы программист, то не добавлять в навыки всякий bullshit типа опыт работы с 3-мя версиями Windows, MS Office и прочими банальными вещами.
  • Аналогично и про черты характера. Проверить их заочно сложно, а соврать легко.
  • Ну и само собой не надо в своём CV указывать то, с чем вы не работали настолько, что можете подтвердить свой опыт работы. Я, к примеру, имел опыт работы с разными JS фреймворками типа Angular, React, но решил ограничиться просто указанием, что знаком с "Web basics: HTML, JS, CSS", т.к. это были скорее просто увлечения на пару дней, чем какая-то серьёзная работа. Да и отношения к основному роду моей работы они не имеют (да и заниматься этим всем я не особо и хочу). Понятно, что у всех разное понимание слов "работал/имею опыт работы с/знаю" в отношении конкретных технологий и тут как мне кажется лучше либо отсортировать свои навыки по уровню владения ими или же в явном виде при первом разговоре честно заявить о подобных нюансах. В общем, лучше меньше, да лучше, чтобы не пришлось потом краснеть, когда вас уже наймут. Хуже новичков наверно только те, кто вводит в заблуждение о своих навыках. Этот вывод нас сразу наводит на мысль о том, что если вы понимаете, что вам крайне желательно указать в своём CV какой то buzzword, который делает вас более привлекательным для определённого множества работодателей, но вас стремает о нём писать, т.к. вы с ним работали совсем немного, то это отличный повод начать его нормальное изучение!
  • Если у вас есть опыт командной работы над продуктами, то стоит подробно указать чем именно вы занимались при его разработке, особенно это касается реально сложных и масштабных проектов. Понимаю, что подмывает написать фразу типа "разработка клиент-банков", чтобы создать образ этакого гениального творца и мастера на все руки, даже если на практике всё, чем занимался это только клепание однообразных веб форм.
По поводу самих сайтов для размещения CV. Сейчас есть как минимум два достойных ресурса, на которых можно опубликовать своё резюме для работодателей - зарубежный LinkedIn.com и HeadHunter.ru

Неочевидные отличия в них в том, что LinkedIn кажется более спокойной площадкой. Там люди создают свои достаточно подробные профили, создают круги знакомств, иногда на тебя выходят hr-ы далеко не только из РФ. Этакая обычная социальная сеть, с уклоном в работу.

HH - это сайт с более агрессивной что ли идеологией. Свой профиль можно либо скрыть из поиска вообще, либо показать. Но если ты показываешь, то всем становится виден твой номер телефона, заполнение которого является обязательным требованием на данном сайте (upd: в 2019 году телефон из резюме можно скрыть).
При этом практика показала, что большинство hr-ов кладут болт на то, что ты указал skype или свою почту как рекомендуемый способ связи. Когда я открыл своё резюме на HH, то в первый же рабочий день на меня свалилась куча звонков из достаточно известных московских компаний с предложением обсудить их вакансии и т.п. Несомненно приятно, когда к твоей персоне такой интерес, но даже для меня это было слишком, т.к. я надеялся спокойно оценивать состояние рынка, а не планировать уже в этот день по 2 skype интервью в день на неделю вперёд. Уже в первый день я набрал пул заявок из более чем 5 достаточно известных компаний и вечером убрал свой профиль из поиска, чтобы спокойно разобраться хотя бы в том, что уже "наловил".

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

Йа ЗвеЗдА!

Если вы всерьёз взялись за поиск работы, то стоит заранее определиться с вашими предпочтениями по работе и trafe-off, на которые вы готовы пойти, дабы не сойти с ума от кучи полученных предложений о работе. Я для себя составил небольшой манифест, в соответствии с которым выбирал и сортировал предложенные вакансии.

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

Как правило обычные интервью с hr-ом это не больше получаса беседы, на котором вас обязательно спросят о своём опыте вкратце и расскажут о вакансии и о компании. 
А вот техническое интервью может быть час и даже больше, требовать наличия компьютера для написания кода в online редакторах и вообще хорошего расположения духа и сосредоточенности. Поэтому стоит обязательно уточнить формат интервью и ориентировочную продолжительность прежде, чем на него соглашаться :)

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

Тренды Java Development-a или "Ой, мамочки, я - днище"

Наконец то мы добрались наверно до самой полезной части этого поста - мои наблюдения о том, что сейчас требует рынок от Java разработчика.
Стоит сразу отметить, что несмотря на то, что мы ищем вакансии, где основным требованием является знание Java, разброс в требованиях достаточно немаленький и связан он не только с уровнем "крутости" компании. Я попытался выделить типичные паттерны, которые наблюдал на рынке вакансий.

Типичный аутсорсер

Достаточно известные, большие и матёрые компании, работающие в области заказной разработки, которые давно на рынке. 
Топовые представители предлагают очень привлекательные условия работы (relocation для иногородних, хороший офис, расширенный набор "плюшек", льготное кредитование).
В вакансиях наблюдается широкий спектр требуемых технологий почти на любой вкус: 
  • Олдфаги оценят стандартный мир JavaEE в виде Hibernate, JAX-RS, SOAP, EJB2, Web Sphere, Oracle, JDBC, JMS, Servlets.
  • Молодых разработчиков могут заинтересовать проекты на Spring (Beans, MVC, Security) + Jetty c одновременным клепанием фронтенда на HTML, JS (JQuery), CSS. Знание известных фреймворков типа Angular, React будет плюсом.
  • Появляется достаточно заметный Big Data-тренд, где придётся использовать Hadoop.
  • Иногда в вакансиях упоминаются требования к опыту работы с Data Grid-ами и Distributed Caches типа GridGain, Hazelcast.
  • Совсем редко упоминаются требования к опыту работы с NoSQL.
Общие требования:
  • Уверенное знание Java Core (коллекции, общее понимание java concurrency).
  • Опыт проектирования БД и знание SQL.
  • Умение тестировать свой код.
  • Часто требуется опыт чтения UML, ER диаграмм.
  • Знание Enterprise Integration Patterns.
  • Часто требуется хорошее знание английского языка, скрывающееся за фразой "fluent english", которое проверяется готовностью пройти техническое собеседование на английском, т.к. в аутсорсе команды часто распределены по странам.
Из самих проектов - это всякие банковские, логистические, eCommerce приложения на разных этапах их разработки (в том числе и новые на трендовых технологиях, которых большинство разработчиков и в глаза не видело). 

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

Топовые продуктовые компании рунета

Элита, что ещё тут сказать :) Не буду скрывать, что именно к ним мне и охота попасть.
  • Как правило команды состоят из действительно крутых людей. Других собственно и не берут.
  • Работа над проектами, на которые каждый день заходят миллионы людей.
  • Шанс получить уникальный профессиональный опыт в области передовых изобретений науки и техники.
  • Не менее достойный пакет плюшек, как и у топовых аутсорсеров.
  • Очень поднимает самооценку :)
Требования:
  • Уровень знания Java Core, Java Collections, Java Concurrency близкий к отличному.
  • Хороший уровень "математической культуры".
  • Знание классических алгоритмов и структур данных. Боюсь, что такой уровень знаний дают только топовые вузы. Остальным студентам нужно прокачиваться либо по направлению олимпиад по программированию, либо читать толстые классические книжки типа Кормена.
  • Умение тестировать свой код.
  • Желателен опыт разработки высоконагруженных и распределённых систем.
  • Опыт и понимание SQL и NoSQL.
В общем, эти вакансии видимо направлены на поистине уникальных людей в текущих реалиях - достойная подготовка по направлению Computer Science + достаточно серьёзные знания языка программирования (а часто и не одного) и узкого круга базовых технологий, а не 100500 фреймворков. Обычному смертному отбор сюда пройти практически невозможно. Отличный шанс для студентов с хорошим IT образованием, нормальной соображалкой и достаточным упорством, которые не продолбали 5 лет обучения, запрыгнуть сразу после вуза в топовую компанию.

Yet another startup

Сюда отнесём как собственно стартапы, так и просто молодые компании, которые уже достаточно уверенно что-то пилят на Java (game dev, eCommerce и т.д.).
В зависимости от степени суровости поставленных перед разработчиками задач набор требований для кандидатов может варьироваться. 
  • Очень часто в таких компаниях штат сотрудников очень небольшой и поэтому сюда требуются люди с достаточным опытом, за которыми не нужно будет постоянно приглядывать и которых можно смело подпускать к серверам продакшена.
  • Сотрудник должен быть достаточно опытным и с широким кругозором, который может выполнить работы от проектирования до выкатки функционала в прод в режиме Single Player.
  • Если есть желание быстрей добраться до позиций профессионального DevOps, CTO, архитектора, Full Stack * Developer - вам сюда.
Требования:
  • Хороший уровень знания Java (Core, Collections, Concurrency)  и достаточный опыт работы.
  • Опыт работы с SQL/NoSQL - MySQL, Postgre, MongoDB, Cassandra, Redis.
  • Опыт работы с веб серверами типа Jetty
  • Опыт работы с кэшами типа memcache.
  • Умение тестировать продукт.
  • Навыки работы с Unix.
Само собой если вы не обладаете всеми необходимыми навыками, то это не значит, что вам ход закрыт на 100%. Определённые рыночные условия могут склонить работодателя взять человека, который и не полностью подходит под требования. Но надеяться я бы на это постоянно не стал (особенно для "теплых мест"), так что лучше всё-таки "подстелить соломку" и двигаться вместе с требованиями рынка.

Краткие выводы

Если вы хотите оставаться востребованным, то скорее всего вам необходимо
  • Постоянно повышать уровень знания Java, изучать те области языка и платформы, с которыми раньше не сталкивались (например анализ HeapDumps, JMX). Если вы не смотрели ещё на Java 8 - стыд и позор вам. Если так и не осилили хотя бы стандартные concurrency примитивы и понятия не имеете как писать корректный многопоточный код - почитайте классику типа "Java Concurrency In Practice", посмотрите доклады про Java Memory Model Алексея Шипилева. Поначалу будет тяжело, но как раздуплитесь, то резко прибавите в своей стоимости. Там совсем не rocket science и многое уже объяснено достаточно понимабельно.
  • Изучите вещи, без которых не обходится средний проект на Java - Maven (+Gradle), IoC Container (Spring), техники и инструменты тестирования кода (JUnit), системы версионирования кода (Git).
  • Изучите стандартные вещи типа SQL и хотя бы один RDBMS, например MySQL и как в него вменяемо ходить из Java.
  • Изучите классические темы типа структур данных и алгоритмов, которые используются в том числе и в Java. Если вам по душе больше живое общение - посмотрите курсы, которые ведёт Фёдор Меньшиков (группа в ВК).
  • Изучите практические темы типа построение отказоустойчивых систем, написание качественного кода и его тестирование и следуйте этим принципам.
  • Старайтесь следить за трендами в разработке. Возьмите за правило следить за новостями из мира Java (например из подкаста "Разбор Полётов" или из кучи конференций, которые проходят в России, Украине и за рубежом). 
  • Посмотрите на вещи, которые уже достаточно уверенно начинают дополнять стандартный стек технологий - NoSQL хранилища (MongoDB, Cassandra, Redis), кэши (Memcache), менеджеры очередей (RabbitMQ), распределённые системы хранения конфигураций (Zookeeper), инструменты для service discovery (Consul)
  • Если вас интересуют вещи совсем на острие прогресса - Hadoop, Data Grids вам в помощь. Уже есть вакансии, где и это требуется!
  • Ознакомьтесь с тем, что используется для выкатки ваших приложений на продакшен - менеджеры конфигураций (Ansible), контейнеры (Docker), средства сбора и анализа статистики с серверов (Graphite). Начните знакомиться с Unix системами.
  • Почитайте о таких трендах как микросервисная архитектура, Continuous Integration, Continuous Delivery.
  • Возьмите за привычку повышать уровень знания английского технического и разговорного. Это существенно расширяет набор вакансий для работы.

Вместо заключения

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

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

Вопросы могут быть как и по Java, так и по смежным технологиям. Могут встречаться разного рода математические задачи, примеры которых гуглятся без проблем. Могут встречаться задачи на написание многопоточного кода, так что если вы идёте на позицию, где есть требования по знаниям в этой области, то будьте готовы запилить в режиме реального времени какой нибудь полностью корректный ReadWriteLock c нуля за 20 минут :)

На интервью некоторых компаний приходится писать код в online редакторах типа collabedit.com., в которых не будет вашего любимого автокомплита. 

Если вы дойдёте до on site интервью в офисе, то могут предложить решать задачи на бумажке или доске и вот в чём тут засада: т.к. вы пишите код от руки, то вы пишите его намного медленнее, даже если представляете что писать и как + если вы косячите, то приходится его переписывать почти заново. Соответственно проблема в том, что вам необходимо в голове сначала максимально подробно (в плоть до каждой конструкции) написать код, а уже потом только его писать. При этом если думать слишком долго, то есть шанс не написать вообще всё до конца, т.к. время интервью может быть жёстко лимитировано :)
В общем, из всех способов проведения интервью - написание кода на бумажке это самый крутой challenge.

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

В общем, становитесь профессионалом и да пребудет с вами Сила!
И да, я ещё не получил ни одного официального офера и вообще не решил что дальше делать.

PS:

По поводу результатов, если интересно.
Я пытался пройти целенаправленно в 3 компании, но в итоге эти попытки не закончились офером (и я вообще не уверен, что мне захочется пытаться попасть в них повторно когда-нибудь потом, т.к. на собеседованиях не только к тебе присматриваются, но и ты оцениваешь насколько тебе в этой компании будет комфортно работать. Как говорится, если ты не понравился будущим коллегам, то не стоит переживать - возможно и тебе с ними было бы не комильфо работать).
На технических собеседованиях в двух из них я не так чтобы показал себя прям на высоте (ACM-овское прошлое позволило конечно не выглядеть полным дауном, но меня нашли чем удивить; несмотря на продолжительный опыт работы с SQL оказалось, что некоторые фишечки я уже стал забывать), в 3-ей нашли человека с большим опытом в конкретных вещах, чем был у меня.

Возможно, получилось бы лучше, если бы я хотя бы немного подготовился по известным advanced темам, вопросы из которых стоило ждать. Но я так не собирался делать, т.к. считаю, что специальная экспресс подготовка к собеседованиям - это по сути обман работодателя и, что хуже, себя. Ты должен показать что ты умеешь делать разбуди тебя ночью, рассказать всё, что знаешь и понимаешь по теме вопроса, а не что недавно посмотрел или узнал в режиме аврала, как в универе перед экзаменом. Для меня куда важнее постоянно чётко осознавать границы своих способностей и степень полноты знаний, нежели казаться всезнайкой до первой "проверки боем". Мне хочется узнавать о своих "пробелах" раньше, чем это повлияет на работу.
Понятно, что такой суровый подход требует как постоянного закрепления имеющихся знаний и навыков, так и активного поглядывания по сторонам, на что лично у меня сил пока хватает. ИМХО, репутация всё-таки дороже разового может быть хоть и очень профитного выпендрежа.

В сухом остатке

В общем, я получил кучу полезного инсайта о внешнем мире, что позволило оценить моё текущее положение в нём и наметить пути развития.
К счастью, перспективы работы на текущем месте стали куда более радужными и я принял решение свернуть поиски работы и вроде как не прогадал :)
Ещё могу отметить то, что кажется для себя понял, что мне больше по нраву небольшие и динамичные компании, где я смогу заниматься обычной продуктовой разработкой, у которых может более скромный соц. пакет, чем в больших компаниях, но работать в них намного приятнее во многих отношениях.

Комментариев нет:

Отправить комментарий