Начало
Всем привет! Часто, пробегая утром глазами заголовки на Хабре, я вижу статьи о том, как кто-то уехал учиться зарубеж. И каждый раз я думаю, что пора уже перестать лениться и описать свою историю о том, как я уехал стажироваться в Facebook.
Коротко о себе на начало 2011 года, о том, что я помню сейчас. Я занимался спортивным программированием. Не очень успешно, но не сказать, что провально. Рейтинги на TopCoder и на Codeforces были вполне высокие, и я готовился к последней попытке пробиться в финал. Я поучаствовал в Facebook Hacker Cup 2011, как в одном из постоянных контестов, где просто можно порешать задачи. Там я дошел до 2 раунда и получил футболку, решив 1 задачу (самое классное, что я не знал как ее решать и думал уже выключать компьютер, но вдруг озарило). И эта задача перевернула всю мою жизнь.
Через 2 месяца, в апреле, мне на почту пришло письмо от рекрутера Facebook, что мое выступление в HackerCup было хорошим, и не рассматриваю ли я возможность поработать в их компании. Ну сказать, что я был удивлен, не сказать ничего! До этого еще двое моих друзей ездили на стажировки: один в Microsoft (впоследствии остался там), другой в Facebook (теперь работает в Google). Я был наслышан о жизни инженеров «там» и взялся за составление резюме. Резюме вышло крайне скудное, в основном соревнования, где я участвовал, а опыта работы-то и не было. Но телефонное интервью мне назначили. И позвонили почти сразу. Отмечу, что я собеседовался на работу, а не на стажировку.
Телефонные интервью
Первый звонок был от рекрутера. Надо сказать, что английский я начал учить года в 3 и учил до института с очень хорошим преподователем. В институте вроде тоже на пары ходил и практика была, но я не понял процентов 80 из того, что говорила рекрутер. Она говорила очень быстро, спрашивала, на чем я пишу, мои интересы. Потом было назначено первое техническое интервью. Через пару дней оно состоялось. Простые задачи на алгоритмы. Только последяя вызвала некоторые затруднения. После мне написали, что надо назначить второе. Назначили. Пришло время для него. Задача на алгоритмы — легко, а вот потом надо было спроектировать news feed. Я на самом деле что-то говорил, пытался рассуждать, приободряла фраза «yes, that makes sense!», но после этого попросили назначить третье. Я до сих пор думаю, что это из-за моего «дизайна» news feed'а. Третье было проще, опять задачи на алгоритмы. Довольно простые. Тогда первый раз мне дали задачу, которая потом стала уже самой классикой — найти в массиве k-ый максимум. В контестах мы всегда делали это используя stl — nth-element, и я знал, что сложность его линейна, но тут надо код писать руками, но тоже осуществимо!
Через пару дней мне пришло письмо, что меня зовут на онсайт интервью в США. При чем оплачивают проживание и перелет. Я до этого никогда не был в Америке, и это было просто ВАУ — нахаляву слетать туда! Но уже был май, а лететь надо в июне. Визы нет, в посольстве очереди из Work And Travel'ов, но все-таки я успел все сделать до рейса, который был забронирован Facebook'ом, и полетел на интервью.
Онсайт интервью
В Калифорнии было очень круто! Мои друзья, которые переехали туда относительно давно, показали мне Сан Франциско, я посмотрел окрестности. Но само интервью было жестким. 4 интервью подряд по 45 минут — куча задач. Код пишешь на доске. Три я отстрелял отлично, а вот 4ое… Я завалил самый лекгий вопрос по javascript (сейчас для меня это кажется ерундой написать свою реализацию функции bind, а тогда я не знал, что она делает, так как на js писал только легкий front-end для своего диплома), а потом был дизайн на 40 минут.
Вернувшись домой, я вставал в 5 утра каждый день, так как разница во времени 13 часов — нехилая. И в одно утро прочитал на почте: unfortunately… Сразу как-то стало грустно! Но уже так просто я не хотел отступать! Я ответил на письмо, что если на работу не подхожу сейчас, может тогда на стажировку? Через пару дней мне дали согласие. Даты: с сентября до середины декабря. Тут стало ясно, что я пропускаю чемпионаты по спортивному программированию, которых ждал и готовился все это время. И в этот момент я осознал, что моя карьера олимпиадника завершилась в пользу другого направления. Надо сказать, что за пару месяцев до отъезда я начал усиленно читать книги, статьи (до сих пор не разобрал кучу вкладок с Хабра), но уровень был все равно очень низкий. Я не умел и не знал много чего, но тогда мне не казалось это страшным.
Стажировка
За пару недель мне сказали, что команда у меня будет Site Integrity — будем бороться со спамом и взломами. Совершенно был не знаком с этой темой. Но деваться уже некуда — полетел на стажировку.
Стажерам дают квартиры — по 4 человека в квартире, по 2 — в комнате. Аренда квартиры уже оплачена и не надо платить коммуналку. Так как я хотел, чтобы моя жена прилетела ко мне на пару месяцев — для меня это был не вариант. В группе на Facebook'e для стажеров мы списались с парнем из Канады — он тоже хотел снимать жилье сам. Мы договорились, что будем соседями. Когда я прилетел, мой будущий сосед сообщил, что он уже 2 недели не может найти квартиру. У меня было 4 дня до старта стажировки и я принялся за поиски. Нашел объявление — поехал, не понравилось. А рядом увидел еще один дом — пошел туда и там уже все было круто! Мы сняли 2-спальную квартиру + гостинная за 2020$ в месяц. Еще взяли машину в аренду. Правда я ездил на работу на шатле — это такие маршрутки от компании — на них ездят только работники — очень удобно. Сейчас, например, в наших шатлах есть еще и вай-фай, и я слушаю курсы Coursera по пути на работу и домой. Итак, жилье было найдено, стажирока началась.
Если честно, первое время было очень трудно — плохо понимал команду, задания вызывали ужас, но я работал часов по 12-13 в день и ходил на работу на выходных — по 6-7 часов. Мой менеджер мне не помогал так, как надо, я делал все сам. По началу я не понимал важность вопросов — спрашивайте! — я стеснялся, чувствовал себя некомфортно из-за своего английского, поэтому первый месяц разбирался с каждой штукой очень долго. Потом пошло быстрее. В конце, я уже свободно ориентировался в коде, понимал все и отвечал на вопросы новичков. Так у меня появился скилл чтения кода, что сейчас очень помогает. Все задания я сделал. Многое ушло в production. Приятно было услышать от друга, с которым мы начали стажировку (ему дали оффер после и он сейчас работает в facebook), что недавно он разбирался в моем коде.
Попробую резюмировать стажировку:
Офис
Недавно мы были в новом офисе Facebook — это уже не то! Он, конечно, большой, стало много кафешек, но тогда мы работали в Пало Альто. Небольшой офис (относительно), но очень крутой! Теннис, рядом баскетбольный корт, настольный футбол, куча диванов, игровые автоматы, постеры, просто hack атмосфера.
Еда
В компаниях подобного уровня обычно кормят бесплатно. Три раза в день и очень вкусно! По началу ощущение шведского стола где-нибудь в Турции и хочется попробовать все. Добивает то, что куча micro-kitchen со сникерсами, твиксами, бочками M&Ms и т.д. Еще холодильники с любым напитком, какой хочешь и все это бесплатно. Я прибавил в весе килограм ..., в общем, много. Сейчас вернулся в свой вес и не повторяю таких ошибок. Мой метод — беру утром на кухне снеки на весь день и стараюсь брать только орехи и йогурт. А на обед, завтрак и ужин не брать тортики, а только фрукты (которых тоже очень много).
Люди
Ребята очень крутые. Очень! И все дружелюбные. Любой бросит все, если ты что-то у него спросишь и будет это объяснять. Поработав так, я сам стал таким. У команды многому учишься. Еще многому учишься, читая код на code review. Я узнал много очень классных хаков C++ и javascript. Если поставить себе цель научиться и спрашивать — очень быстро станешь учителем сам :)
Условия
Я работал на 15 дюймовом MacBook Pro. Тогда я пересел на маки, хотя первую неделю не понимал, как им пользоваться. Любой софт — бесплатно (если по работе, конечно). 32 дюйма монитор в офисе, эргономика везде — я заказал себе клавиатуру Microsoft natural ergonomic 4000 — принесли через 20 минут. Дали iPhone 4S (тогда это было в моде) с безлимитным интернетом и звонками по всему миру (тоже не наглеть, ведь безлимит — это просто счет идет компании). В общем все для тебя, только пиши код. Сейчас я заказал себе Kinesis, ergo мышь и все это мне предоставили!
Программирование и технологии
Отдельный пункт. Расскажу как работал на стажировке.
Во первых, я научился пользоваться терминалом. find, grep — это просто клад. Я стал пользоваться VIM. Не просто так, а дошло до того, что я снес все IDE. Я обязательно поделюсь своим конфигом для VIMа, если кому-то будет интересно! Более того, сейчас я дописываю свой плагин для вима, но об этом в другой статье. Git — это то, что я не умел и чему научился. Code review — без него вообще не понятно как работать. Ведь идея отличная — проверить код до того, как его отправить. Чтобы избежать лишнего рефакторинга, лишних багов, чтобы все уже знали, что ты написал, а не узнавали это случайно, через месяц, когда потратили N часов, для написания этой же фичи. Вот в принципе все. Это все, что нужно для того, чтобы работать! И сейчас я использую все то же самое! В Facebook это вообще культура — культура «hacker». За это время я стал работать на javascript, python, java. Продолжаю писать на C++. Узнал много паттернов и тонкостей, кучу новых инструментов и приемов.
Зарплата
Большая. Очень. Правда налоги тоже не маленькие, но часть вернули по возвращении.
Друзья и знакомые
Тут все ясно без слов.
А что дальше?
В моем резюме появилась еще одна строчка. Благодаря ей я получил пару десятков собеседований и теперь работаю в цетральном офисе Google. Мой уровень резко растет. На почте тонны предложений о собеседованиях. Много хакатонов, свои проекты, команды, люди, которые увлекаются тем же! Тогда в 2011 году я и не думал, что через 2 года окажусь там, где я сейчас!
Я описал все скомкано и кратко! Если у Вас есть вопросы — спрашивайте в комментах, отвечу с радостью!
P.S.
У меня взяли интервью, когда я вернулся после стажировки. Кому интересно — вот ссылка.
Автор: alexfetisov