В прошлом году мне довелось искать работу в европейской компании на позицию Senior Android Developer. Я хотел бы поделиться своим опытом, и подробно описал весь процесс, как разработчику найти работу в Европе на примере Германии.
Бэкграунд
Для начала опишу мой бэкграунд в Android, Java и английском. Эту часть вы вполне можете пропустить.
Android
Android я начал изучать весной 2011. В следующие пару лет у меня было несколько мелких удаленных Android проектов. Но гораздо больше времени я тратил на написание уроков. Все это делалось в свободное от основной работы (SAP PI developer) время.
Когда я понял, что Android - это мое, я ушел с основной работы и нашел интересный удаленный проект. Код и архитектура там были ужасны (на мой текущий взгляд), но функционал достаточно хороший: авторизация, соц.сети, аплоад файлов, in-app покупки. Это дало мне неплохой начальный опыт.
Через некоторое время проект благополучно сдох, и я несколько месяцев пытался найти что-то серьезное, постоянное и интересное на удаленке, но как-то не сложилось по разным причинам. Попадались только мелкие разовые проекты.
В итоге я решил искать работу на фултайм в офис и быстро нашел проект в продуктовой компании. У меня стало гораздо меньше свободного времени. Плюс осталась пара небольших удаленных проектов. А еще семья, ребенок. Я перестал писать уроки и вообще как-то саморазвиваться.
Через год-полтора я понял, что надо что-то менять. Я свернул все удаленные проекты и высвободил время на собственное развитие. Я начал копать такие базовые темы, как Git, Gradle, архитектурные паттерны, дизайн паттерны. Потом я перешел к темам: Dagger, RxJava, тестирование. Три эти темы вы сейчас встретите практически в любой серьезной вакансии, но, к сожалению, ни одна из них не использовалась на проекте, где я работал. Да и с архитектурными паттернами было не очень. Пока мировое Android сообщество обсуждает Clean Architecture, у нас логика реализована в Activity. И как-то совсем не просматривалась перспектива того, что будут кардинальные изменения в лучшую сторону. Из плюсов там был хороший опыт работы по методологии Scrum. Ну и в целом, опыт работы с большим приложением. Но в резюме добавить было особо нечего.
Моя мотивация и мой интерес к проекту ушли в минус, что негативно сказалось на моей работоспособности и качестве моего кода. К тому же я не скрывал, что мне неинтересно и что я скоро собираюсь увольняться. В итоге, меня просто попросили уйти.
Я не стал устраиваться на новую фултайм работу, а нашел удаленный проект с небольшой загрузкой, и у меня появилась куча свободного времени. Последующие несколько месяцев я провел достаточно продуктивно. Я активно продолжил заниматься Dagger, RxJava и тестированием, писал курсы по ним. Я возобновил написание уроков и отдельных постов в блог. Я начал читать medium.com и еще несколько интересных Android-блогов. Я изучил и начал использовать в своих проектах Clean Architecture и Kotlin. Мое резюме стало значительно лучше за эти месяцы. Наконец-то я начал двигаться вперед.
В итоге я подтянул свои знания до актуального уровня. Единственное, чего мне не хватало - серьезного опыта и практики в боевых условиях в сильном проекте.
Java
До изучения Android я знал Java на уровне джуна. Крайне редко приходилось ее использовать и хватало поверхностных знаний.
По мере работы с Android я понял, что мне нужны более глубокие знания и начал читать статьи и учебники. Уровень middle, думаю, у меня сейчас есть.
Английский
В школе я учил немецкий. Сейчас конечно уже ничего не помню из него. Английский немного учил в универе, потом ходил на какие-то курсы, занимался с репетитором, смотрел сериалы и фильмы. В итоге мой уровень - чуть выше Intermediate. Понимаю практически все, что слышу и читаю, но речь не беглая, бывают затыки. Скорее всего, это и стало основной причиной, почему мне было так сложно найти что-то.
Возвращаемся к основной теме.
Поиск работы
Я собирался увольняться с последнего места работы не просто так. У меня были планы искать работу в Европе.
Если брать европейские страны, то чаще всего в личку LinkedIn стучатся HR менеджеры компаний из Англии. На сегодня самая крутая вакансия, что я получал, была из лондонского офиса Facebook. Разумеется, далеко не факт, что я смог бы туда в итоге попасть, особенно с моим английским и алгоритмами, но все равно приятно получать такие вакансии.
После долгих размышлений, мы с женой остановились на Германии. О причинах выбора страны не буду писать. Это дело каждого и вопрос достаточно холиварный. По совокупности различных характеристик, мы решили, что Германия для нас - лучший выбор.
Из городов мы выбрали Берлин. Его называют столицей стартапов и там немецкий нужен меньше, чем в других городах Германии. Да и он нам просто нравится.
Подача резюме
Для поиска вакансий я использовал сайты LinkedIn и Glassdoor. Есть еще Xing, но там почти все вакансии на немецком.
Процесс взаимодействия с какой-либо компанией обычно проходит в несколько этапов. Начинается все с резюме.
Некоторые компании предоставляют быстрый способ отправки резюме сразу в LinkedIn и Glassdoor. Т.е. там просто берутся данные из вашего профиля и можно отдельно приаттачить файл с резюме.
Но чаще всего вы идете на сайт компании, и там есть форма подачи. Формы эти совершенно разные. Кому-то нужны только ФИО и резюме-файл. А кому-то - весь опыт работы, сопроводительное письмо, хобби, ваше мнение по какому-либо вопросу и т.п. Хорошо еще, что частенько эти формы дают возможность подтянуть данные из вашего LinkedIn аккаунта и не надо руками весь свой прошлый опыт заполнять.
Одна компания, в которую я подавался, разрабатывает приложение, связанное с приготовлением еды и рецептами. И у них в форме подачи резюме был вопрос - "блюдо, которое получается у вас лучше всего". Казалось бы, какое отношение это имеет к Android разработке?
Сразу после подачи некоторые компании отправляют вам автоматическое письмо, что ваше резюме получено и с вами свяжутся. Человеческий ответ вам могут прислать уже на следующий день, а могут и через 2-3 недели. Один раз я получил ответ только через два месяца. Также, ответа может вообще не быть, но это достаточно редкое явление. В моем случае так гаденько поступил только Microsoft.
Если ответ приходит, то там может быть всего два варианта: отрицательный или положительный.
Рассмотрим сначала отрицательный ответ. Содержимое такого ответа может быть разное. Либо вам просто пишут, что вы не подходите. Либо пишут, что вы очень замечательный и все такое, но очень много претендентов и нашлись товарищи получше вас, но вам конечно удачи в дальнейших поисках. Либо могут написать, что позиция уже занята.
Иногда бывает так, что компания сразу в ответ на резюме отказывает вам с формулировкой: очень много кандидатов, извините, но вы в пролете. А через 3-4 недели в инете снова появляется та же вакансия от той же компании. Т.е. было так много кандидатов, что не смогли выбрать и решили снова поиск запустить)
Лучше, конечно, если пришел положительный ответ. В нем обычно пишут, что резюме и опыт выглядят интересно, и предлагают договориться о дате-времени первого интервью. Также могут сразу расписать все последующие этапы, которые вам надо будет пройти.
Могут скинуть какие-то буклеты с информацией о компании. Очень советую ознакомится с ними самым подробным образом, потому что в дальнейшем вас могут спросить, что вы знаете о компании. И тут лучше бы показать, что вы читали эти буклеты и имеете какое-то представление о том, куда пытаетесь устроиться.
Один раз меня попросили написать небольшое эссе по теме Scrum. Я там расписал о том, какая это замечательная штука и о пользе, которую приносят дэйли митинги, ретроспективы, эстимация, спринты и т.п.
В итоге вы договариваетесь о следующем этапе. Этапы бывают такие:
- интервью с HR
- первое техническое интервью
- тестовое задание (code challenge)
- второе техническое интервью
- пробный день
- интервью с CTO/CEO
В разных компаниях это все организуется по-разному. И любого из этих этапов может и не быть. Или они могут быть в другом порядке. Возможно, есть что-то еще, но мне не попадалось.
После прохождения каждого этапа вам говорят, что они там все обсудят, примут решение и напишут вам ответ. Обычно ответ приходит в течение недели. Если он отрицательный, то для вас с этой компанией все закончилось. Если положительный, то вы договариваетесь о следующем этапе.
Я расскажу о том, какие из этих этапов я проходил и что там было.
Интервью с HR
Чаще всего, самое первое интервью в компании - это разговор с HR, интервьювер - девушка, продолжительность - 15-20 минут.
Обычно спрашивают общие вещи:
- зарплатные ожидания
- рассказ о себе и о своем опыте
- почему уходите с текущей работы
- что вы знаете о компании
- почему хотите устроиться именно в эту компанию
- сколько у вас еще компаний на примете
- как вам понравилось приложение компании, какие улучшения вы можете предложить
Параллельно интервьювер определяет ваш уровень английского и вообще, насколько вы общительный и адекватный. Может рассказать что-то о компании, о релокации и ответить на некоторые ваши вопросы.
Перед этим интервью вам надо выяснить побольше инфы о компании. В разговоре сможете блеснуть этими знаниями. Тем самым вы покажете ваш интерес и мотивацию, это очень ценится. Также вам обязательно надо поставить их приложение и поюзать его. Вы вполне можете найти какие-нить баги или увидите, что можно сделать какие-то улучшения в юзабилити, и сообщите им об этом на интервью. Я, например, в каждом втором приложении обязательно находил какой-нибудь баг и сообщал об этом.
Обычно HR-девушки вполне себе милые, приветливые и адекватные. Но была пара компаний, где они были странноватые. Они очень упорно пытались добиться от меня ответа, почему я хочу работать в их компании, и что я знаю о их компании. Интересно, что обе эти компании были из области Fashion. Не знаю, совпадение это или нет. Я для себя решил, что с Fashion-компаниями я больше дела иметь никогда не буду.
Причем, одна из этих рекрутерш была совершенно упоротой. Она выяснила у меня, что я не устанавливал их приложение, и что я не очень подробно прочитал буклеты, которые она мне скинула. Это для нее стало поводом выставить мне некий красный флаг. Фразу "red flag" она произнесла наверно раз 20 за время нашей беседы. К середине разговора я уже откровенно перестал изображать хоть какой-либо интерес к ней или ее компании. Что видимо раззадорило ее еще больше. Т.е. как так-то? Она тут вся такая сидит, красный флаг повесила, а я даже не пытаюсь оправдываться или переубеждать ее. На все ее угрозы, что мое резюме дальше не пойдет и что этим разговором все для меня закончится, я отвечал беззаботным ОК. В ее глазах читался разрыв шаблона и это было забавно. Только воспитание не позволило мне просто сбросить звонок и не продолжать этот бессмысленный разговор. Но такая рекрутерша - это очень редкий случай. Обычно все проходит приветливо и мимимишечно.
Еще был интересный случай, когда рекрутерша спрашивала меня базовые технические вопросы и записывала ответы. Причем некоторые вопросы были сформулированы достаточно коряво и мне нужна была дополнительная техническая информация. Рекрутерша, конечно же, не могла мне ее дать. В итоге я тупо не смог ответить на 2 вопроса из 5. По мне так это совершенно убогая практика.
Первое техническое интервью
Интервьювер обычно один, чаще всего это Android Team Lead. Но бывают случаи, когда с той стороны сразу двое или даже трое разработчиков. Продолжительность - 45-60 минут.
На этом интервью будут спрашивать о вашем предыдущем опыте. Чем вы занимались на прошлом месте работы. Было ли что-то такое в вашей практике, чем вы действительно гордитесь. Далее идут общие вопросы по Android, Java, паттернам (дизайн и архитектурным). Могут дать несложную алгоритмическую задачку. Несмотря на то, что в каждой вакансии фигурируют Dagger, RxJava и инструменты тестирования, спрашивают о них крайне редко.
Один раз было так, что на первом интервью мне просто дали две задачки. Одну на знание Java-коллекций, а другую алгоритмическую.
Был случай, когда вместо одного было два интервью с двумя разными людьми, одно за другим, по 45 минут с перерывом в 15 минут. На одном из этих интервью, мне, например, показали фрагмент кода тестирования и попросили найти в нем ошибки.
В конце встречи обычно выделяют минут 10 на ваши вопросы. Тут я обычно спрашивал сколько людей в команде, используется ли Scrum, есть ли код-ревью, фича-бранчи или фича-флаги, какая архитектура используется, какие тесты пишутся и т.п. Этими вопросами и обсуждением ответов вы вполне можете дополнительно произвести впечатление и показать свой уровень и интерес к проекту, так что советую не пренебрегать этим и подготовиться заранее.
Тестовое задание
Это мой любимый этап, потому что это единственный этап, после которого я еще ни разу не получал отказ.
Вам присылают задание, обычно в PDF формате. Там все подробно написано. Но если есть вопросы, всегда можно написать/позвонить и уточнить. Обычно, срок выполнения - рабочая неделя. Но бывает и так, что могут дать только два рабочих дня. У меня обычно эти задачи занимали часов 10-15.
Чаще всего задание состоит в том, чтобы получить данные из интернет, и отобразить их. Я сделаю отдельный пост, где распишу все тестовые задания, которые я выполнял.
После того, как сделаете задание, обязательно потестируйте его. Если есть возможность, попросите еще кого-нибудь потестировать. Не забудьте проверить такие кейсы, как выключенный интернет и повороты экрана.
Написание тестов для вашего кода может быть обязательным, а может быть просто желательным. Это обычно указывается в задании. Но в любом случае - отсутствие тестов будет минусом. Поэтому, если вы не знаете тесты, то лучше их изучить хотя бы на базовом уровне.
Второе техническое интервью
Этот этап состоит из нескольких интервью подряд. Это может быть, как в офисе компании, так и по скайпу. Там уже обычно никаких общих разговоров про компанию, только про программирование.
Я ездил в Берлин, чтобы пройти подобное интервью. Компания обычно готова оплатить расходы на дорогу и проживание. Интервью состояло аж из 5 частей и было не только техническим:
1) Разговор о моем ранее выполненном тестовом задании с Android team lead. Обсудили пару моментов, которые можно было сделать лучше. Т.к. задание включало в себя использование SDK этой компании, то я рассказал о том, какие недостатки, на мой взгляд, я нашел в нем. Немного поговорили о Clean Architecture и о тестировании.
2) Техническое интервью с Android разработчиком. Говорили про Android, Java, паттерны.
3) Техническое интервью с Java разработчиком. Тут было только про Java.
4) Разговор с CTO. Обсуждали, как организованы процессы в их компании. Я рассказывал о своем прошлом опыте, какие были плюсы, минусы, что хотелось исправить.
5) Разговор с HR. Общее впечатление, вопросы о компании, релокации и последующих шагах в случае успешного результата.
В перерыве между этими интервью я ходил на обед с потенциальными будущими коллегами. Это было интересно. Команда интернациональная - кто из Италии, кто из Израиля, кто еще откуда-то.
Пробный день
Это целый рабочий день, проведенный в вашем будущем коллективе. Компания обычно оплачивает перелет и проживание.
Вам могут либо дать какую-нибудь задачку, либо вы просто поучаствуете в парном программировании. Вам покажут офис, сводят на обед, расскажут о рабочих процессах. В итоге и на вас посмотрят, и вы увидите, как организована работа в команде. В конце дня может быть небольшое совещание, где вы с лидом обусдите итоги дня и ваши дальнейшие шаги.
Интервью с CTO/CEO
Оно может быть частью большого интервью, которое я описал в предыдущем пункте. А может быть и отдельным этапом. Вас могут спросить почему вы хотите работать в компании, разделяете ли вы ее ценности и т.п. Если вас уже берут на работу, то вы будете обсуждать условия и сроки.
Мои попытки
Я искал работу в два захода. Первый был в феврале 2017. Я начал мониторить вакансии и подаваться на те, которые мне подходили по описанию. В итоге я подался примерно на 10 вакансий. Из них было 5 интервью с HR. После чего только с двумя компаниями дошло дело до тестового задания и первого технического собеседования. И только в одной компании я проходил второе техническое интервью. В итоге не хватило мне чуть-чуть. И в этот заход я не смог найти работу.
Но это был очень хороший опыт. Я увидел свои слабые стороны и начал над ними работать. В моем случае это были алгоритмы, английский и некоторые важные области в Java.
Через несколько месяцев подготовки, я сделал второй заход. В целом все прошло лучше. Т.е. было больше компаний, где я прошел дальше. Но в итоге осталась только одна компания, где я прошел до конца и получил оффер.
Сколько времени это все может занять
Зависит от количества этапов и вашего свободного времени. Этапов обычно 3-4 + подача резюме + финальное решение. Между этапами проходит где-то одна неделя. В итоге получается где-то месяц-полтора. Поэтому вполне можно параллельно держать в процессе 2-4 компании. И как только какая-то из них выбывает, то добавлять новую.
Но, вполне допускаю, что можно найти работу за неделю и с первой попытки.
Подготовка
Напишу вкратце мои рекомендации
Английский
Он очень важен. Минимально допустимый уровень - это upper intermediate. Чем он выше, тем больше ваши шансы найти работу. Вам запросто могут отказать уже на первом этапе только из-за недостаточного уровня английского.
Есть хороший сайт - engVid. Там выложены обучающие видео на разные грамматические темы и разных уровней сложности. Видео залиты на youtube. Соответственно, вы сможете сами выбрать скорость воспроизведения, если не успеваете понимать речь. Можно еще поставить специальное расширение для Chrome, чтобы более точно настроить шаг изменения скорости воспроизведения.
Также можно смотреть сериалы. Особенно те, которые вам нравятся, и, которые вы уже смотрели на русском. Скачиваете их с оригинальной английской дорожкой и с английскими субтитрами, и смотрите. Если опять же нужно менять скорость воспроизведения, то для этого подойдет видео-плеер VLC.
Обычно еще советуют смотреть фильмы. Но по мне так сериалы гораздо эффективнее, потому что там больше речи, чем в полнометражных фильмах. Хотя сейчас, насмотревшись сериалов, я уже и фильмы все смотрю на английском.
По грамматике есть хорошая книга English Grammar in Use автора Raymond Murphy. Для самостоятельных упражнений могу порекомендовать вот этот сборник и сборник упражнений по грамматике Голицынского.
Алгоритмы
Здесь есть хорошая подборка сайтов с задачками на алгоритмы. Ну и в целом по тегу алгоритмы там есть хорошие материалы.
От себя еще могу посоветовать вот этот сайт. Там выложены задачки с собеседований в гугл, фейсбук, амазон и т.п. И в каментах можно посмотреть различные варианты решений.
Java
Из книг по Java мне нравятся:
- Java. Библиотека профессионала. Том 1 и 2 (Хорстманн К., Корнелл Г.)
- Effective Java (Joshua Bloch)
- Java Generics and Collections (Maurice Naftalin and Philip Wadler)
- Java Concurrency in Practice (Brian Goetz)
- Java Concurrency Guidelines (Fred Long, Dhruv Mohindra, ...)
Ну и имеет смысл помониторить примеры вопросов на Java собеседования. Самый популярный вопрос в моей практике - это, конечно же, про разницу между ArrayList и LinkedList.
Кадровые агентства
Отдельным пунктом хотел бы рассказать про кадровые агентства. Они бывают совсем мелкие. Какой-нить бывший HR-манагер создает свою фирму, делает себя директором, берет еще пару человек и вот он уже Кадровое агентство.
Я пообщался где-то с 4-5 разными европейскими кадровыми агентствами, и мелкими, и крупными. И весь этот опыт у меня получился негативный. У кого-то Skype запрещен религией, и они только по телефону могут общаться, а качество связи при этом ужасное. Кто-то про тебя просто забывает, не соблюдает договоренности и не отвечает потом на письма. Кому-то плевать на твои хотелки и он пытается продать тебя в Лейпциг, хотя ты рассматриваешь только Берлин. В общем, если вы общались когда-нибудь с риэлторами - вы примерно можете представить себе, о чем я говорю. Для них главное - продать и получить бабло. Бывают, конечно, среди них и нормальные люди, но их очень мало. Лучше общаться напрямую с HR отделами компаний.
Новая работа
1 февраля я выхожу на новую работу. Проект очень интересный. В нем есть куча того, в чем я хотел бы иметь больше практики:
- Kotlin
- RxJava
- Dagger
- GraphQL
- Data Binding
- Architecture Components
- тесты + интеграционное тестирование
Также в ближайших планах есть использование AR. Возможно, я смогу применить там свои познания в OpenGL.
Кроме приложения, Android-команда пишет часть серверного backend. Такого мне делать еще не приходилось. Я пока знаю, что там используется Kotlin и фреймворк Java Spring. Наверняка есть и что-то еще.
Команда, кстати, небольшая, но достаточно сильная. Кто-то выступал на берлинском DroidCon. Кто-то на Kotlin пишет уже года 3-4. Кто-то публикуется на medium.com.
Для меня это огромный шаг вперед. Переход на следующий уровень. Определенно, это будет самым сложным из всего, что я когда-либо делал. А другая страна и другой язык добавят сложности. Наградой за это все будет бесценный опыт, который повысит качество моих уроков, статей и курсов.
Перефразируя классика: то, что нас не убивает, делает из нас Senior Android Developer ;)
P.S.
Позже напишу отдельный материал с вопросами и задачками, которые мне давали на интервью.
Присоединяйтесь к нам в Telegram:
- в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
- в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Compose, Kotlin, RxJava, Dagger, Тестирование, Performance
- ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня