Сегодня я хочу представить вам интервью c программистом, а точнее программисткой из Кремниевой долины, голос которой многим из вас хорошо знаком. Ведущая самого популярного в России технологического подкаста Radio-T Ксения Покровская 5 лет живет в США, и почти 3 из них она занимается мобильной разработкой в Facebook.

В интервью мы поговорили о ее личном опыте поиска работы в США и рабочем процессе в Facebook.

— У меня классическое образования для программиста: я закончила факультет Программного Обеспечения в Московском Институте Электронной Техники. Выбор специальности не был просчитанным и до конца осознанным, я пошла учиться тому, что мне нравилось и получалось, и это была математика. Я пошла на факультет ПО, не имея компьютера. Заработала я на свой первый компьютер после первого курса – тогда и началось мое осознанное программирование.
Учебная программа в российских вузах была построена не очень эффективно, поэтому после его окончания достаточно сложно было сразу найти работу программистом.

Предвидя это, на 4 курса я решила приобщиться к технологиям и пошла работать инженером технической поддержки в компанию Parallels, которая сейчас довольно известна в Москве среди программистов, а тогда в ней работало всего человек 40. Поддерживала пользователей я недолго: примерно через две недели мне стало скучно, я подняла apache на своем компьютере, начала делать сначала статические web-странички, потом более сложные вещи: расписание нашего отдела с возможностью редактирования. Инициативы такого плана дали мне возможность довольно быстро перейти из отдела техподдержки в отдел разработки. Сначала я программировала на Perl, потом Python. А дальше вышел iPhone, мне стало интересно, попробовать написать что-то для этой платформы, я около года изучала эту платформу в свободное время, а потом осуществился еще один переход внутри компании – и я стала мобильным разработчиком.

— Как ты оказалась в США?

— Главным поводом для переезда были семейные обстоятельства, а я продолжила работу в Parallels, но теперь уже в Сиэттловском офисе. Спустя какое-то время мне захотелось попробовать свои силы в одном из американских технологических гигантов, и я начала активно готовиться к собеседованиям – и вот уже несколько лет работаю в Facebook.

— До того, как ты получила offer от Facebook. В скольких компания ты проходила собеседование?

— В прохождении собеседований, как и в любом деле, тренировка – это залог успеха, поэтому прежде чем отправлять резюме в компанию мечты, нужно испытать себя на интервью с другими компаниями. Так я и поступила: поскольку я хотела работать именно в Facebook, то до того, как идти к ним, я прошла еще несколько собеседований. И с каждым разом мои способности прохождения технических интервью росли. От пары первых компаний я, конечно, не получила предложения о работе, но те собеседования, что проходили примерно в одно время с Facebook, закончились офферами.

— Как устроен процесс собеседований в американские компании?

— Все собеседования для программистов в больших американских технологических компаниях устроены приблизительно одинаково. В стартапах немного другая организация рабочих интервью. Если говорить про Apple, Google, Facebook, Amazon, то все довольно типично: собеседование проходит в три этапа. Первый – это телефонный разговор со специалистом по найму, второй – так называемый, phone screen (удаленная техническая проверка длительностью от получаса до часа), и последний этапа – этой очное собеседование (или, как его называют в США, onsite interview).

—Расскажи подробнее, как проходят onsite-интервью?

В Facebook этот процесс имеет некоторые отличие от других компаний: мы выбираем человека не в определенную команду, а в принципе в компанию. Например, в Google или Apple тебя будут собеседовать именно те люди, которые будут работать с тобой в одной команде. Вопросы выбираются ими же на их усмотрение. В Фейсбуке, так как мы набираем людей в компанию в целом, процесс достаточно откалиброван: есть определенный набор задач, которые прежде чем попасть на собеседования с кандидатами проверяются на действующих программистах фейсбука.
Первое, что обычно поражает программиста, только переехавших из России, – это то, что на очную встречу с компанией придется потратить целый рабочий день. В США все onsite-интервью (их как правило 5-6) проходят в один день и делятся на 2 типа: технические и поведенческие. Технические часть обычно состоит из кодинг-интервью (задачки на алгоритмы и структуры данных) и дизайн-интервью, на котором задаются открытые вопросы, а цель интервьюера – понять, как вы мыслите и насколько готовы к решению сложных производственных задач.
Поведенческие собеседования в Facebook направлены на то, чтобы распознать, будет ли вам комфортно работать в культуре компании.

— Как принимается в Фейсбуке финальное решение по кандидатам?
— Каждый из интервьюеров составляет стандартизованный отзыв на кандидата. При это внимание обращается на, так называемые, red flags. Например, если кандидат справился с задачей, но в процессе решения были моменты, которые могут мешать эффективности работы, то об этом интервьюер должен написать в своем отзыве. Помимо развернутого отзыва, интервьюер дает свою рекомендацию, нанимать или не нанимать кандидата. Финальное решение принимать специальным нанимающим комитетом на основании отзывов и рекомендаций интервьюеров.

— Знанию каких языков программирования и технологий отдают предпочтение в Фейсбуке и вообще в Кремниевой долине?

— Как я уже говорила, в Facebook люди набираются не в конкретную команду, а в компанию в целом, а в компании очень много разных проектов, поэтому практически любые языки и технологии найдут применение. Собеседование можно проходить на любом языке программирования, но, конечно, может так сложиться, что интервьюер не будет знать вашего языка достаточно, чтобы оценить ваши глубокие знания. Php или Hack – неплохой вариант для Facebook, а Python хорош для любой компании. Если вы мобильный разработчик, то собеседование будет проходить на Java для Android или Objective-C/Swift для iOS программистов, и интервьюер точно будет знать этот же язык.

— Насколько важен предыдущий опыт работы для успешного прохождения собеседования?

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

— Представим, что кандидат успешно прошел собеседования и получил оффер от Facebook, но через пару месяцев понял, что ему не интересен проект или некомфортно работать в команде. Может ли он поменять проект/команду? Как устроен этот процесс?

— Вообще в Facebook на первые 4-6 недель новый сотрудник попадает в условный bootcamp и проходит “курс молодого бойца”, решая реальные задачи, которые идут в продакшн, с помощью ментора. В это же время новый сотрудник активно общается с менеджерами разных команд, чтобы сделать выбор,
Если ты через какое-то время понимаешь, что это не твоя команда, не твоя технология и как-то всё тебя уже не радует, то процесс поиска команды, который был опробован в bootcamp, просто повторяется.

— Над каким проектом ты работаешь в Facebook?

— Я работаю над библиотекой, которая упрощает создание высоко оптимизированного UI в приложениях для iPhone. Идеология очень похожа на React, но фреймворк абсолютно нативный.

— Как устроен в целом рабочий процесс в Фейсбуке: от постановки задачи до выхода в продакшн?

— Я не возьмусь говорить за компанию в целом, расскажу о своем опыте. Как уже упоминалось, я занимаюсь разработкой библиотеки и мои конечные пользователи — это разработчики. В этом случае, рабочий процесс очень сильно определяется самой командой. Мы предлагаем и обсуждаем идеи внутри команды и с нашими пользователями, решаем, какие имеют больший приоритет и согласно этим решениям формируем план и дедлайны. Далее уже действуем по намеченному плану, решаем, сколько человек нужно для выполнения проекта и как координировать всех вовлеченных.
Другой момент, который очень сильно влияет на рабочий процесс и помогает нам понять, что мы идем в правильном направлении — это сбор метрик. Google, если я не ошибаюсь, была одной из первых компаний, кто внедрил такой подход. В мы в Facebook активно его используем.

— Расскажи об основных технологиях в Фейсбуке?

— Facebook – огромная компания с широким технологическим стеком. Например, у соцсети Facebook backend написан на C++, у Instagram – на Python, а у WhatsApp на Erlang. Конечно, у каждой компании есть флагманы, Facebook, например, уже несколько лет работает над собственным диалектом PHP, который называет Hack, если очень упростить, это статически типизированный PHP, этот язык довольно активно используется внутри. Но общая тенденция в большинстве крупных технологических компаний заключается в том, что проект, где используется любая из более-менее популярных технологий или языков, всегда есть.

— Насколько быстрый карьерный рост у разработчиков в Facebook? За какое время в среднем разработчик проходит путь от Junior до Senior?

— Это очень сильно зависит от человека. Я работала с очень талантливым программистом, который за год вырос от Intern до Senior, но это скорее исключение. Путь от Junior до Senior вполне реально пройти за несколько лет, если продолжать двигаться внутри одного технологического стэка. Если например, вы начинали как backend разработчик, но через пару лет вам надоело и вы решили занятся машинным обучение, учитывайте, что первое время, вы скорее всего будете не так полезны компании, потому что находитесь в периоде накопления знаний.

— Расскажи о своих планах на карьеру. Ты уже работаешь в компании своей мечты. Что дальше?

— Я думаю, что работа в Facebook – это не конечный этап. Сейчас я как раз в раздумьях, куда и как развиваться дальше. В данный момент, я занимаюсь не только программированием, но и созданием эффективного взаимодействия между командами, которые вовлечены в мой проект, моя позиция называет tech lead и она на перепутье между менеджерским путем развития и программерским.
Если в скором времени, я пойму, что организация процессов мне интереснее, то начну смотреть в сторону позиции менеджера, возможно, наоборот, снова погружусь в программирование по полной. Пока программирование для меня понятнее и удовольствие от результата больше. Написал код, обсудил его на ревью, закоммитил — результат от каждого шага заметен и по капельке дает чувство выполненной работы, тогда же в случае координирования и организации других людей, можно вложить очень много сил, но не получить результата по независимым от тебя причинам. В общем, это для меня сейчас нерешенный вопрос.

Комментарии (10)


  1. IvanPulo
    29.03.2018 22:33

    C#, Go используете?
    В случае переезда в США это же H1B виза? Если квота за год уже закончилась, компания будет ждать следующую?


    1. progblog Автор
      29.03.2018 22:37

      Отвечу Вам на вторую часть сообщения. H1b – самая распространенная виза для программистов, но не единственная. Если программист не попадает в квоту H1b, но при этом компания очень хочет его заполучить и имеет офисы в других странах, то часто такого программиста на год перевозят в офис этой компании в другой стране, а потом по L1-визе перевозят в США.


    1. outcoldman
      30.03.2018 00:09

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


      1. Cenzo
        30.03.2018 04:18

        Давно уже разговаривал с HR фейсбука, звонили они по поводу вакансии в их сетевой core-networking отдел. Явно спрашивал по поводу найма в компанию vs найма в команду. В этом конкретном случае сказали однозначно, что разговор будет с тимлидами этих самых команд и потенциальная работа там же. Было бы очень глупо, если бы FB нанял системщика с опытом разработки низкоуровневых штук в Linux и ядра и засунул его в команду Java-программистов под Андроид.


        1. outcoldman
          30.03.2018 04:53

          Конечно. Логично. Это более узкоспециализированное направление. Поэтому я и написал, что редко. Когда человек спрашивает про C# или Go, то я предполагаю Software Developer роль. Ты же говоришь о каком-нибудь SRE или Network Engineer. Это разные направления, нанимаемые в большинстве случаев разными орагизациями.
          С другой стороны могут нанять программиста с опытом low level kernel development в команду разработки для мобильных. Почему нет?


  1. Abir4eg
    29.03.2018 22:34

    Всегда когда читаю про работу в больших компаниях создаётся ощущения, что всё там розово и блестяще, что нет никакой рутины, провалов, факапов и прочего.
    Или туда набирают только реально идеальных кандидатов, которым слова «прокрастинация», «забухал», «провалил дедлайн из-за разгильдяйства/проторчал на реддите» не известны.
    Хорошо там быть менеджером. Даже скучно. В нашей сибири только успевай за прогером бегать, уговаривать его код написать, а потом исправить по результатам тестирования.


    1. outcoldman
      30.03.2018 00:16

      Конечно же, все это существует. Но таки программисты отсеиваются при помощи помощи более серьезных Interview, на которых проверяется не только возможность написания кода, но и еще способность человека брать на себя ответственность и принимать решения. Если вы сверх гениальный программист, но те, кто собеседовал сойдутся во мнении, что с вами будет тяжело работать — то нанимать не будут.
      И у менеджеров тут проблем много разных. И так же встречаются очень часто проблемы с невыполнимыми дедлайнами. Проблемы решают по другому.


    1. konchok
      30.03.2018 01:27

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


  1. Joannes
    29.03.2018 22:34

    Интересный подход, когда в команду новых разработчиков набирает тимлид, а не директор компании -)


  1. Yarique
    30.03.2018 01:53

    "К этой мечте стремишься ты! Работать роботом ради бумажной мечты!(с)"