Путь стажера: Microsoft

Вітаю! Моє ім’я — Олександр Сочка, нещодавно я закінчив університет і нині живу та працюю в місті Ванкувері, Канада. За запрошенням команди DOU, хочу поділитися своїм досвідом проходження інтерв’ю та стажувань в компанії Microsoft та інтерв’ю в Google.

Передісторія

У 14 років, коли я поринув у неймовірний світ програмування, моєю компанією мрії став Google. Я гіпотетично уявляв, як працюватиму в компанії такого масштабу, але припускав, що це можливо тільки із запасом досвіду років з десять. Так сталося, що того ж року відбулася моя перша поїздка до США, і враження від неї ще більше підсилили бажання попрацювати в західній компанії.

Подальші події почали розвиватися доволі швидко. Я відкрив для себе таку цікаву річ, як спортивне, або олімпіадне, програмування. До речі, цілком випадково: у школі не знайшлося інших учнів, хто міг би взяти участь. На жаль, похвалитися надзвичайними успіхами і першими місцями я не можу, максимум займав друге призове місце на міській олімпіаді в Києві. Проте вже наприкінці 11 класу я зміг потрапити до топ-1000 в другому раунді Google Code Jam. Цікаво, що досі не можу повторити навіть того результату. Проте через декілька місяців мені надіслали запрошення від Google Switzerland поспілкуватися на тему «opportunities with us». Як вже зазначалося, я щойно закінчив школу, і моя відповідь їх не зацікавила. Як наслідок, ніякого продовження не відбулося. Це був мій перший контакт з «компанією мрії».

Так чи інакше, я вирішив, що протягом наступних років рухатимуся в цьому ж напрямку. Велику роль у моєму виборі відіграв двоюрідний брат Alexey з Нью-Йорка , який завжди переконував мене подаватися на стажування, не відкладаючи на майбутнє. Я ж не дуже вірив в успішність цього задуму, зважаючи на те, що мені на той момент ще не виповнилося 18 років, і не було жодних гарантій, що зі мною хтось захоче спілкуватися в такому віці. Все ж таки я вирішив літо 2013 року повністю присвятити підготовці: пройшов експрес-курси англійської на рівень C1, займався на Codeforces / Topcoder, майже кожного дня відповідав на питання на Stack Overflow (дуже корисною є критика коментаторів, не один раз я видаляв відповіді, але дізнавався щось нове), читав відповідну літературу.

На щастя, мій брат мав знайомого, який працював в Google New York, і він зміг відправити рекомендацію моєї кандидатури. Як мінімум, це позбавило від скрінінга резюме, яке на той момент було фактично зробленим з повітря — жодного професійного досвіду не було.

Інтерв’ю в Google

Буквально через декілька днів зі мною зв’язався рекрутер з Google, і були призначені перші телефонні інтерв’ю. До того я вже прочитав Cracking the Coding Interview (дуже рекомендую: книга повністю покриває процес підготовки до інтерв’ю, включаючи не тільки технічні питання, а й психологію та специфіку найбільших компаній: Microsoft, Google, Amazon, Facebook та ін.), Programming Interviews Exposed, The Google Resume та багато статей в Інтернеті. Протягом двох тижнів, що залишилися, я посилено продивлявся завдання з цих книжок, але, на жаль, не послухався неодноразово озвученої поради не просто думати над ними, а писати на листку або дошці готовий код.

Співбесіда в Google проходить достатньо стандартно: два інтерв’ю, 45 хвилин кожне. У моєму випадку інтерв’юер набирав мій домашній телефон (ще одна помилка: в нього не можна було вставити навушники, і я весь час відволікався на те, щоб його тримати), а написання коду відбувається в Google Docs.

Досі пригадую перше завдання, воно водночас є, напевно, найлегшим, яке я отримував на співбесіді, а з іншого боку спричинило найбільше проблем. Це було написання функції інкременту для числа будь-якого розміру. Замість того, щоб чітко з’ясувати вимоги (а це критично важливо, саме уточнення вимог може бути настільки ж важливим, як написання коду), через хвилювання я припустився декількох помилок:

  1. Не уточнив розміри числа і зовсім забув про те, що воно може бути від’ємним, не цілим чи нулем. При цьому, мабуть, можна було б навіть сказати: «Hey, I know it can be negative, zero or real, but let’s go with the positive integer case first». І, найімовірніше, інтерв’юер погодився би з цим, оскільки зазвичай цікавить загальна ідея, усвідомлення крайніх випадків і мінімальна кількість коду, але бажано робочого коду, а не псевдокоду.
  2. Можливо, від хвилювання я прослухав, що це інкремент, а не додавання двох чисел, і почав реалізовувати їх додавання, що, очевидно, складніше.
  3. Як вже зазначав вище, не потренувався писати код в Google Docs наперед. В результаті я мав жахливі проблеми з табуляцією і половину часу безуспішно витратив на те, щоб він виглядав хоч мінімально пристойно. Особистий висновок на майбутнє: в Google Docs табуляцію робити тільки пробілами, без клавіші Tab.

Виконуючи це завдання, я втратив приблизно 20 хв. і зробив лише частину необхідного для переходу до наступного завдання. В цілому мій перший «успіх» мене зовсім не вразив.

Наступна співбесіда мала відбутися через день, але через поганий зв’язок з боку інтерв’юера відбулася аж за два-три тижні. Це дало додатковий цінний час на підготовку, і в результаті все пройшло набагато краще, я залишився задоволеним. Для мене досі залишається загадкою, чи отримав би я офер на стажування, беручи до уваги повністю провалене перше інтерв’ю.

Чому загадкою? Через те, що у Google надзвичайно довгий процес прийняття рішення, і за наступних вісім тижнів, доки я чекав результат, відбулося багато подій.

Інтерв’ю з Microsoft

Паралельно з Google я також подав резюме в Microsoft. Тут було трохи складніше: не було кому подати рекомендацію на мене, крім того, сайт не дозволяв відправляти форму, доки я не заповню поле попередньої роботи (якої ніколи не було). Як результат моїх спроб, у вересні мені написала Microsoft University Recruiter, але як тільки дізналася, що мені 17, інтерес до моєї кандидатури магічно зник. У листі вона зазначила «you may be a little early». Довелося переконувати, що зовсім таки не early, а якраз пора вже.

Після численних спроб я все-таки отримав можливість пройти перший раунд інтерв’ю. Це був жовтень 2013 року (саме перед початком подій в Україні). Київ тоді був центром Східної Європи для проведення таких інтерв’ю, тому представники Microsoft і кандидати летіли для співбесід саме до Києва (крім українців були претенденти з Росії та Єгипту). Мені ж пощастило: достатньо було під’їхати на метро до офісу на Вокзальній.

Перший раунд співбесіди з Microsoft був нескладний: півгодини нетехнічне інтерв’ю з рекрутером і стільки ж — технічне з розробником. Нетехнічне виявилося складнішим. Одне з питань: «Що вас зацікавило в Microsoft?» — змусило мене понервувати, оскільки я користувався Linux, весь час експериментував з всякими дистрибутивами типу Gentoo, й інтересу до Windows і Microsoft Office у мене не було. Про інші продукти я багато не знав, а інколи щиро бажав, щоб Microsoft як компанія зникла (це були часи Windows 8, Балмера і ще живого IE6). Тому розповідав загальні речі, що це хороший досвід. Перед інтерв’ю я читав статтю, що Microsoft випустила щось в open source, і згадав про це. Коли мене попросили назвати назву цього продукту, я її згадати не зміг, і це був, м’яко кажучи, не дуже зручний момент. :)

Під час технічного інтерв’ю завдання було достатньо тривіальним — реалізувати переворот однозв’язаного списку. Код пишеться на дошці фломастером. Цього разу я теж чомусь спішив, і в результаті вдалося це зробити тільки хвилин за 15. Але в цілому все пройшло добре, і через декілька днів (порівняйте швидкість з Google) мені прийшло запрошення на другий раунд.

На другому раунді була ціла делегація інтерв’юерів — близько 10 спеціалістів — і в кілька разів більше кандидатів. Набір зазвичай ведеться в конкретний дивізіон: нас набирали в Operating System Group, яка тепер називається Windows & Devices Group. Співбесіди проходять в три раунди з опціональним четвертим у випадку сумнівів. Кожен з них по 45-50 хвилин: за цей час кандидат та інтерв’юер коротко розказують про себе (я не зміг втримати посмішку, коли один з них сказав, що працює над IE). Далі все досить звичайно: дається якесь алгоритмічне завдання, де треба придумати і реалізувати (написавши на дошці реальний код) ефективний розв’язок, у процесі коментуючи те, що ви робите.

Пригадую, що одне завдання було на обхід якогось нестандартного графу і виконання операцій над ними. За словами інтерв’юера, це був реальний приклад графа з IE.

Інше завдання було таким: «Дано номери (індекси) двох бітів в пам’яті. Потрібно зробити реверс всіх бітів між даними двома індексами».

Хоча я на початку майже не вірив у позитивний результат, після третього інтерв’ю прийшло чітке розуміння, що все добре, тому для мене навіть стало сюрпризом те, що призначили ще четверте.

На практиці ж четверте інтерв’ю виявилося розмовою в стилі «які є причини залишитися в Microsoft, а не перейти, скажімо, в Amazon?» (Amazon — основний конкурент за інтелектуальні ресурси через фізичне знаходження головного офісу в Сіетлі, недалеко від штаб-квартири Microsoft, і конкуренцію на ринку Cloud). Буквально за годину прямо на місці зробили офіційну пропозицію стажування, описавши всі деталі. Я був позитивно шокований тим, скільки платять інтернам (легко дізнатися за допомогою Glassdoor), але з усієї сили відбивався і не погоджувався — хотілося дізнатися результати від Google.

«Виторгувавши» два тижні на роздуми, я повідомив Google про необхідність швидкої відповіді. Декілька разів я почув від них «soon», але за два місяці Google не спромігся дати офіційну відповідь навіть стосовно першого раунду телефонних співбесід. Так я погодився на стажування в Microsoft.

Що найважливіше для проходження співбесід?

З моєї точки зору, це:

  • Для стажування — обов’язково бути студентом (у нашій країні можна легко стати студентом знову, за потреби).
  • Комфортне володіння англійською. Ніхто не вимагає жодних TOEFL/IELTS, але якщо ви не можете розмовляти з інтерв’юером на прийнятному рівні, то, очевидно, інтерв’ю пройде не дуже добре. Крім того, поганий рівень володіння англійською відволікає інтелектуальні ресурси мозку на переклад.
  • Підготовка алгоритмічна. No rocket science, якщо ви гарно вчили структури даних і алгоритми в університеті, теоретичної бази, швидше за все, вам вистачить. На практиці ж потрібен хоч мінімальний досвід, тому раджу порозв’язувати задачки з Codeforces та зі спеціалізованих книжок для підготовки до інтерв’ю. І обов’язково спробувати це робити в Google Docs, на дошці чи на листку.
  • Мати хоч один проект, про який можна коротко розповісти на початку інтерв’ю. Я всім розповідав про свого бота на Google Ants AI Challenge.
  • Задавати питання. Багато запитань. Стосовно умов задач — важливо, та і просто проявляти живий інтерес.
  • Вміння впевнено себе вести, і бажано сподобатися інтерв’юеру.

Підготовка до стажування в Microsoft

Microsoft, як і всі великі ІТ-компанії в США, повністю займається організаційною підготовкою, і якщо є дружина чи діти — для них також. Вона надає список необхідних документів (паспорт і т. д.), потім надсилає нові документи тобі, і з ними ти подаєшся на L1 візу. Консул зазвичай задає всього кілька дружніх запитань, коли побачить мету поїздки.

Саме стажування триває 12 тижнів, дату початку можна вибрати від початку травня до кінця червня. Проживання на вибір: або знаходить компанія МК в одному з трьох варіантів (в порядку зростання ціни: сам в studio, двоє в 2-bedroom або сам в 1-bedroom), або знаходиш сам, а компанія компенсує певною фіксованою сумою, зазвичай більшою, ніж ви витратите. Перший варіант набагато зручніший, а другий — набагато економніший. Я обрав двокімнатну квартиру з сусідом — індусом, який отримував PhD в США і, будучи інтерном в Microsoft Research, працював над покращенням алгоритмів машинного навчання.

Стажування

В перший день проводиться New Employee Orientation — консультація для нових співробітників та інтернів. На ній розповідають про місію компанії, про те, як отримати доступи до будівель, видаються бейджики, підписуються останні офіційні документи та роздається корпоративний swag — футболки, записники. Завершується безкоштовним обідом і знайомством з менеджером (точніше тімлідом — в Microsoft твоїм прямим керівником в більшості команд є Dev Lead, а проектний менеджер, Manager за статусом, є еквівалентним розробнику). Мій керівник запізнився майже на годину, і я вже помаленьку починав нервувати. На щастя, ми дуже швидко знайшли спільну мову. Крім менеджера, у кожного інтерна також є і ментор — хтось з команди, хто може допомогти у разі появи запитань чи проблем, а вони виникали нерідко — дуже дякую за допомогу Скотту.

Хтось дбайливо пошукав лого мого університету і повісив на двері кабінету

Я потрапив у підрозділ WDG — Windows & Devices Group (тоді він ще називався Operating Systems Group) у команду Input Platform, яка займається пристроями вводу у Windows — від банальної клавіатури до цифрових ручок, тачпадів і т. д. Мій тімлід виявився достатньо практичним і вирішив, на відміну від багатьох інших, дати реальний проект. У деталі вдаватися не можу, але мені дісталося завдання розробити певне API, пов’язане з Xbox-контролером, яке зараз є частиною Universal Windows Platform. Стосовно робочого процесу я б розділив своє стажування на такі частини:

  • Перші 4 тижні — вивчення технологій, що використовуються для розв’язку проблеми, знайомство з кодовою базою і всіма внутрішніми засобами — в першу чергу Build-системою і системою контролю версій — Source Depot, яка нещодавно успішно була замінена на Git & GVFS (детальніше — тут).
  • 6 тижнів активної розробки.
  • 1 тиждень — підготовка до демо / code review. На останньому чи передостанньому тижні стажування всі інтерни беруть участь у презентації своїх проектів, на яку кожен може прийти подивитися, зокрема туди, швидше за все, прийде твоя команда. У мене з цим були певні складнощі: API — не найбільш презентабельний продукт, особливо в порівнянні з кльовими GUI-шками, які робили багато інших інтернів, не дивлячись на те, що real-life impact багато проектів не мали в принципі.
  • Останній тиждень — wrap-up, підсумки, розмови з рекрутерами, прощання з командою і останній день-два — просто відпочинок.

Кожного тижня проводиться 1:1 meeting з менеджером для синхронізації стосовно прогресу, поточних проблем і бачення майбутнього. Звичайно, за потреби можна легко і протягом тижня поспілкуватися позапланово. Що мені подобається — абсолютно всі в компанії, принаймні в нашому підрозділі, мають дуже хороший технічний досвід. Мій Team Lead сумував за написанням коду, тому завжди був радий допомогти з відлагодженням складних багів і подискутувати стосовно нових стандартів C++ чи на той момент гіпотетичного переходу на Git. Project Managers в Microsoft від Software Developers з точки зору технічних вимог майже не відрізняються — і це логічно, коли проектами є API/SDK, частини платформи чи ядра операційної системи. Інтерни зазвичай також ділилися на: Software Developer, Project Manager, Software Developer in Test і ще Explorers — вони за 12 тижнів встигали спробувати всі три ролі, щоб зрозуміти, що їм більше до вподоби.

Колектив компанії дуже інтернаціональний, але не можна не помітити велику кількість представників азіатських країн. У моїй команді демографія була така: тімлід — індус, народжений в США, ще один хлопець і дівчина з Індії, два китайці (один з Тайваню), пакистанець, канадець і українець.

Так виглядав мій кабінет. На комп’ютері встановлене те, що пізніше стане називатися Windows 10

Benefits

Крім вже згаданої повної організації переїзду, оплати медичного страхування та інших організаційних питань, Microsoft оплачує спортзал на твій вибір. На жаль, безкоштовної їжі немає, але обід відносно недорогий (в середньому $8). В офісі є безкоштовні напої. Сам кампус дуже великий і має систему шатлів — так би мовити систему приватних «таксі» у вигляді мікроавтобусів і легкових автомобілів, які їздять між різними будівлями, за замовленням. Очікування займає зазвичай 2-5 хвилин, тому я надавав перевагу велосипеду.

Відпочинок

Redmond — це симпатичне невелике містечко біля Сіетла, але в ньому можна померти від нудьги. Зокрема через це Microsoft майже кожного тижня організовувала якісь цікаві події, квести і хайки.

Центральною подією є так званий Signature Event, під час якого організовується приватна вечірка для всіх (близько 1,5-2 тисяч) інтернів, а наприкінці роздають подарунки. Під час першого стажування це було шоу Девіда Блейна і Xbox One, в 2015 році — концерт Maroon 5 в центрі Сіетла і Surface 3 у подарунок.

Результат

Вже ближче до середини стажування мені неоднозначно натякали, що я отримаю повторний офер на стажування. Взагалі за статистикою, близько 80 % інтернів отримують офери на повторне стажування або фул-тайм позицію залежно від того, як довго залишилося вчитися. У цьому плані політика достатньо ліберальна, додаткових інтерв’ю проходити не потрібно, крім випадку, якщо є бажання змінити команду. Це відрізняється, скажімо, від Google, де навіть після успішного стажування зазвичай все одно потрібно проходити додаткові співбесіди. Незважаючи на те, що стажування перевершило мої очікування, я все ж досі хотів спробувати свої шанси в Google. Але рекрутери дали дедлайн в 2 тижні, і в результаті я погодився повернутися.

Друге стажування було подібним. Основна відмінність — для стажерів між їх останнім і передостаннім роком навчання (незалежно від того, чи це бакалаврат чи магістратура) компанія дає фул-тайм офер, до чого я і готувався. Але цього разу я був розумніший і зразу з перших днів почав проходити паралельно співбесіду в Google. Цікаво, що менеджер в Microsoft сам радив звертати увагу також на інші компанії і розповів про те, що свого часу також обирав між цими двома компаніями.

Цього разу Google був досить швидким з відповіддю, і з різницею в два дні в середині стажування неформально, я вже отримав дві пропозиції на фул-тайм роботу після закінчення університету. Але як би це неймовірно дивно не звучало для мене буквально декілька років до цього, врахувавши цілу низку факторів, я вирішив залишитися в Microsoft. Серед ключових факторів, на які я звертав увагу:

  • Бачення майбутнього компанії. Після приходу Сатьї на позицію CEO Microsoft, компанія дуже трансформувалася на краще як всередині, так і з точки зору показників її фінансового росту.
  • Команда. З Microsoft я чітко знав, чим я буду займатися після повернення в компанію. З Google до підписання договору майже неможливо зрозуміти, куди ти потрапиш. Перевагою і недоліком Microsoft було те, що мене брали в ту ж команду, тому я вже добре розумів її нутрощі і мав 6 місяців досвіду, але з іншого боку це означає віддалену роботу на США, без жодного тіммейта в Ванкувері.
  • Країна. В США візовий процес достатньо складний, тому зразу потрібно було розглядати запасні варіанти. Запасним плацдармом Microsoft є Ванкувер. Google одразу сказав, що в США потрапити не вийде, і дав можливість вибирати з міст Європи, де я в першу чергу розглядав Лондон. Іншими актуальними містами могли бути ще Мюнхен та Дублін. Хоча я не був в жодному з цих міст на момент прийняття рішення, Ванкувер мене приваблював більше.
  • Фінанси. Враховуючи заробітну плату, акції, бонуси, а з іншого боку податки, оренду квартири, бенефіти типу безкоштовної їжі в Google, різниця виявилася в діапазоні всього декількох відсотків.

Отримання H-1B візи в США має свою специфіку, тому, як я і передбачав, я опинився в Microsoft Vancouver, де працюю вже 5 місяців. До того ж я про це не шкодую: British Columbia є одним з найкрасивіших місць, які я бачив.

Image source

Похожие статьи:
Как известно, программисты — люди творческие, но вместе с тем ревностно придерживающиеся определенных идей, к примеру, выбора языка...
Продолжая тематику полезных инструментов для работы с Flutter, хочу поделиться с вами теми, которые каждый день помогают мне делать...
Запитали IT-спеціалістів, як вони самостійно вивчають англійську та підтримують її рівень. Зібрали історії про найбільш дієві...
Компания ASUS представила в России VivoWatch, носимое устройство, созданное специально для отслеживания физической активности...
Одной из особенностей ОС Android 6.0 Marshmallow является функция «адаптивного накопителя», при активизации которой смартфон...
Яндекс.Метрика