...извините за "паукизмы", просто уже третий день отхожу, выразить это Высококультурным и Интеллигентным языком достаточно сложно :) Потому что было действительно, гм... дичайше. Но мне понравилось! И, нет, я не просто так пишу эту историю в тэг "гранит науки" - потому что это в первую очередь дико прокачивающий в плане знаний экспириенс. Вне зависимости от конечного результата (если честно, я не думаю, что меня вот так сразу возьмут, всё-таки налажала я местами знатно) - level-up я себе засчитаю в любом случае.
Вообще, история началась не сейчас - я два с лишним месяца жила той ещё двойной жизнью, партизаня и отмалчиваясь, как бы ни хотелось похвастаться. Но есть у меня одно правило - не рассказывать о своих делах до хоть каких-то их результатов. Могу потом подробно расписать, почему, а сейчас это не вполне релевантно, я думаю. Возвращаясь к теме - в общем, дописав курсовики по учёбе и надеясь наконец-то отдохнуть, в один прекрасный день начала лета проверяю я почту... и вижу там абсолютно ВНЕЗАПНОЕ сообщение из LinkedIn. Сообщение гласило - меня нашли рекрутёры из Google, им нравится моя заинтересованность в распределённых системах и любовь к Ruby и Scala, а посему... не желаю ли я, скажем, пособеседоваться к ним?
Моя первая реакция - "эээ... так, стоп, это какая-то email-разводка, да?" Начинаю гуглить по ключевым словам "recriutment email/linkedin scam", проверять аккаунт, с которого пришло письмо - и прихожу к выводу, что нет, письмо не фейковое, автор реальный и действительно работает в Google. Окей. Начинаю думать, что с этим делать, и что бы на это ответить. Разумеется, я могла бы просто испугаться и проигнорировать сообщение. Но это было бы как-то... неспортивно, что ли. Подумала - ну, за спрос денег не берут, хоть посмотрю, что компании такого уровня и такого масштаба проектов надо от программистов, ну и просто интересно же, как далеко по цепочке собеседований смогу пройти я, простой кодерок со сложной историей взаимоотношений с образовательными инстанциями? Ответила: "да, пожалуй, мне было бы интересно, а какие вакансии у вас есть?" Скинула своё более формальное резюме. После чего договорились с рекрутёром о созвоне.
В ходе созвона и в последовавшем follow-up письме узнала, что люди с подобными наклонностями и скиллами требуются в команду Site Reliability Engineering. Получила ссылок для самостоятельного ресёрча по вакансии - ну, мне понравилось. Не потому, что "ну это же Google" - я не из тех, кому надо "хоть тушкой, хоть чучелком, но чтоб строчка в резюме была красивая". Потому, что 1) тема распределённых систем, сетей, cloud computing меня в последнее время действительно плотно занимала 2) всякой отладкой продакшен-сред я частенько занимаюсь и по текущей работе, и какой идиот откажется поработать с системами куда большего масштаба? Так что я выразила искренний интерес - и "машина лязгнула", процесс был запущен.
Маленькое лирическое отступление - говорила ж, у меня есть какая-то очень странная интуиция в вопросах закупок книг. Неким шестым чувством я знаю, что мне понадобится в ближайшее время, даже если это выглядит лютым оффтопиком в момент покупки. Вот так на недавней распродаже издательства "Питер" совершенно неожиданно для себя купила русский перевод известного труда "Cracking the coding interview", у нас изданный как
"Карьера программиста. Как устроиться на работу в Google, Microsoft или другую ведущую IT-компанию". Я ещё поржала тогда над баззвордами в названии - "а чо, без Google и Microsoft никак, книжку не купят?" Но как сборник алгоритмических задачек и просто гимнастики для ума - прикупила. И даже начала читать. Очень помогло!
А помогло, собственно тем, что уже на следующем созвоне мне совершенно неожиданно устроили первый короткий скрининг. Пока что - в виде короткого опросника, данного HR-специалисту. Большинство вопросов были достаточно базовыми, из разряда "элементарной IT-грамотности" - TCP-соединения, quicksort... и несколько вопросов "с подвохом" про структуры данных, где просто НАДО было уточнить вопрос, прежде чем выдавать ответ. И вот про примеры таких подвохов как раз было в той книжке, так что я очень рада, что заимела её до того, как мне написали. В общем, опросник мне дался довольно неплохо - процентов на 70-75 вопросов я ответила (там, где не ответила - поняла, что надо более тщательно пофтыкать в идеологию и устройство UNIX-систем, так что потом дней за 15 осилила The Art of Unix Programming). После чего дама-рекрутёр (очень приятная в общении, кстати) добавилась ко мне на LinkedIn в друзья. Я сочла это хорошим знаком.
Следующим этапом было уже полноценное удалённое собеседование с техническим специалистом. А перед ним мне настоятельно порекомендовали посетить онлайн-консультацию по тому, как проходить их собеседования. Не, вы вдумайтесь - компания перед собеседованиями устраивает консультации по прохождению собеседований! Это многое говорит об их собеседованиях, правда? :) И, да, я консультацию таки посетила. Было полезно. Услышала, что мне предстоит на собеседовании (час реалтаймового кодинга в Google Docs, без автокомплита и подсветки синтаксиса) - и засела практиковаться. Зарегистрировалась на замечательном сайте
codeeval.com и стала решать алгоритмические задачки. Сначала - прямо в их редакторе, засабмитить и посмотреть на результат. Если что-то неочевидное не так - поправить уже в Emacs и с интерпретатором. И в результате такой практики прояснила пару неочевидных для себя моментов и вспомнила несколько подзабытых методов из стандартной библиотеки Ruby. Полезно.
Собственно, само удалённое собеседование прошло довольно неплохо, хоть я и нервничала, конечно. Дали задачку, где нужно было и знание хотя бы минимальных основ сетей (в частности: понимание структуры IP-адреса и того, что такое и зачем нужна маска подсети), и структуры данных, ну и просто базовый common sense, и сильно не помоить в коде. Задачку решила - хотя разбор IP-адреса оставила на последние минуты, а зря, порядок битов в спешке слегка попутала (что осознала потом, смотря на свой код свежим глазом). Как говорили на консультации - собеседующему важен не столько идеальный код сам по себе, сколько ход мыслей кандидата и то, как он способен объяснить своё решение (худшее, что можно сделать на собеседовании - это замолчать). Но спала я той ночью всё равно плохо, my code bugs were literally bugging me.
На следующее утро мне снова позвонили - и избавили от терзаний и метаний. Как сказала дама-рекрутёр - собеседовавший меня инженер оставил исключительно положительный фидбэк, хвалил и мой код, и мои коммуникативные скиллы (опять же, кто сказал, что у айтишника-задрота-красноглазика их быть не может?), а посему - куда бы я хотела прилететь на очное собеседование: в Дублин, Лондон, Цюрих или Мюнхен? Ыыыы. Вот тут я уже точно подбирала челюсть с пола. Выбрала Дублин, по разным соображениям - и размер офиса, и суета с Brexit, и ещё немало факторов. Дождалась официального письма-приглашения и подала документы на визу. Что было тем ещё квестом, кстати - поскольку это не шенгенская зона, документов нужно было много (и некоторые из них, типа свидетельства о браке - с сертифицированным переводом!), в Питере консульство визы не делает вообще, посему надо как-то переправлять визовый сбор и документы в Москву... в общем, я плюнула, подумала, что мои время и комфорт мне дороже, подалась на визу через наш питерский ЕЦД. За агентские и курьерские услуги переплатила, конечно - но не жалею...
...ибо визу мне делали аж три с половиной недели. Ибо в ирландском посольстве народ в отпусках, а прочая публика, напротив, хочет поехать в отпуск, посему количество заявок увеличилось, а тех, кто их обрабатывает - уменьшилось. Но, к счастью, терзала посольство не я, а агент - и мне осталось потом только подъехать и забрать документы, когда они наконец-то приехали в Питер. А раз уж выдалось некоторое количество запасного времени - порешала ещё алгоритмических задачек (
выбившись на CodeEval в top-100 по России и верхние 10% по разработке на Ruby), на сей раз начиная не с голого онлайн-редактора, а с ручки и листа бумаги, и почитала ещё книжек (осилив примерно 60% талмуда Таненбаума по сетям и ещё процентов 40
"Алгоритмы: разработка и применение" от всё того же издательства "Питер"). Ну и отслушала ещё одну коучинг-сессию, на сей раз уже специфичную для этой позиции, про дизайн распределённых систем.
И вот мне наконец-то пришли билеты из Питера до Дублина, через стыковку в Париже, и обратно таким же маршрутом. Я дико благодарна компании, кстати - дали возможность прилететь не в тот же день, погулять по городу и осмотреться (думаю, про это ещё напишу отдельно), а также - самое главное! - хорошо выспаться. Так что на очное собеседование я пошла вполне себе "бодрячком" и с боевым настроем. Правда, не сразу пришла в нужное здание (их там несколько, учтите, коллеги-айтишники!), посему чуть не опоздала - но в общем и целом, всё началось нормально и в штатном режиме :)
График у меня был такой - два 45-минутных интервью на программирование днём, потом перерыв на обед, так называемое lunch interview, потом ещё специфичные для этой должности собеседования (troubleshooting и тот самый large system design), и, наконец - ещё одно интервью в удалённом режиме ещё вечером (потому что я выбрала Ruby в качестве основного языка для собеседований, а в офисе на тот момент было не так много человек, его знающих, меня должен был пособеседовать человек из США). Довольно плотно.
Так скажу - утренние кодерские задачки вроде бы решила - правда, конечно, изначальные решения были нифига не самыми элегантными и оптимальными, мне постоянно задавали вопросы вида "а вот тут для такого хитрого тест-кейса что бы поменяла? а в самом коде что бы улучшила?" - и я, разумеется, старалась изменения вносить. Да, конечно, потом после свежего взгляда на этот код без жёсткого тайм-лимита мне было дико стыдно за свою писанину (блин, вот это же самое я на CodeEval решала элегантнее же!) - но, как говорили и в книге, и на консультациях - "something is way better than nothing", и, да, постоянно говорить и обсуждать, а не молчать!
Troubleshooting понравился сильнее всего - вообще, дико увлекательная штука. Когда тебе рисуют на доске схему деплоя небольшого веб-приложения, говорят, что в нём при таком-то запросе клиенты зарепортили проблемы... и ты должен докопаться до сути проблемы, говоря, какие действия предпринимаешь, и слушая от твоего интервьюера, что сервера отвечают тебе на те или иные команды. Вот тут я, кстати, слегка пожалела, что Таненбаума не дочитала - ибо если бы дочитала, до сути проблемы докопалась бы быстрее и с меньшим количеством подсказок. :) Но всё равно, дико прикольная штука. И у собеседующего с чувством юмора хорошо - "через 20 минут слушания Вивальди на линии мы таки пробились в техподдержку провайдера внешнего API..." %)
А вот large systems design заставил меня понять, что, гм, "я знаю, что ничего не знаю". Да, я пересматривала курсеровские лекции по Cloud Computing Concepts в самолёте, поднимала и свои домашки с той же Курсеры... но оно не просто так LARGE systems design. Да, я смогла уточнить требования к заданной мне системе и даже не пытаться с такими требованиями втиснуть всё это в один комп (что обосновала), посему этот "наивный" этап просто проскипала, начертив схему системы в том виде, в каком её представляла себе по известным мне аналогам. НО! Помимо алгоритмов и концептов, там ещё достаточно немало нюансов на чисто хардварном уровне - и вот тут я несколько затупила, подсчёт нужного количества машин и требований к применяемым на них алгоритмам мне дался просто с диким количеством лажи, и до мало-мальски приличного вида я его так довести и не успела :( Но, нет, я ни в коем случае не в обиде - мне преподали просто офигенский урок того, где у меня пробелы в кругозоре и вИдении темы, и я, разумеется, сделаю всё возможное, чтобы эти пробелы заполнить. Собственно, именно поэтому и "гранит науки" - для меня это в немалой степени честный assessment моего уровня знаний и тыкание носом туда, где этих знаний надо добрать в обязательном порядке. Боюсь, в колледже мне бы этого ТАК не рассказали!
Последняя же кодинг-сессия была с ноута и гостиничного вайфая (с заходом в старбакс по пути, ибо после всего этого мне потребен был кофе, чтобы хоть как-то держаться на ногах). Тут немного "не в ту степь пошли" и собеседующий (дал довольно "длинный" вопрос, думая, что собеседование будет длиться час, и несколько удивился, когда ему сказали, что у него есть всего 45 минут), и я (выжженный за день мозг дал о себе знать, когда обрисовывала схему решения, немного неверно расположила символы на схеме, которую, впрочем, нарисовала практически сразу... но из-за двух перепутанных символов в последний момент запаниковала и затупила на имплементации). Собеседующий, к счастью, проявил снисхождение и элегантно разрешил ситуацию, выйдя из переговорки и Hangout, но не закрыв Google Doc, и дал мне ещё 10 минут на то, чтобы закончить - предварительно слегка переключив мой фокус внимания на вопрос про SRE-будни :) Да, после такого отвлекающего манёвра я нашла баг в своей схеме и закончила решение. Ответом мне было написанное в Google Doc "Glad that you figured it out!" - и хоть потом свежим взглядом (я всегда им отсматриваю написанное!) я и заметила, что всё равно забыла написать одну очень важную строчку, но, похоже, всё-таки не совсем зафейлила, и то хлеб!
Ну и lunch interview, конечно же. Увидела очень прикольную гугловскую столовую (да, у них там действительно полностью бесплатное питание для работников, при этом хорошее!), посмотрела на вид Дублина с тринадцатого этажа офиса... и несколько покраснела, когда выяснилось, что сопровождавший меня человек, тоже родом из России, лет 8 назад заходил в мою ЖЖшечку (учитывая, ЧТО я тогда писала - наверное, надо было десять раз подумать, прежде чем светить в деловой переписке свой личный gmail) :) В любом случае - было очень познавательно уже не в айтишном смысле работы в компании уровня Google, а в... бытовом, что ли. И, да, зная, что эти строки тоже читают, машу рукой и искренне ещё раз благодарю, было очень-очень круто!
Ну и потом были попытки дрожащими руками в гостинице открыть заботливо заначенную именно для этого случая бутылку крепкого Гиннесса, два с половиной часа сна и долгая дорога домой. А попутно - осмысление опыта и попытки понять, в какую сторону мне после этого стоило бы двигаться дальше, вне зависимости от результата собеседования. Ну и написание этого текста в течение более чем двух суток!
Что бы мне ни ответили (опять же, я понимаю, что лажа была, и была в немалом количестве) - я благодарна в первую очередь за приглашение, за мегакрутой опыт, и вообще за понимание того, какие вещи я на своём пути делала правильно, а какие - не очень. Про основные "уроки", наверное, потом ещё отдельный пост напишу - но следующий, наверное, будет про мои впечатления от Дублина и вообще вылазки в ранее не знакомое место, ибо тут оно будет всё-таки несколько оффтопично. В любом случае - stay tuned, и, надеюсь, мои многобуквенные рассказы будут кому-то полезны!