Мой опыт стажировки в Microsoft Redmond и получения офера
перепечатка статьи «Каждый год Microsoft получает 2 млн резюме». Разработчик из Минска — о 7-летнем пути в компанию (+Рекомендации и список книг)» с сайта dev.by.
Андрей Артемьев — Software Development Engineer в американском офисе Microsoft в Сиэтле, работает над операционной системой Windows. Его путь в компанию занял 7 лет, за плечами — пять подач резюме, одно проваленное интервью и летняя стажировка в Microsoft Redmond. Андрей делится своим опытом с читателями dev.by.
«Мой опыт говорит, что на большом интервале побеждает упорство, а не талант»
Попасть в Microsoft достаточно трудно, так как приём на работу неправильного человека может стоить компании дорого. Сюда входят не только затраты на релокейт, но и потенциальный ущерб компании от ошибок сотрудников, которые приводят к неприятным последствиям, будь то кража российскими хакерами письма кандидата в президенты Хиллари Клинтон, распространение вируса-вымогателя Petya, падение сервера базы данных о пациентах в японском госпитале или срыв контракта на $19 млн с производителем ноутбуков.
Microsoft ежегодно получает порядка 2 миллионов резюме, поэтому любое сомнение в кандидате влечёт отказ. Отказ во время финального собеседования означает, что следующая попытка будет только через 6 месяцев, но фактически — лишь через год. Мой опыт говорит, что на большом интервале побеждает упорство, а не талант.
Всё началось в декабре 2008 года, когда я, студент третьего курса БГУИР (Белорусский Государственный Университет Информатики и Радиоэлектроники), пришёл на лекцию о MS HPC Server 2008, организованную в Минске сотрудником Microsoft Всеволодом Украинским. На лекции он упомянул о летних стажировках для студентов в головном офисе компании в США.
Это было уму непостижимо, в моей жизни появились цель и смысл — я должен поехать в Microsoft. Я сразу же отправил своё резюме (подавать надо сюда), и, хотя ответа не получил, не расстроился: уже на тот момент ко мне пришло понимание, что все большие свершения требуют подготовки.
Уже с января я полностью погрузился в процесс сбора информации и подготовки. Нашёл блог Сергея Гребнова из Иваново (РФ), который только что вернулся с летней стажировки в Microsoft из США и попросил рассказать об этом опыте подробнее, так у него появилась серия постов о процессе собеседования и задачах на интервью. По ходу того, как прояснялось содержание собеседования, работа закипала, и я жалел, что в сутках только 24 часа. Мои одногруппники этого не понимали.
Для начала ваше резюме должны заметить. Если вы прошли этот этап, в сентябре–октябре вас ждёт телефонное интервью длительностью 30 минут на английском, которое отсеет тех, кто точно не пройдёт финальное собеседование с американцами в европейском офисе. Во втором туре будет четыре-пять собеседований по сорок пять минут, во время которых вам предложат алгоритмические задачи, спросят, как вы собираетесь тестировать своё решение, и посмотрят на ваш код и подходы к решению проблем. Сергей Гребнов был победителем олимпиад по программированию, финалистом Microsoft Imagine Cup 2008, но и он прошёл не с первого раза.
«На интервью надо искренне интересоваться тем, как вы можете себя улучшить, а не просто выполнять ритуал»
В слово «подготовка» я не вкладываю смысл, которым его наделяют в университете, — вызубрить за пару дней, написать шпоры, впарить преподавателю, схитрить. Если вас предупредили, что во время интервью нужно просить обратную связь у интервьюера, значит, надо искренне интересоваться тем, как вы можете себя улучшить, а не просто выполнять ритуал.
По поведению интервьюеров вы должны понять, кого они ищут, и сделать себя таким. Подготовиться — это выработать в себе навыки и привычки, ради демонстрации которых не придётся напрягать память. Возможно, на это уйдёт полгода, возможно, несколько лет. Боксёр на ринге не вспоминает, как ставить блок, и не думает, куда уклониться — эти навыки отработаны. В день собеседования всё должно пройти безупречно, на все вопросы должны быть даны ответы и все задачи решены, только так вы попадёте в «высшую лигу».
Английский я учил, читая техническую литературу, смотря мультики Futurama, The Simpsons, South Park. Многие серии пересмотрел раз по сорок, новые слова с переводом и транскрипцией записывал в блокнотик и тупо перечитывал, когда ехал в общественном транспорте. Курсы иностранных языков, на мой взгляд бесполезны: я так учил немецкий, и мне показалось, что их цель — не научить, а заработать денег.
Телефонное собеседование было простым: меня что-то спросили про Linked Lists и опыт работы. На интервью не только компания знакомится с вами, но и вы с ней, поэтому очень важно подготовить вопросы. Я интересовался у человека на том конце провода, над чем они работают, как часто случаются овертаймы, насколько хорош баланс между работой и личной жизнью, какие планы на стажёров и т. д. Отсутствие интереса к будущему рабочему месту может сыграть не в пользу кандидата. Спустя время я узнал, что первый этап пройден и скоро со мной опять свяжутся.
Дождливая минская осень сменилась зимними холодами. В середине февраля 2010 года мне пришло письмо с предложением приехать в Мюнхен для интервью в кампусе компании. Меня ждали 4 интервью по 45 минут, Microsoft оплачивал все расходы. До назначенного дня оставалось меньше месяца, а у меня не было визы. Пришлось побегать, потому как для получения немецкой (не шенгенской) визы нужна была выписка из земельного кадастра о Microsoft Deutschland Gmbh.
Вообще процесс найма в Microsoft достаточно «расхлябанный», и так думаю не только я. Иногда рекрутеры забывают присылать документы или присылают не те, или без подписи, или просто оставляют кандидатам мало времени на сбор документов. Есть мнение, будто это делают специально, чтобы отсеивать кандидатов, но, может, просто отдел кадров не справляется с огромным потоком кандидатов. Так что не расслабляйтесь, сами отслеживайте весь процесс и не бойтесь им писать.
Microsoft очень часто проводит интервью в офисах ЕС, куда приезжает команда рекрутеров из США. У Гребнова оно было в Варшаве, у меня — в Мюнхене. Иногда подобные мероприятия проводятся и в России, однажды hiring event был в БГУ (Белорусский Государственный Университет). Интервью в чужой стране плохо тем, что нужно адаптироваться к новой обстановке, незнакомой системе общественного транспорта, это добавляет рисков. Я приехал за час до начала интервью и просто гулял поблизости. Потом вчетвером с другими кандидатами мы собрались в холле, и нас по одному стали приглашать к себе разные интервьюеры.
«Самая дурацкая ошибка — начать писать код, не уточнив всех деталей»
На первом собеседовании меня спросили об опыте работы, потом выдали листик, на котором был реализован С++ класс CString, задача — найти все проблемы. Так как я читал Effective C++ и More Effective C++, я успешно справился.
Следующая задача была сложнее: реализовать функцию bool IsMatch (char* pszText, char* pszPattern). В качестве паттерна передаётся строка, которая может содержать *, обозначающую 0 или более символов. Я эту задачу не решил. Когда будете решать, подумайте о таких вариантах: «Abcde», «A*c**d*ek».
На втором интервью было задание реализовать функцию, которая переворачивает все слова в строке. К примеру, «Hello, Microsoft Deutchland!» — «Deutchsland Microsoft Hello». Задача может показаться простой, но на самом деле это не так. Самая дурацкая ошибка на собеседовании — начать писать код, не уточнив всех деталей. Для выбора решения надо располагать точными данными, которые следует взять у интервьюера. Надо уточнить, что делать со знаками препинания, нужна ли поддержка юникода, потому как есть символы, состоящие из нескольких (например, смайлики с разным цветом кожи), насколько велик файл, какие ограничения по времени/памяти. Также надо объяснить выбор алгоритма и выбор структуры данных. В конце интервью у меня спросили, как я буду тестировать этот код, я ответил плохо, и на этом для меня всё закончилось.
В Минск я возвращался с твёрдым намерением в следующий раз подготовиться лучше. В университете никому ничего не сказал, даже староста не знала, почему я отсутствовал. Сразу же отправил в Microsoft сканы чеков за еду и общественный транспорт, и FedEx в ответ прислал чек на 215 долларов, с которых пришлось уплатить подоходный налог. Проживание и перелёт уже были оплачены компанией.
Осенью я опять подал свое резюме, но пролетел. По требованиям визы J-1 (студенческой визы, необходимой для прохождения стажировки в США), на момент окончания стажировки вы должны быть студентом вуза, а я в 2011 году уже оканчивал университет.
На случай провала у меня был план Б, поэтому я продолжал работать. Время от времени решал задачи и проигрывал в голове ситуации из интервью. Процесс подготовки перешёл в фоновый режим: я читал книги по программированию, но былого запала уже не было. Германия не давала мне покоя, поэтому я отправил документы в магистратуру информатики Технического университета Мюнхена. Не взяли.
Подготовка продолжалась, иногда я решал задачки и тестировал код. Осенью опять подал документы в три разных университета, и на сей раз получил положительные ответы из всех сразу. Технический университета Мюнхена был вверху списка (37-й в мире), поэтому выбрал его. Так в апреле 2012 года я стал студентом немецкого вуза. Позже я в нём разочаровался.
«За окном темно, я стою с маркером перед бумажной доской и реализовываю игру «Сапёр» на С++»
В конце августа, уже из Мюнхена, я снова подал резюме на стажировку в Microsoft, и меня пригласили на первый этап. Он проходил в моём университете. Я пришёл за 20 минут до начала, под дверью сидело несколько человек. Один из них оказался рекрутером, и мы минут 15 разговаривали: я задавал про компанию вопросы, которые подготовил заранее.
На собеседовании мне нужно было написать на доске консольное C# приложение, которое считает количество символов в файле и напечатает их в порядке убывания. Когда будете делать, подумайте о составных Unicode символах, символах форматирования и невидимых символах (пробел), а также о том, что считать одинаковыми символами, потому как в некоторых языках они могут выглядеть по-разному, но означать одно и то же. Во время таких интервью отсеиваются специалисты, которые не дотягивают до минимального уровня. Интервьюер оценивает, как я пишу код, как рассуждаю, как подхожу к решению задачи. Примерно через неделю меня оповестили, что я прошёл первый этап.
В феврале 2013 года меня пригласили в Цюрих на on campus интервью, предоставив на выбор несколько дат. В середине марта в холле Microsoft Цюрих собрались два парня из Польши, индиец, учащийся в Швейцарии, и я. Всё было так же, как и в 2010-м, — четыре интервью по 45 минут.
На первом интервью менеджер Microsoft попросил меня написать некоторые алгоритмы LinkedList, одним из которых был поиск кольца в SingleLinked List. Другие технические вопросы не помню, но Linked Lists в операционной системе используются повсеместно, поэтому их надо знать хорошо. Потом интервьюер поинтересовался, есть ли у меня вопросы к нему. Вопросы о стажировке, о команде и рабочей среде я задавал всем — мне это было интересно.
Второе интервью было с русским сотрудником Microsoft. Не помню уже, что мы делали, но под конец он дал мне 7 минут на реализацию алгоритма на C#. Я сразу же включил секундомер на часах (чем расстроил его замысел) и таким образом смог сосредоточиться на решении проблемы. В итоге всё написал вовремя. Собеседник спросил меня, хочу ли я работать c Windows Phone или SQL Server. Помню, как возвращаясь с этого интервью в конференц-комнату, я увидел индийского парня с вещами возле лифта — остальные ребята всё ещё были на собеседованиях.
С третьим интервьюером я не сразу нашёл общий язык. Нужно было организовать сортировку карт. Сначала я выяснил, как лучше представлять карты в памяти, в итоге задача сократилась до переставления элементов в массиве. Потом рекрутер добавил условие, что карты никогда не должны оставаться на своём месте. Я реализовал алгоритм на С++. Прежде чем писать код, я уточнил, можно ли использовать стандартный генератор псевдо-случайных чисел.
Четвёртое интервью. За окном темно, я стою с маркером перед бумажной доской и реализовываю игру «Сапёр» на С++. Попутно рекрутер спрашивает, сколько занимает массив из указателей на указатели и как можно повторить цикл в for заново, как я буду реализовывать игру, если поле огромное, скажем, миллион на миллион.
В итоге нас остаётся двое, мы ждём окончательного решения. Перед нами сидит с ноутбуком рекрутер из Америки, она спрашивает, кто хочет узнать свой результат первым. Я изъявляю желание, мы выходим в другую комнату, садимся, рекрутер благодарит меня за внимание к стажировкам Microsoft, выражает надежду, что полученный опыт был мне полезен, и радость от того, что я присоединюсь к компании летом 2013 года.
Тот парень тоже прошёл. Мы вышли на улицу в 18:30 и отправились в отель, где отпраздновали победу двумя кружками пива.
«Из посольства пришло письмо о том, что обработка моих документов затягивается, так как я попал под Additional Processing»
Стажировка должна была начаться 7 июня 2013 года. Я вернулся в Германию и начал собирать документы на визу J1. Стало не до учёбы, от неё тошнило. Документы я подготовил очень быстро, потому что все необходимые переводы и нотариальные заверения были сделаны ещё при поступлении в немецкий университет.
На сайте посольства надо было пройти тест с тупыми вопросами, как-то: являетесь ли вы членом террористической организации, намерены ли везти наркотики в США и т. д. К ним нужно подойти очень серьёзно и ни в коем случае не шутить, иначе завернут. Когда идёшь в американское посольство, лучше не брать с собой электронику, потому что её негде будет хранить. Кто-то закапывает свои планшеты и умные часы в клумбу, кто-то отдаёт на хранение аферистам и больше никогда их не видит, я же пошёл в магазин и оставил свои вещи в камере хранения.
Примерно через неделю я получил ответ из посольства о том, что обработка моих документов затягивается, так как я попал под Additional Processing. Это процедура, которой подвергаются многие программисты, физики, специалисты взрывного дела во время первой подачи на американскую визу. Таким образом рассмотрение моих документов затянулось на больший срок, чем планировалось.
Я написал в Microsoft, и мне ответили, что остаётся только ждать. Каждый день я подходил к почтовому ящику, но там было пусто. Время моей стажировки всё переносилось, на учёбу я «забил» окончательно, хотя близились экзамены. В то время я снимал мансарду у немецкой семьи неподалёку от университета, но они готовились к переезду в другое жильё. Помню, что в доме уже не было никаких вещей, кроме моих, срок аренды подходил к концу и надо было принимать решение. Однажды жарким мюнхенским днём я увидел в ящике увесистый конверт, а в нём — паспорт с визой и куча бумаг. Microsoft сразу же купил мне билеты, и я улетел. Таким образом, стажировка в Редмонде началась с задержкой в месяц.
«Как правило, стажёры Microsoft получают предложение о работе, если только не сделают что-нибудь глупое»
На время стажировки Microsoft предоставила мне автомобиль и скидку на аренду жилья. У интернов было достаточно времени на то, чтобы не только работать, но и путешествовать.
рабочее место стажёра Microsoft
Я работал на Windows Phone 8.1, добавлял в него какой-то API (уже не помню какой). Сначала надо было разобраться в проекте, потом составить design document, обсудить его с другими сотрудниками, получить их одобрение, после реализовать и протестировать. В конце 12-недельной стажировки я презентовал свой проект команде и получил предложение о работе. Большинство стажёров получают такое предложение, только если не сделают что-нибудь глупое.
Приглашение работать в Microsoft я получил в начале сентября, но синюю карточку сотрудника мне выдали только два года спустя.
Я попутешествовал по Америке и вернулся в Минск на время оформления рабочей визы. Это очень долгий процесс. В США количество иностранной рабочей силы квотируется, в последние годы число заявителей превышает количество квот, поэтому они разыгрываются по принципу лотереи.
За окном 2014 год, я живу с родителями, жду визу. Если всё будет хорошо, то осенью еду в США, так что работу можно не искать. Но в апреле стало ясно, что в этом году визу я не получаю и в Штаты не еду, вместо этого есть вариант работы в офисе Ванкувера, в трёх часах езды от Сиэтла: через год работы в Канаде по визе L1 меня переведут в Редмонд. Однако и этот вариант не получился. В результате осенью я пошёл на собеседование в компанию Softeq. Опыт работы в Microsoft и уверенное знание английского дали мне заметное преимущество при устройстве на работу.
Незаметно подкралась весна 2015 года, в апреле мои документы на рабочую визу наконец одобрили. Собеседование в посольстве США в Москве было очень коротким: меня лишь спросили, где я буду работать и с какой зарплатой, забрали паспорт и в тот же день вернули с визой. Все иностранные сотрудники начинают работать с октября, когда стартует новый фискальный год. Поэтому мой первый рабочий день состоялся 5 октября 2015 года.
Список литературы от Андрея Артемьева:
Литература для «физиков», которая поможет подготовиться к техническим собеседованиям. Читать от корки до корки не обязательно, рекомендую изучать алгоритмы с карандашом в руках.
Уже осенью начнутся собеседования на следующий год — готовьтесь и подавайте резюме. Если не получилось, делайте выводы и пробуйте снова.
- Томас Кормен. Алгоритмы и структуры данных;
- Борис Кордемский. Математическая смекалка;
- Александр Шень. Программирование. Теоремы и задачи;
- Уильям Пандстоун. Как сдвинуть гору Фуджи.
- Сборник задач по программированию и решений к ним на topcoder.com;
- Cracking the Coding Interview: 150 Programming Interview Questions and Answers;
- Microsoft Interview Questions на glassdoor.com;
- Effective C++;
- More Effective C++;
- Programming Pearls;
- Страничка Microsoft на FB, чтобы быть в курсе событий
Мотивирующая литература для «лириков»:
- М. Веллер. Приключения майора Звягина;
- А. Шварцнеггер. Вспомнить всё. Моя невероятно правдивая история;
- М. Шарапова. Неудержимая. Моя жизнь;
- Мальколм Гладуэлл. 10 000 часов;
- К. Ленгольд. Просто космос: практикум по Agile-жизни, наполненной смыслом и энергией;
- Тимоти Феррис. Как работать 4 часа в неделю.
p.s. дополнение к статье от автора: если бы я планировал отправиться на стажировку опять, то подавал бы резюме сразу во все крупные компании. Стажировки есть почти у всех — Microsoft, Google, Amazon, Facebook, Intel, Apple и остальные. Помимо стажировок в США есть стажировки в Европейских офисах. У Европы нет таких жёстких требований к визе как у США. Для людей занимающихся наукой есть стажировки в Microsoft Research.