Мой путь в западные продуктовые компании: от отказа Twitter до оффера Facebook

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

Начало пути и DataStax

Моя дорога к работе мечты началась с обычного чтения ленты в Твиттере. Я увидел твит от Alex Petrov, в котором он искал инженеров для работы над Cassandra в DataStax.

Like distributed systems and would like to work on building a database? Our team at @DataStax is hiring! Ping me if you’re interested!August 23, 2017

В описании вакансии я увидел все, что подходило под описание идеальной работы для меня: отсутствие офиса, распределенная команда, highload база данных, которая используется во всем мире, и самые интересные технические вызовы в контексте распределенных систем. На тот момент я и мечтать не мог о том, что хотя бы попаду на собеседование. Я написал Алексу в личные сообщения и через пару дней получил письмо с приглашением начать общение и первым заданием. Ну что же, let the fun begin.

Собеседование в DataStax состоит из трех частей (спойлер: я зафейлился на второй): открытые теоретические вопросы, практическое задание и общение с командой. Получив теоретические вопросы, я был приятно удивлен тем, что они так или иначе связаны с реальными проблемами, которые решает Cassandra. Это не был очередной набор задач из Cracking the Coding Interview, взятых для галочки. В итоге, отправив решения, я на следующий день получил письмо с пропуском на второй этап.

На втором этапе вместо написания какого-то очередного бесполезного сервиса или имплементации алгоритма, мне прислали спеку для нового CQL оператора. За время, ограниченное здравым смыслом (дедлайн не указывали), мне нужно было разобраться с исходниками базы данных и имплементировать спеку. Ничего сложного, не правда ли? :)

Решив, что нужно все сделать как можно быстрее, я не стал тратить время на whitepapers, которые мне порекомендовали прочитать перед выполнением задачи. Две недели я получал удовольствие от постепенного понимания того, как работает база данных изнутри. В итоге я начал приближаться к решению задачи. Решив, что тянуть больше нельзя и потратив вечер на оформление решения, я отправил патч на проверку. Оказалось, что мое решение работало не корректно, а для исправления пришлось бы переписать половину. Этого можно было бы избежать, если бы я понял, что интервьюеры осознавали его сложность и не ожидали, что я справлюсь с ним быстро. Раз уж на то пошло, то они почти прямым текстом об этом писали в описании задания.

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

Прорваться на собеседование в Elastic

Следующей компанией, которую я для себя выделил, была Elastic. На самом деле со стороны она очень похожа на DataStax в плане работы. Те же распределенные команды и highload база данных, но здесь занимаются полнотекстовым поиском.

С этой компанией я начал делать все неправильно с самого начала. Самая большая ошибка, которую вы можете совершить, — это открыть страницу вакансий и подать резюме через нее. Проблема в том, что вы стучитесь в те же двери, что и остальные, и, скорее всего, ваше резюме будет отброшено в долгий ящик.

Подождав пару недель и увидев шаблонное письмо с отказом, я начал искать сотрудников компании. Написал одному из разработчиков в Core team, пообщался с ним и получил реферал. Но так как я уже был отмечен в системе, то получил отказ без объяснения причины. В это время я узнал, что в Elastic разрабатывают не только базу данных, но и разный тулинг вокруг нее. Подав резюме в одну из таких команд, я попал на интервью. Я планировал пообщаться с рекрутерами и другими членами команды и узнать, можно ли потом перейти в Core team, которая была мне интересна.

Я прошел два этапа собеседований. Первый был с одним из разработчиков Elastic Cloud, на котором мы обсуждали мой предыдущий опыт и провели небольшое system design interview. О нем я расскажу больше в контексте собеседования в Facebook. Следующее собеседование было с тимлидом команды. Мы больше говорили о том, что мне интересно, а также я отвечал на базовые вопросы из курса Computer Science. Я был «слегка» удивлен, когда через час после собеседования получил отказ. До этого я не относился к мотивационным интервью серьезно, но, как оказалось, для продуктовых компаний это один из самых важных этапов. Интервьюер сказал, что мне вряд ли будет интересно работать у них в команде и лучше бы мне пойти на собеседование в Core team. Учитывая, что HR’ы из этой команды не хотели даже говорить со мной, я попал в ситуацию, когда все двери оказались закрыты.

Молчаливый рекрутинг Твиттера

После провала с предыдущими двумя позициями пришло время постучаться в двери компаний из более привычного списка. Я разослал около двадцати шаблонных писем работникам Twitter в LinkedIn — просил зарефералить меня на вакансию, связанную с разработкой инфраструктуры для machine learning департамента. Один из контактов ответил мне, и так началось общение с рекрутером. После короткого разговора мы определились с позицией, и начался процесс интервью.

Само собеседование было коротким — небольшой разговор с лидом команды, тестовое задание и... 4 недели тишины. Последние две недели я пытался разными способами узнать у HR, что происходит, и слышал лишь пустоту. Рекрутер не отвечал на мои письма, звонки и SMS. Мне повезло получить телефонный номер лида во время собеседования. Когда я позвонил ему и объяснил ситуацию, он пообещал помочь. Через два дня позвонил HR и объяснил, что позиция на которую меня собеседовали, была закрыта кем-то изнутри компании и мое решение задачи даже не смотрели. Взамен мне предложили другие вакансии, и мы остановились на infrastructure team, где инженеры строят базы данных специально для Твиттера. Этот вариант был даже лучше прошлого, и мы начали процесс заново.

В этот раз собеседование разительно отличалось от предыдущего. Один за другим пришли приглашения на мотивационное, кодинг и system design интервью. Особенность команды в том, что она распределена между разными офисами компании, поэтому можно было не лететь в Лондон ради интервью. Первое собеседование было с engineering manager’ом команды, на котором мы обсудили причины моего ухода из тех или иных компаний и мотивацию заниматься программированием вместо чего либо еще. Это было одно из самых лучших мотивационных интервью по моему опыту, так как оно проходило в абсолютно непринужденной обстановке и выглядело просто как общение двух знакомых. Остальные этапы интервью провела другая команда. Сейчас я понимаю, что не уделил достаточно внимания подготовке к system design интервью и не смог хорошо справиться с ним. Неожиданно, но нужно было спроектировать распределенную базу данных.

Через три дня после собеседования меня ждало шаблонное письмо с отказом на почтовом ящике. Я потратил так много усилий на весь процесс, поэтому хотел получить больше объяснений, но HR, как обычно, не отвечал. Я написал engineering manager’у напрямую и был приятно удивлен подробным фидбэком. Я получил пищу для размышлений и до сих пор благодарен интервьюеру за его открытость.

Причиной отказа послужило вовсе не так себе пройденное system design интервью, а личные мотивации. В компании опасались, что через пару лет мне станет скучно и я со всеми накопленными опытом и знаниями уйду ради более интересных задач/большей зарплаты. Fair enough, разделяя эту точку зрения, я отправился на поиски дальше, ведь в этот раз я просто выбрал двери не той компании.

Окей, Google

Однажды из разговора со своим бывшим лидом Pavlo Voznenko (кстати, если вы интересуетесь переездом в Германию, у него есть отличная статья об этом) я узнал о его знакомых инженерах в Google и Facebook. Воспользовавшись знакомствами, я быстро получил рефералы и приглашения на собеседования в обе компании. Первым меня ждало общение с Google.

Еще до разговора с Пашей, используя фидбэк после собеседования в Твиттер, я начал закрывать пробелы в своих знаниях. В ход шли whitepapers, которые присылал DataStax, курсы Седжвика на Coursera и разные статьи в интернете, которые объясняли непонятные мне термины и конструкции. Сам процесс разбора занял около месяца и закончился как раз к началу собеседований в обеих компаниях.

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

Перед интервью я взял небольшую паузу, чтобы закончить разбор материалов. Само интервью проходило через Hangouts, в качестве доски предложили использовать Google Docs. Забегая вперед, скажу, что это не лучшее место для написания кода. Приходилось все время мучиться с отступами и недостаточной максимальной длиной строки.

Сама задача совмещала в себе логическую часть и понимание алгоритмов поиска пути. Решение нужно было написать на «произвольном» языке. Вариант использовать JavaScript или Scala не сильно обрадовал моего интервьюера, поэтому пришлось писать на смеси Java и C++, что получалось у меня не так хорошо. После решения задачи я спросил собеседующего, стоит ли мне писать тесты и рефакторить код. Не получив утвердительного ответа, я сдал задание и ушел заниматься своими делами. Не удивительно, что меня ждал отказ.

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

Оффер от Facebook

Почти все написанное про собеседование в Google относится и к Facebook. Собеседуясь в обе компании параллельно, я смог почувствовать разницу в их культурах. Весомым отличием Facebook для меня стало отношение на интервью. Во время всех этапов меня не покидало чувство, что интервьюеры — это мои хорошие знакомые, которым понадобилась помощь с задачей, и мы вместе ищем для нее решение.

Онлайн-этап собеседования проходил в том же формате, что и в Google. Но был более удобный онлайн-редактор и большее количество языков на выбор, что позволяло не отвлекаться на вспоминание С-подобных конструкций. Через день после собеседования HR дал мне обширный фидбэк и пригласил на следующий этап в Лондоне.

Оффлайн-этап состоит из пяти собеседований подряд: трех coding challenge, благодаря чему комиссия может получить наиболее объективное мнение о соискателе, мотивационное и system design интервью. Как по мне, самое сложное из них — system design интервью. На нем необходимо спроектировать решение определенной открытой задачи. Сама задача состоит из одного предложения, описывающего общую идею. Все остальные детали вы должны узнать у интервьюера или спрогнозировать сами. Для меня это было очень похоже на начало разработки нового продукта, когда разработчикам нужно узнать все требования к проекту и на их основе составить высокоуровневую архитектуру приложения. Для подготовки к этому интервью я купил доступ к курсу Grokking the System Design Interview, что, безусловно, было лучшими вложением 79 долларов. Благодаря этому блогу я получил множество новых идей, как можно строить приложения, и научился задавать правильные вопросы самому себе во время проектирования.

Перед интервью я весь вечер повторял свои конспекты и разбирал задачи, которые другие соискатели публиковали на Glassdoor. Многие советуют прорешать «Cracking the coding interview», но, как по мне, это трата времени. Эта книга достаточно поверхностно описывает алгоритмы и структуры данных. Вместо того, чтобы учиться понимать идеи и принципы, заложенные изначально, с помощью книги вы просто научитесь решать конкретные задачи. В итоге собеседование превращается в бросание монетки: если вам повезет, то задача будет похожа на ту, которую вы прошли в этой книге. Мне куда больше пользы принесли курсы от Robert Sedgewick на Coursera (первая и вторая части). В них объясняются идеи, которые стояли за той или иной структурой данных и алгоритмом. Да и вряд ли кто-то может лучше объяснить красно-черные деревья, чем тот, кто их придумал :) И я бы не сказал, что на проработку задач из книги нужно меньше времени, чем на просмотр обоих курсов Седжвика.

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

Даже если бы я не получил оффер, это все равно был бы невероятно интересный опыт. Компания хотела не только проверить меня, но и показать себя с лучшей стороны. Как мне сказали во время обеда: «Till now you tried to sell yourself, now we will try to sell the company to you». Выходя из офиса, я чувствовал себя абсолютно опустошенным. Голос пропал, и следующие полчаса я перебирал мысли в голове. Несмотря на это, я был счастлив, так как чувствовал, что выложился на полную.

Выводы

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

Несколько советов:

  • Лучший способ получить оффер — попасть на собеседование, а лучший способ попасть на собеседование — это найти человека внутри компании, который мог бы порекомендовать вас.
  • Очень важно ознакомиться с core values компаний, чтобы понимать, подойдете ли вы друг другу. Но в то же время не нужно пытаться подобрать ответы под них. Вряд ли вам хочется сменить работу на ту, где вы не сможете быть собой.
  • Если вы чувствуете, что ваши знания в computer science не так сильны, то уделите пару месяцев для подготовки и обучения. Я могу посоветовать вам этот курс (часть1, часть 2).
  • Во время подготовки обращайте внимание на общие концепции и идеи вместо частных решений. Куда легче разобраться с парой десятков идеи, чем подготовиться к тысячам производных задач.
  • Используйте все возможные ресурсы для подготовки, даже если вам придется заплатить за них. Скорее всего, цена на них вполне оправдана. Для меня очень важным шагом стала покупка этого курса.

Я желаю вам удачи в поисках, а сам собираю вещи на самолет «Мюнхен  —  Лондон» и улетаю в новое приключение. Буду рад ответить на ваши вопросы, а также подписывайтесь на мой Twitter и Instagram.

Похожие статьи:
Я описав типові «менеджерські» виклики продакта у першій частині статті. Ми говорили про активності, пов’язані зі стейкхолдерами,...
Wedding silk sarees will never out of style from Indian wedding and it’s again returned to the design pattern. Amid going to of many wedding we have seen that numerous ladies’ wore silk Kanchipuram wedding silk saree. After that we got...
Генштаб заявляє, що на Донецькому і Таврійському напрямках ворог готовий до наступальних дій, тим часом Зеленський закликав...
Любая компания на стадии роста сталкивается с рядом типовых проблем. Как правило, они связаны с тем, что методы управления,...
Від початку широкомасштабної війни велика кількість IT-компаній, що базувалися на сході України, евакуювалися. Офіси...
Яндекс.Метрика