Украинский программист Сергей Сема жил в Калифорнии, работал в EPAM Systems, а также выполнял заказы в качестве временного подрядчика для компании Google. В какой-то момент Сергей осознал, что ему этого мало. Он поставил перед собой цель попасть в число штатных сотрудников Google.

Как оказалось, стать настоящим «гуглером» – задача не из легких. Подготовка к интервью в интернет-гиганте, а параллельно и собеседования в других компаниях длились почти полтора года. Достойной наградой за потраченные усилия стал долгожданный оффер от Google. На лекции, организованной учебным центром Chasopys Eduspace, Software Engineer цюрихского офиса Google Сергей Сема рассказал, как с первой попытки получить работу в одной из самых желанных компаний мира. UNIT Citizen выбрал ключевые моменты из лекции программиста.

Подготовка. Начало

Подготовка к интервью в больших технологических компаниях, как правило, длится не один месяц. «В случае неудачи второй шанс вы получите только через год. При чем это касается любой локации компании. Нельзя «завалить» собеседование в Лондоне и тут же отправить резюме в Цюрих», – рассказывает Сема.

Если программист готовится к собеседованию в Google, львиная доля времени выделенного на подготовку, будет уходить на решение алгоритмических задач. «Помню, сначала я открыл легкие задачи на LeetCode с мыслью о том, что смогу их решить очень быстро, – вспоминает Сергей. — На самом же деле, у меня получилось решить лишь пятую по счету задачу». Решение он искал шесть часов – оно занимало множество строк (вместо четырех) и, конечно же, не прошло тесты.

Следующим пунктом Сема решил проштудировать одну из самых известных книг по программированию – Cracking Coding Interview. В книге мало теории, основная ее часть — реальные тестовые задания, которые получают соискатели на собеседованиях в известных технологических компаниях.

Задачи, алгоритмы и стикеры

Для решения задач Сергей пользовался двумя основными ресурсами – LeetCode и InterviewBit. На LeetCode собрано огромное количество задач, отмечает программист. Кроме того, на этом сайте есть форум, где пользователи размещают свои решения, а также коллективно обсуждают задачи.

InterviewBit, в свою очередь, позволяет ознакомиться с заданиями в разрезе тем и уровней сложности. Сергей советует постепенно двигаться от простых задач к более тяжелым. «Сначала я не понимал, что с некоторыми заданиями стоит повременить – например, с задачами на динамическое программирование», – говорит он.

В то время собеседования в Google можно было пройти на одном из четырех языков программирования – Java, Python, Javascript и C++. Сергей решил писать задачи на Javascript, так как этот язык был ему хорошо знаком, но столкнулся в тем, большинство хороших решений было представлено на Python, Java или C++. «Поначалу я смотрел на решения на Java и пытался их как-то реализовать на Javascript. Это было очень неудобно, и в итоге я перешел на Java. Нужно привыкнуть к тому языку, на котором те или иные задания решаются оптимально», – говорит он.

Личный опыт научил Сергея тому, что в процессе подготовки к интервью очень важно выработать четкий режим и правила. Каждый день он приезжал домой после работы в семь вечера и садился за задачи. Решал их до десяти, а на выходных – целыми днями. «Поначалу я думал, что долго так не протяну. Но прошел месяц и я понял, что все нормально», – говорит он. По мнению Семы, если чего-то по-настоящему хочешь, то появляется энергия, чтобы совершить задуманное. «Многие ребята бросают все в первые недели. Но как раз через месяц становится легче», – отмечает сегодняшний сотрудник Google.

В процессе решения некоторых задач Сергей осознавал, что ему не хватает знаний алгоритмов. Когда такие случаи участились, программист решил – надо что-то менять. «Два месяца я занимался алгоритмами. Сначала думал, что мне достаточно будет прочитать книжку Роберта Седжвика, но она оказалась очень сложной. Поэтому я переключился на видеокурсы Седжвика на сайте Coursera (Algorithms, Part1, Algorithms, Part 2)», – рассказывает программист. Он рекомендует вести конспекты видеолекций – в дальнейшем это ему очень помогло.

Как решаются задачи? По словам Семы, сначала надо внимательно прочитать условия и придумать уточняющие вопросы интервьюеру. Причем времени на раздумья почти не будет – вопросы надо задавать сразу.

После этого Сергей рисовал на листе бумаги примеры – и придумывал решение. Важно: нельзя начинать писать код, пока не продумал решение полностью. Потом это решение разработчик переносил в IntelliJ либо прямо в LeetCode. «Решение должно заработать с первого раза. У меня получалось в 10% случаев», – рассказывает Сема.

После изучения алгоритмов, следуя совету своих знакомых, Сергей перешел к повторению решенных задач. Оказалось, что и это не так просто. Если от решения задач Сергей испытывал какое-то удовольствие, то повторять ему вовсе не хотелось. «Но я нашел способ, как себя мотивировать. Вспомнил, как в детстве собирал наклейки с Терминатором. Я стал писать на стикере номер задачи, уровень сложности, тему, краткое решение задачи, которую я повторил – и клеил этот стикер на дверь. Так я отмечал проделанную работу», – рассказывает он.

Собеседование с другом

К интервью в больших технологических компаниях соискатели готовятся как самостоятельно, так и в парах. Подготовка в паре имеет больше плюсов, считает Сема. Во-первых, важно, чтобы вас поддержал кто-то, кто понимает, через что вы проходите. Во-вторых, если вы будете проходить платные mock-интервью, то второй человек, находясь рядом, тоже сможет тренироваться», – делится опытом Сергей. Mock-интервью (пробное интервью, псевдоинтервью) – один из самых эффективных способов подготовки к собеседованиям. Его могут проводить специализированные фирмы или просто друзья, которые знакомы с процессом прохождения собеседования в той или иной компании.

Сергей знал нескольких ребят, которые работали в Google. Никто из них не отказался поучаствовать в mock-интервью. Один случай запомнился ему больше остальных. «Мой друг придумал мне очень хитрую задачу, и я… запаниковал. Воспринял этот тест как настоящее собеседование. Я подумал: все, провал, – вспоминает программист. – Но лучше пережить подобные ощущения во время mock-интервью и научиться с ними справляться. В будущем этот опыт помог мне на реальном собеседовании в Google».

В процессе подготовки Сема также рекомендует пользоваться сервисом Pramp. «Тут собираются ребята из разных стран и интервьюируют друг друга. У всех будет разный английский, как и на реальных собеседованиях, поэтому этот опыт вам точно пригодится», – говорит он.

Пройдя около 20 собеседований с «гуглерами», а также ряд интервью со специалистами из сервиса interviewing.io, Сергей был готов просить рекомендацию у знакомых и отправлять свое резюме в Google. Но знакомые снова остановили его. «Мой друг сказал мне, что я завалю собеседование, ведь у меня совсем нет опыта прохождения реальных интервью. Он посоветовал мне получить два реальных оффера от хороших компаний и только потом подаваться в Google», – рассказывает Сергей.

Через тернии к Google

По словам Сергея Семы, существует несколько методов подачи резюме в интересующую кандидата компанию: форма на сайте, рекрутеры, рефералы… «Раньше я думал, что подаваться через форму на сайте не имеет никакого смысла. Но на практике все зависит от компании. Когда я заполнил форму на сайте Snapchat, их рекрутер связался со мной уже на следующий день», – вспоминает разработчик.

Очень важным элементом успеха в поиске работы Сергей называет подготовку резюме. «Если в моем украинском резюме насчитывалось около пяти страниц, то для Google мне пришлось сильно урезать свой CV, оставив меньше двух страниц, говорит он. – Очень важно указать, что конкретно вы сделали в том или другом проекте – три-четыре пункта на проект».

После того как подготовительные этапы были пройдены, Сергея ждало самой важное — онсайты («живые» интервью в офисах компаний). Первые из них вовсе не были успешными. «Я «заваливал» одно собеседование за другим», – вспоминает украинец.

Типичный онсайт для инженеров в технологической компании (как в больших корпорациях, так и в стартапах) состоит из нескольких частей – классического технического интервью (несколько этапов), дизайн-интервью и behavioral-интервью. «Условно говоря, с 10 до 11 часов у тебя первое собеседование, с 11 до 12 – второе, с 12 до 13 – перерыв, во время которого ты общаешься с кем-то из инженеров, и так еще 3-4 интервью в течение одного дня. При этом если ты задержался на несколько минут на одном из интервью, то автоматически забрал у себя время на следующем», – объясняет Сергей.

На своем первом онсайте в проекте Snapchat Сергея ждала неудача. «Я старался и показал свой максимальный результат. Но меня не взяли. Думаю, дело в том, что я не готовился к дизайн- и к behavioral-собеседованиям», – предполагает он.

Как известно, на behavioral-собеседованиях интервьюер обычно задает общие вопросы, пытаясь понять, что перед ним за человек и будет ли с ним комфортно работать. «Спрашивают о конфликтных ситуацииях на предыдущих работах, о фэйлах… Конечно же, у всех случались неприятности на работе. Но необходимо научится правильно о них рассказывать», – подчеркивает Сема.

Главный блок в собеседовании инженера — технический. Технические интервью очень ограничены во времени, обычно они длятся 60-75 минут, а в Google – и вовсе 45 минут.

По словам Семы, стоит подготовить «приветственную речь». «У вас будет пара минут, чтобы себя представить. После этого интервьюер дает задачу — это две-три минуты, нарисовать пример и задать вопросы — еще 3-4 минуты, придумать решение — пять минут», – перечисляет Сергей. При этом необходимо сразу дать самое простое решение и спросить мнение интервьюера. Если он скажет – мол, давай-ка, поищем еще – то обычно стоит прислушаться. Далее остается минут десять на реализацию решения и минут пять на то, чтобы проверить его на ошибки. «Если ошибку нашли вы сами – это даже хорошо, если же интервьюер – очень плохо, – говорит Сергей. – А иногда интервьюер своими вопросами может намекать, что вы движетесь в неправильном направлении».

На пути к Google Сергея Сему ждало много неудачных собеседований. «Меня часто не брали на работу, в том числе стартапы», – вспоминает он. Первый успех ждал украинского программиста в компании Evernote. «Когда я получил оффер, то чуть не плакал», – вспоминает он. После этого Сергей так же неожиданно получил работу в подразделении General Motors – компании Cruise Automation.

Билет в Цюрих

Получив два хороших предложения о работе, Сема, как и планировал, решился на собеседование в Google. Онсайт в корпорации обычно состоит из шести собеседований: четырех технических, одного дизайн-интервью и одного behevioral-интервью. «У меня не было behevioral-части – вероятно, потому, что я уже был на тот момент котрактником в Google, а сотрудники самой компании дали положительные отзывы о моей работе», – предполагает Сема.

Таким образом, из шести интервью оставалось пять. Но задача не стала от этого более легкой. «Сказать, что я переживал – ничего не сказать, – вспоминает Сергей. – Все пять интервью должны были состояться в один день, но два из пяти интервьюеров заболели, и весь процесс растянулся на несколько дней. Это немного выбило меня из колеи».

Даже после столь внушительной подготовки, не все этапы собеседования в Google прошли для украинца гладко. На первом он не успел «продебажить» решение – проверить его на ошибки. Второе прошло хорошо. На третьем Сергей получил сложную задачу на динамическое программирование. «Задача была просто жесть, но я все-таки нашел решение. А интервьюер мне говорит: слушай, может лучше поищешь? При том, что даже мое первое решение не казалось мне простым, – вспоминает Сема. – Тут пришел момент паники. Но я взял себя в руки и принял решение довести до конца свой вариант». Это был правильный выбор. Лучше написать решение, которое работает, даже если оно не идеальное. Сергей написал свое с опозданием в три минуты. «Если бы я продолжил искать решение, меня бы ждал провал», – уверен программист.

vaaju.com

На последнем техническом интервью Сергею предложили решить задачу, которая постепенно усложняется. «Другими словами, сначала говорят — напиши решение так, чтобы были сложение и вычитание. Ты написал. Потом говорят – а теперь сделай, чтобы было деление и умножение. Готово. А теперь – чтобы были скобки… И так далее», – рассказывает Сергей. Таким образом интервьюер смотрит, насколько далеко может зайти программист и, имея эту информацию, сравнивает его с другими кандидатами.

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