September 18, 2009

Как устроиться на работу в Microsoft. Part 3

Начало рассказа здесь.

Как я писал раньше, засетапили мне интервью в штаб-квартире Microsoft в Редмонде на начало апреля. Судя по датам получалось довольно интересно, т.к. мой 21-й день рождения я должен был встретить в самолете на обратном пути где-то над Гренландией.

В этом посте вы найдете много флуда, который имеет косвенное отношение к самому собеседованию, если это не интересно - листайте сразу к заголовку с собеседованиями.

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

На этот раз на подготовку было чуть больше времени. За это время я успел прочитать избранные части Кнута, прочесть половину Рихтера “CLR 2.0 via C#” и половину “Application = Code + Markup” (типа книга по моей специализации). Конечно большинство вещей из последних двух книг я постиг на практике, но они помогли не плохо структурировать знания. Книжки я читал на английском, чтоб потом не возникало проблем с разными названиями понятий, и неадекватным переводом на русский. Думаю все догадываются, где я брал pdf-ки этих книжек. Техническую литературу о технологиях надо читать на языке создателей этих технологий.
Ближе к вылету пошли какие-то запарки на работе, и чтение литературы не очень пошло.

Я так же повторил паттерны, которые часто не использую, прошелся по советам, и по задачкам на кодирование. Мне кажется, задачки не плохо на меня повлияли. Хоть среди них ни одной и близко не было, к тому что у меня спрашивали, но мозг разогрелся и начал думать в правильном направлении. Мне кажется это довольно правильное решение перед собеседованием. Наверное порекомендовал бы в день кодировать по две-три задачки в течении недель двух-трех. Если не будет хватать каких-то знаний, как раз хватит времени чтоб повторить/изучить соответствующие алгоритмы и структуры данных.

Собственно настал день вылета. Раз мне оплачивают такси и едУ в дороге – поехал на такси в аэропорт. Географически это около 5ти километров в моем случае, но ехали мы 2.5 часа в утренний час пик. На электричке и автобусе добрался бы минут за 35ть.
Выезжал заранее, в итоге попал в самый разгар регистрации. Стандартные вопросы про то где ночевал мой багаж, завтрак за счет компании в Шереметьево, подробное изучение батареек в моей зубной щетке, и я лечу в Нью-Йорк.

В это время начала работать физтеховская привычка, и за 10 часов в воздухе я дочитал с КПКшки Рихтера, и перечитал “Code Complete”, который они ну очень рекомендовали при подготовке к собеседованию, а я читал его года два назад.

Летел я только с ручной кладью, что мне очень понравилось! Очереди в паспортном контроле в JFK, поломанный лифт – как следствие выход на улицу и проход всех контролей по новой. Даже неправильный гейт в посадочном сильно меня не задержал, но некоторые из-за ожидания багажа и тех же проблем опоздали на такую же пересадку в Сиэтл.

Во время перелета через всю US мозг уже не работал (перед вылетом я почти не спал), уснуть я тоже как-то не получалось – слушал музыку, смотрел тупые передачи на мелком экране в спинке кресла впереди.

В Сиэтле кроме отсутствия облаков на небе больше ничего необычного не было. С индусом доехал до гостиницы в Бэльвью, зачекинился, и пошел проедать выделенных мне $75 на еду в ресторане. Проесть я их не сумел, но наелся хорошо. В этот раз мне регулярно предлагали алкогольные напитки, хотя мне и было 20ть (год назад у меня пару раз спросили ID). Решил до собеседования не пить. Был я в футболке “Учаснег Платформы 2007”, поэтому со мной сразу же познакомилась русская официантка, которая уже 9 лет здесь живет, через пару дней по той же причине со мной познакомилась украинская официантка.

После 30ти часов без сна, я лег в 11ть вечера по местному времени надеясь, что просплю часов до 10ти утра, и тем самым привыкну к местному времени (год назад это отлично сработало). Но не тут-то было! Я как придурок проснулся в 3 часа ночи, и даже чувствовал себя бодро. До этого я стабильно жил по NY-скому времени, просыпаясь в 14-00 в Москве. Вот блин. Ну что ж делать? Дочитал “Code + Markup”, позавтракал и поехал гулять по центру Сиэтла.

На следующий день собеседования начинались в 9ть, я планировал приехать в кампус в 8, чтоб подышать воздухом Майкрософт, для чего надо было встать часиков в 7мь. Предполагая проблемы со сном, я лег в 8 вечера, хотя мне вроде бы не хотелось.

Проснулся я в 4 утра на этот раз. Желаний что-то читать не было, поэтому напился кофе, понаблюдал за interstate с открытого балкона, и был первым посетителем ресторана в этот день. Сидеть в отеле было не прикольно, поэтому приехал я в кампус за полтора часа до назначенного времени. На небе солнце, на траве изморозь! Погулял по кампусу, понаблюдал за девелоперами на скейтах и явно не техническими девушками идущими на работу.


За пол часа пришел в указанное здание. Но почему-то в здании не оказалось ресепшена, и вход был только по бейджикам. Не стал я запрыгивать в здание за открывающими дверь сотрудниками, а позвонил по телефону который висел не далеко от входа по указанному на нем номере. Девушка сначала спросила, не экстренная ли ситуация у меня, а потом рассказала, что вход для таких как я – с противоположной стороны здания. :)
На ресепшене получил нагрудный знак, почти научил женщину с ресепшена произносить мое имя написанное в паспорте, и сказал к кому я пришел. Через пару минут мне сказали, что рекрутер заберет меня ровно в назначенное время. Так и случилось.

Общение с Рекрутером
Рекрутер отвела меня в свой кабинет (еще кто-то не знает что в штаб-квартире почти у всех свой кабинет?). Мне кажется, из вопросов которые как-то могли повлиять на результат всего собеседования был только один: “Почему Microsoft?”. Мой список причин она сама немного дополнила, и рассказала о них на примере себя и сотрудников. Также рассказала, как будет проходить собеседование.

У меня было запланировано 3 встречи. Первая и третья по часу, вторая – полтора. Собственно вторая сессия была lunch-сессией, во время которой предполагалось пол часа потратить на обед. Как сказала рекрутер, мы не хотим, чтоб у тебя кружилась голова, или упал уровень сахара в крови. Потом она сказала, чтоб я не пугался, что я провел сутки в пути от порога дома до порога комнаты в отеле только ради 3х несчастных собеседований. Если все будет идти хорошо – у меня может добавиться одно или два собеседования. И чаще всего происходит так, что если у кандидата было только три собеседования его в итоге не возьмут.

После всего этого она спросила знаком ли я с рекомендациями к собеседованию. Я сказал, что знаю о “размышлении вслух”, “задавании кучи вопросов по задаче”, чтоб решать именно поставленную задачу, а не какую-то другую, ну и “тестировать код”, после того как я его написал на доске. В ответ рекрутер отметила важность первых двух, и привела простые примеры. Если ты во время размышления молчишь, ты можешь зайти в тупик, и интервьювер ничем не сможет тебе помочь. А если вдруг он попросит тебя нарисовать на доске дом, ты ничего не спросишь, и нарисуешь маленький загородный домик, а он на самом деле хотел многоэтажный – эта невнимательность очень плохо скажется на результате.

Рекрутер пожелала мне удачи, сказала какая машина для кандидатов будет ждать меня у входа в здании, и сказала женщине с ресепшина вызвать ее. Пока ждал эту машину, успел познакомиться с кандидатом, который ждал моего HR’а, и вероятно он эплаелся на туже позицию. Он выглядел значительно серьезней и умней чем я, как мне казалось. :(
Машина за мной приехала, я сказал к какому мне зданию – меня туда доставили, я сказал на ресепшене к кому я пришел, его позвали, ну и через пару минут он меня забрал.

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

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

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

После задачи время подошло к концу, и я начал задавать свои вопросы. В этот раз я к этому не готовился, но я каждому задавал уйму вопросов начиная с “work and life balance”, личной карьерой интервьювера, и заканчивая внутренними тулзами по вычислению “Cyclomatic complexity” кода.

Второе интервью
Этот собеседник мне понравился больше всех, видимо из-за похожего чувства юмора, и открытости. Отличался он тем, что в Майкрософт он относительно недавно, пишет на C#, но до этого 8 лет писал на C++ и Java исключительно под *nix’ами.

Вместо положенных 30-ти минут мы с ним обедали 70. Но обедом это тяжело назвать, обязательно каждый что-то рассказывал. Мы обсудили наши прошлые компании, после моего рассказа он отметил, что я очень увлечен моими прошлыми работами, и мне это видимо очень нравилось. Обсудили впечатления от регулярных code-reviews и code-standards. Также он спросил про курс от Net Cracker’а по телекому и Java в моем резюме, помог ли он мне где-то в жизни? Я честно сказал, что нет, но изучения телекома не плохо расширили мой кругозор, и в принципе мне было интересно.

После обеда оставалось 20 минут на задачу. Он попросил меня реализовать Pool для Int’ов. Во время оптимизации кода, я рассказал о Lazy Init’е. Уже не помню, для чего я его использовал, но не уверен, что сам бы придумал без изучения паттернов. Также он меня попросил переделать код под использование в многопоточных системах – переделал.

Третье интервью
Почему-то третьего интервьювера мне заменили, со словами, что у запланированного ранее – непредвиденные дела. Думаю вот блин, полагался наверное какой-то манагер, стало лень тратить время – дали разработчика. У него еще был немного не привычный для меня акцент (не индусский если что), что я даже пару раз переспрашивал его, других проблем с языком у меня к удивлению не наблюдалось.

Единственный вопрос по технологиям я получил во время этого интервью. “Какие 5ть гениальных улучшений пришли вместе с WPF после WinForms”. Я сказал, что 5ть это как-то мало, не получиться у меня 5ть, и выдал 6ть. %)
После “Code + Markup” мозг был хорошо промыт этими улучшениями. Собеседник сейчас только переходил на WPF с WinForms, и по глазам мне показалось, что он не со всем был знаком на 100%, из того, что я говорил.

Запомнилось еще, что во время моего решения задачи он сказал что-то в духе сейчас-сейчас-сейчас, и начал громко тайпать на клаве. Оказалось, он сомневался в boxing’е в одном месте, и начал проверять это в студии. Я был прав тогда, хотя изначально не думал об этом во время написания кода.

После написания кода я естественно приступил к пересмотру кода и его тестированию. Во время тестирования нашел ошибку в коде, исправил ее. Покончив с задачей интервьювер сказал, что у него была одна претензия к решению, и т.к. я сам ее нашел – претензий у него нет.

Четвертое интервью
Между собеседованиями меня оставляли на ресепшене здания, в котором находится следующий интервьювер (так я побывал в двух зданиях). И в этих перерывах интервьюверы обсуждают кандидата между собой. И каково было мое удивление, что перед прощанием мне сказали, твоего четвертого зовут так-то (дали четвертого даже без обсуждения). Также во время этих перерывов можно было полюбоваться объектами арт-коллекции Майкрософт.


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

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

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

Первый его вопрос просто обескуражил меня. Какой у тебя был самый любимый предмет в университете? Ыыы… Такого я не ожидал. У меня-то и любым предметов в универе не было. На мою паузу он сказал, это может быть не обязательно computer science.
Я выдал – физика.
- А какая именно физика?
- Ммм..механика!
- Оо. Это ж на самом первом курсе наверное было.. А почему Механика у тебя была самым любимым предметом?
- (“вот же валит гад” (с)) Ну.. я в школе увлекался физикой, а после прихода в Университет, улучшился мат.аппарат, и теже вещи можно теперь делать гораздо проще и быстрее. Вот например возьмем устойчивость. В школе надо было танцевать с бубном чтоб это объяснить, а здесь – приравнял частные производные к нулю, посмотрел на второй дифференциал и готово (не уверен в том, что это именно так).
- Да, интересно… Но, наверное ж теория устойчивостей у вас была позже? У меня она на втором была.
- Ну да, у нас тоже на втором.

После чего дал довольно простую задачку, которую мы активно обсудили. Сказал, “Ладно, пиши код, я за кофе. Принести что-нить?”. Я ответил отрицательно, когда он вернулся я уже закодил задачку, рассказал ему. Ему понравилось, прогнали пару тестов, и все. После этого минут 20 я задавал ему вопросы, даже уже немного после окончания нашего времени, и пару раз говоря ну это последний. На прощание он сказал – если не все спросил, попроси у твоего рекрутера мое мыло, я отвечу по почте.

Попросил меня подождать минут 10 в холле, на всякий случай. Через 5 минут вернулся, попрощался, и сказал ждать результата от HR’а в течении недели.
Итого собеседования начались в 9ть утра, закончились в 16ть. С такой продолжительностью очень важно быстро привыкнуть к местному часовому поясу, и хорошо выспаться перед собеседованиями.

Нетехническое продолжение истории
Ну вот и все! Я свободен! В такси разговорился с таксистом. Товарищ оказался голландцем, который долго плевался на местные виды спорта, попонтовался тем, что знает на каких стадиях играли/играют российские футбольные клубы в этом сезоне. Естественно пожаловался на стоимость жилья в Сиэтле. Я в ответ пожаловался на стоимость жилья в Москве, он жаловаться перестал. :)
IMG_3684 by Kirill Tropin

По приезду в отель решил, что надо бы и выпить, выпил три коктейля, и пошел крепко спать. На следующий день пошел летать на водном самолете. Места были все забуканы заранее, пришлось поплакаться, что завтра улетаю, и нам дали самолет чуть большего размера, чтоб я поместился. :)
IMG_3782 by Kirill Tropin IMG_3721 by Kirill Tropin

Вечером в этот день, получил письмо от рекрутера, что меня взяли, сейчас оформляют оффер на SDE II, который я получу через пару дней. Woohooo!

Во время дороги до NY, у двоих людей на борту случился инфаркт, и на них израсходовали два кислородных баллона, и совершили экстренную посадку в Детройте. Для взлета самолету надо минимум 4 таких баллона, а на борту их было изначально 5ть, одного не хватает. В итоге мы три часа сидели ждали пока Delta у кого-то купит этот баллон, т.к. у них здесь какое-то левое представительство.
Я начал пинать стюардесс, что я не успею на коннекшин в Москву, что мне делать? Некоторому народу заменили билеты во время ожидания на другие, чтоб они точно успели на пересадку, мне же не заменили. Пошел опять снова их пинать, меня направили к представителю Delta, который был в коридоре рядом со входом в самолет. Он сказал, что номера рейсов Сиэтл-NY и NY-Москва совпадают, поэтому вероятно тот рейс не полетит, пока этот не приземлиться. На пересадку там временя почти не надо тратить – быстро добежишь. Если что, там через 6ть часов – Аэрофлот, как-нибудь доставим тебя.

Естественно рейс в Москву уже улетел, а я пошел на стойку Делты. Простоял очередь к супер-быстрым афроамериканкам, которые меняли билеты. Когда пришла моя очередь – мне сказали: “А вы знаете, т.к. рейс один и тот же, вы в нашей системе сидите в таком-то кресле и сейчас летите над Атлантикой, ничем помочь не можем”. Попросил позвать менеджера, менеджер был европейской внешности, решил часть вопроса, и рассказал что ей делать дальше. Не прошло и часа (учитывая ее 15ти-минутное пребывание в туалете), как я получил рукописный билет на рейс Аэрофлота.

Рейс был в другом терминале. Спрашиваю у этой подруги, как туда добраться. Она мне рассказывает как выйти из этого терминала, а как пройти в тот не говорит. Повторяет второй раз, я спрашиваю, а как после выхода из этого терминала проехать в тот. Ну ты выйдешь и сразу его увидишь, там не далеко! Благо этот разговор услышал ее менеджер, и меня на каком-то транспорте Делты доставили к тому терминалу. Проверки, регистрации, и я теперь лечу нормальными авиалинями!! Полночь, а с ней и День Рождения с учетом часовых поясов меня застали где-то над Квебеком.

После принятия оффера, начался длинный период ожидания результата лотереи на рабочую визу. Как оказалось, заявку они подали еще до моего собеседования, и таких как я на все штаты было тысяч 165 (те за кого успели подать заявки за 5 рабочих дней), на 65 тысяч мест. Шансов в общем-то не очень много, но они есть. В случае если я не получаю рабочую визу, я лечу на годик в дев. центр в Канаде. Который как раз открыли год назад для таких целей. Там поработаю годик, и потом по другой визе - в штаб-квартиру.

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

В середине июня меня оповестили, что я получил визу, через пару недель до меня дошла соответствующая бумажка-сертификат. Назначил себе собеседование в Киеве, там все как-то проще чем в Москве. Звонишь - назначаешь собеседование, в день собеседования привозишь все доки, и через день-два паспорт уже у тебя. На этот тип виз собеседования проводятся два раза в неделю, но очередей вобще нет (при желании вся процедура может занять 3 дня от начала сетапа собеседования).

На собеседовании у меня спросили, что я буду делать в компании, попросили помочь Майкрософту сделать нормальную ОСь, т.к. Vista уже задолбала их, ну и попросили передать привет Биллу. После этого пошел процесс переезда.

Вот такая вот история. Надеюсь она кому-то поможет в прохождении собеседования. Не рассчитывайте на это как на панацею. Если вы отличный кандидат, но потенциально можете вести себя не совсем правильно на собеседовании в Майкрософт – эта статья для вас!