Неделю назад мы рассказали о наших образовательных программах , где в комментариях нам указали на важность стажировок и практического опыта. С этим невозможно не согласиться, поскольку теоретические знания необходимо закреплять практикой. Этим постом мы открываем серию статей о летних стажировках студентов: как ребята туда попадают, что они там делают и почему это хорошо.
В первой статье я расскажу, как успешно пройти все этапы собеседований и попасть на стажировку в Google.
Пара слов о себе
Я студент 1-го курса магистратуры Питерского кампуса Вышки, закончил бакалавриат Академического университета по машинному обучению. Во время обучения в бакалавриате активно занимался спортивным программированием, а также участвовал в различных хакатонах. Про последние можно прочитать тут, тут и тут.
O стажировке
Для начала я хочу немного рассказать про то, как выглядит стажировка в Google изнутри.
Каждого стажера, приходящего в Google, привязывают к какой-то команде. Это может быть команда, занимающаяся разработкой внутренней инфраструктуры, про которую человек вне компании ничего не слышал, или же продукта, которым пользуются миллионы людей по всему миру. Такими продуктами могут быть небезызвестные YouTube, Google Docs и другие. Поскольку разработкой этих проектов занимаются десятки, а то и сотни разработчиков, вы попадете в команду, которая специализируется на какой-то более узкой его части. Например, летом 2018 года я трудился над Google Docs, добавляя новую функциональность для работы с таблицами.
Поскольку в компании вы являетесь стажером, то у вас есть менеджер, которого называют хостом. Это обычный фулл-таймер, который сам занимается разработкой продуктов. Если вы чего-то не знаете, не можете решить или столкнулись с какими-либо проблемами, то следует обращаться к нему. Обычно назначаются еженедельные встречи один на один, где можно обсудить текущую ситуацию в работе над проектом или поболтать о чем-нибудь совершенно не относящемся к делу. Ко всему прочему, хост — это один из тех людей, которые будут оценивать проделанную вами работу за время стажировки. Еще её оценивать будет второй, дополнительный, ревьюер. И конечно же, они заинтересованы в том, чтобы у вас все получилось.
В Google вам привьют, но это не точно, хорошую привычку писать диздок (design document) перед тем, как вы собрались что-либо делать. Для тех, кто не знает, диздок — это документ, в котором излагается суть имеющейся проблемы, а также детальное техническое описание её решения. Диздок можно писать как и для целого продукта, так и для какой-то одной новой функциональности. Прочитав такую документацию, можно понять, с какой целью был задуман продукт, и каким образом он был реализован. Также часто в комментариях можно увидеть диалоги между инженерами, обсуждающими различные способы реализации какой-то части проекта. Это дает хорошее понимание, с какой целью было принято каждое решение.
Особенность стажировки заключается в том, что вам предстоит пользоваться замечательными внутренними инструментами разработки, которых в Google огромное количество. Поработав с ними и пообщавшись со многими людьми, которые до этого работали в Amazon, Nvidia и других широко известных технологических компаниях, могу заключить, что эти инструменты имеют большие шансы оказаться лучшими среди всех, что вы когда-либо повстречаете в своей жизни. Например, инструмент под названием Google Code Search позволяет не только просматривать всю кодовую базу, историю изменений каждой строчки кода, но также дает возможность навигации по коду, к которой мы привыкли в современных средах разработки, таких, как Intellij Idea.И для этого вам нужен всего лишь браузер! Связанный с этой же особенностью минус заключается в том, что за пределами Google этих же инструментов вам будет не хватать.
Что касается плюшек, то у компании крутые офисы, неплохо кормят, предоставляют тренажерный зал, хорошую страховку и прочие ништяки. Просто оставлю тут пару фоточек из нью-йоркского офиса:
Как получить оффер?
Обзор
Теперь настало время поговорить о чем-то более серьезном: как попасть на стажировку?
Тут речь пойдет не про Google, а про то, как это бывает в общем случае. Про особенности процесса отбора стажёров в Google я напишу ниже.
Процесс собеседования в компанию, скорее всего, будет выглядеть как-то так:
- Заявка на стажировку
- Контест на Hackerrank/TripleByte Quiz
- Скрининговое интервью
- Первое техническое интервью
- Второе техническое интервью
- Онсайт интервью
Заявка на стажировку
Очевидно, что все начинается с вашего желания попасть на стажировку. Для этого вы должны его выразить, заполнив анкету на сайте компании. Если у вас (или у ваших друзей) есть знакомые, которые там работают, то можно попытаться попасть через них. Этот вариант является предпочтительным, потому что помогает вам выделиться из огромного потока остальных студентов. Если такой возможности нет, то подавайтесь самостоятельно.
Постарайтесь не сильно расстраиваться, когда вам на почту будут приходить письма с содержанием вида «вы такой классный, но мы выбрали других кандидатов». И тут у меня для вас есть совет:
Контест на Hackerrank/TripleByte Quiz
Если ваше резюме понравилось рекрутеру — через 1-2 недели вы получите письмо со следующим заданием. Скорее всего, вам предложат пройти контест на Hackerrank, где нужно будет за отведенное время порешать алгоритмические задачки, или же TripleByte Quiz, где нужно будет отвечать на различные вопросы, касающиеся алгоритмов, разработки программного обеспечения и устройства низкоуровневых систем. Этот этап служит первоначальным фильтром в процессе отбора кандидатов.
Скрининговое интервью
Если испытание пройдено успешно, дальше вас ждет скрининговое интервью, на котором вам предстоит беседовать с рекрутером о ваших интересах и о проектах, которые компания предлагает стажерам. Если проявите заинтересованность, и ваш предыдущий опыт будет соответствовать ожиданиям компании, то вам дадут зеленый свет. По моему опыту, это самое непредсказуемое место во всем процессе, которое очень сильно зависит от рекрутера.
Если вы справились с этими тремя испытаниями, то основная доля случайности уже позади. Дальше остались технические интервью, которые уже больше зависят от вас, а значит вы больше можете повлиять на их исход. И это хорошо!
Технические интервью
Дальше идут технические интервью, которые обычно проводят по Skype или Hangouts. Но иногда встречаются более экзотические сервисы, требующие установки дополнительного программного обеспечения. Поэтому заранее убедитесь, что на вашем компьютере все работает.
Формат технических интервью сильно зависит от позиции, на которую вы собеседуетесь. Если речь идёт о позиции Software Engineering Intern, то вам, скорее всего, предложат пару алгоритмических задачек, решение которых нужно будет закодить в каком-нибудь онлайн редакторе кода, например, coderpad.io. Также могут задать вопрос на oбъектно-ориентированный дизайн, чтобы посмотреть, насколько хорошо вы разбираетесь в проектировании программного обеспечения. Например, могут попросить спроектировать простенький онлайн-магазин. Правда мне ни разу не попадалось такой задачи, по решению которой действительно можно было бы судить об этом навыке. В конце интервью вам наверняка предоставят возможность задать вопросы. Настоятельно рекомендую отнестись к этому серьезно, ведь благодаря вопросам вы можете показать свою заинтересованность в проекте, продемонстрировать свою компетентность в теме. Я обычно заранее готовлю список потенциальных вопросов:
- Как устроена работа над проектом?
- Какую сложную задачу вам приходилось решать за последнее время?
- Каков вклад разработчика в итоговый продукт?
- Почему вы решили пойти работать в эту компанию?
Не всегда вас собеседует человек, с которым предстоит работать в дальнейшем. Поэтому последние вопросы могут дать представление о том, что происходит в компании в целом. Для меня, например, важно, чтобы я имел влияние на конечный продукт.
В случае успешного прохождения первого интервью вам предложат второе. От первого оно будет отличаться интервьюером и, соответственно, задачами. Формат, скорее всего, останется таким же. После прохождения второго интервью, могут предложить и третье.
Онсайт интервью
Если до этого момента вам не отказали, то вас ждет онсайт интервью, когда кандидата приглашают на собеседование в офис компании. Обычно оно состоит из нескольких технических интервью и одного поведенческого. Во время поведенческого интервью вы беседуете с менеджером о ваших проектах, о том, какие решения вы принимали в разных ситуациях, и тому подобном. То есть интервьюер пытается лучше понять вашу личность и более детально разобраться в вашем опыте. Некоторые компании, проводящие по 3-4 технических собеседования, вместо онсайт интервью предлагают удаленно пройти лишь одно поведенческое.
Теперь остается лишь ждать ответа рекрутера. Если все прошло гладко, то к вам обязательно прилетит письмо с долгожданным оффером. Если оффера не будет — не расстраивайтесь. Компании систематически отказывают хорошим кандидатам. Попробуйте еще раз податься на стажировку в следующем году.
Кодинг интервью
Так, погодите… Мы еще не проходили никаких интервью. Мы лишь узнали как выглядит весь процесс и теперь нам предстоит хорошенько подготовиться к собеседованиям, чтобы не упустить шанс приятно и с пользой провести лето.
Существуют такие ресурсы как Codeforces, Topcoder и Hackerrank, который я уже упомянул. На этих площадках можно найти большое количество алгоритмических задач, а также отсылать их решения на автоматическую проверку. Это все здорово, однако мне скорее напоминает стрельбу из пушки по воробьям. Многие задачи на этих ресурсах рассчитаны на длительное время решения, требуют знания продвинутых алгоритмов и структур данных, в то время как задачи на собеседованиях обычно не такие сложные и рассчитаны на 5-20 минут. Поэтому в нашем случае куда больше подойдет такой ресурс, как LeetCode, который и был создан как инструмент для подготовки к техническим собеседованиям. Если вы решите 100-200 задач разной сложности, то с большой вероятностью у вас не возникнет проблем во время интервью. Из достойного еще есть Facebook Code Lab, на котором можно выбрать длительность сессии, например, 60 минут, и система подберет вам набор задачек, на решение которых в среднем уходит не более часа.
Еще многие советуют прочитать книгу «Cracking the Coding Interview». Сам же я выборочно читал лишь некоторые её части. Но стоит отметить, что я много решал алгоритмических задачек в свои школьные годы. У кого такого опыта не было, все же стоит эту книгу хотя бы пролистать.
Также, если у вас в жизни было мало технических собеседований в зарубежные компании, то рекомендуется пройти парочку пробных. Но чем больше, тем лучше. Это поможет вам увереннее себя чувствовать во время интервью и меньше нервничать. Пробные собеседования можно организовать на Pramp.
Поведенческие интервью
Как я уже упомянул, во время поведенческого собеседования интервьюер пытается более подробно узнать про ваш опыт и понять ваш характер. Что если вы отличный разработчик, но не способны работать в команде? Боюсь, что многих это не устроит. Например, вам могут задать такой вопрос: «В чем заключается ваша слабая сторона?» Помимо вопросов такого рода, вас попросят рассказать про проекты, в которых вы играли ключевую роль, про проблемы, с которыми довелось встретиться, а также их решения. Стоит отметить, что на первых минутах технических интервью вас тоже могут об этом спросить. Про то, как готовиться к таким собеседованиям, хорошо написано в одной из глав в «Cracking the Coding Interview».
Теперь, когда понятно, как выглядит процесс отбора стажеров в общем случае, и как готовиться к собеседованиям, настало время поговорить про то, как это работает в случае с Google.
Список доступных стажировок можно найти тут. Если вы планируете поехать на летнюю стажировку, то стоит начать подаваться уже в сентябре.
Собеседования
Здесь процесс выглядит немного необычно. У вас будет скрининговое интервью и два технических. Если вы на них хорошо себя покажете, то вы перейдете в стадию поиска проекта. Вам нужно будет заполнить довольно длинную анкету, в которой вы укажeте все свои текущие умения, а также выразите предпочтения по теме проекта и локации, в которой хотите проходить стажировку.
Очень важно хорошо и со старанием заполнить эту анкету! Потенциальные хосты, которые ищут себе в проект людей, просматривают доступных стажеров и устраивают беседы с теми кандидатами, которые им приглянулись. Они могут фильтровать студентов по локации, ключевым словам, галочкам в анкете, сортировать по баллам за собеседования.
Во время беседы интервьюер рассказывает про проект, над которым предстоит работать, а также узнает про опыт кандидата. Тут есть отличная возможность узнать, как будет в действительности выглядеть процесс работы, ведь вы общаетесь с человеком, который будет вашим хостом. После собеседования вы пишете письмо рекрутеру с вашими впечатлениями о проекте. Если проект вам понравился, а вы понравились интервьюеру, то вас ждет оффер. В противном случае, вы будете ожидать последующих звонков, которых может быть 2-3-4 штуки, а может больше и не быть вовсе. Стоит уточнить, что даже если вы хорошо прошли собеседования, но на стадии поиска проекта вас не выбрала ни одна команда (а может даже никто с вами и не беседовал), то, увы, вы останетесь без оффера.
Америка или Европа?
Помимо прочего вам нужно будет определиться с тем, где у вас будет проходить стажировка. У меня выбор был между США и EMEA. И тут важно знать про некоторые особенности. Например, есть ощущение, что в США попасть сложнее. Во-первых, вам предстоит пройти дополнительный контест длительностью 90 минут, где нужно будет решать алгоритмические задачки, а также еще один 15-минутный опрос, пытающийся раскрыть ваш характер. Во-вторых, по моему опыту и опыту моих друзей, на стадии поиска команды вами интересуются реже. Например, в 2017 году у меня была всего одна беседа, после которой команда выбрала другого кандидата, и я не получил оффер. В то время как у ребят, подававшихся в Европу, было по 4-5 проектов. В 2018 году мне нашли команду в январе, что достаточно поздно. Ребята работали в Нью-Йорке, мне понравился их проект, и я согласился.
Как видите, с США все немного сложнее. Но мне хотелось туда попасть больше чем в Европу. Плюс в США еще и больше платят.
Что делать после?
В конце стажировки у вас есть две опции:
- Получить стажировку на следующий год.
- Пройти два технических собеседования, чтобы получить фул-тайм позицию.
Эти две опции доступны при условии того, что вы успешно справились со своим текущим проектом. Если же эта стажировка у вас не первая, то вам даже могут предложить фул-тайм позицию без собеседований.
Поэтому возникает следующая ситуация, которую можно описать одной картинкой:
Поскольку это была моя первая стажировка, то я решил пройти два технических собеседования, чтобы получить фул-тайм позицию. По их результатам мне согласились дать оффер и начали искать команду, однако я отказался от этого варианта, поскольку решил закончить магистратуру. Google вряд ли пропадет за 2-3 года.
Заключение
Друзья, надеюсь, что я доступно и понятно рассказал про то, как выглядит путь от студента до стажера (и потом обратно...), и этот материал найдет своего читателя, которому окажется полезным. Как видите, это все не так сложно, как может показаться, нужно лишь откинуть свою лень, свои страхи и начать пробовать!
P.S. Еще у меня тут есть канальчик в телеге, куда можно заглядывать.
Автор: Rebryk