Про собеседование в Нью-Йорке

TImes Square

Продолжая тему поиска новой работы, я-таки слетал в Нью-Йорк на финальный этап собеседования. В тот самый инвестиционный стартап, про который упоминал раньше. Забесплатно, в хорошую погоду и на Манхэттен — всё, что так любо сердцу белорусского эмигранта. То есть мне.

Всё случилось в один день и сплошным потоком. В восемь утра самолёт подвёз меня до аэропорта LaGuardia, откуда такси — прямиком в офис на шестичасовое собеседование из нескольких частей, а потом вечерний Uber — обратно на самолёт и домой. Регистрируясь на обратный рейс через роуминговый интернет из манхэттенской пробки я чувствовал себя чертовским важным и на всякий случай гражданином мира. По крайней мере двадцать лет назад, перебираясь через забор Заславской картонажной фабрики за халявными пластиковыми бутылочками для самодельного танка, я точно не планировал, что когда-нибудь жизнь повернёт вот так.

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

Собеседование проходило в шесть кусков от 15-ти до 60 минут каждый. Ну и обед, который скорее всего тоже влиял на итоговое впечатление, но только неформально. Если вам непонятно, чем breadth-first алгоритм отличается от уровня зрелости Ричардсона, то следующий заголовок можно смело пропустить и перейти к концовке.

Собственно, собеседование

Разговор про резюме

Сперва мы созвонились по Google Hangouts с начальником нового офиса в Торонто и 45 минут обсуждали моё резюме. Что делал, как, зачем, нравилось ли, и т.п. Так как под каждой строчкой своего резюме я мог подписаться, то напряга не было вообще никакого.

Первый этап программирования

Потом пришёл один из местных разработчиков и весь следующий час мы программировали. То есть программировал я, а он давал задачи. «А напишите функцию, которая для массива значений и числа выводит пары из массива, которые в сумме дают это самое число». «А как это можно оптимизировать?». «А если не для пары, а произвольного значения чисел?» (через рекурсию, конечно). «А какая сложность алгоритма получилась?»

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

Обед

Совместный поход на обед был любопытным. Я почему-то ожидал, что со мной пойдут какие-нибудь «очень важные люди», натасканные на общении с чужаками, которые будут меня всячески развлекать. Но оказалось, что со мной пошли обычные разработчики, которым, походу, не сразу было понятно, что со мной вообще делать. Но мы как-то быстро разговорились, принялись обсуждать задачи, которыми раньше занимались, и очень быстро скатились в сравнение концепций языков программирования и моделей параллелизма, и блин, как же я, оказывается, скучал по таким разговорам и людям, способным их поддержать. Да чего уж там — людям, которые хотя бы находят такие темы интересными.

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

Второй этап программирования

Тут было уже чуть-чуть сложнее. Дано дерево, и надо обойти его узлы в определённом порядке: по уровням, сначала слева направо, потом справа налево, и т.п. Например: F GB ADI HEC

двоичное дерево

И вот какая засада. Я могу решить это в лоб за пять минут, что, собственно, и сделал на месте. Но они наверняка попросили бы это решить через самый эффективный breadth-first алгоритм, о существовании которого я знаю (спасибо, книга про собеседования!), помню, что там что-то делается через очереди и без рекурсии, но в упор не помню, как именно. Ну и натурально меня об этом и попросили. После ночного недосыпа и плотного обеда за пол часа до этого я был уже интеллектуальный труп, так что ушло куча времени и наводящих вопросов, прежде чем я изобрёл и это решение. В принципе, могло быть и хуже.

Разговор про людей

И тут и подкатила самая тяжёлая часть собеседования. Сессия называлась Deep dive — детальный разбор какой-нибудь части проекта, в котором я когда-либо участвовал, и моих взаимоотношениях с людьми на нём. Проектов у меня было много и разных, так что рассказать есть о чём. Но тут внезапно я понял, что моя работа разработчиком с другими людьми мало подходит на пример эффективной командной работы. Ну как-то не случилось. Я очень легко ориентируюсь в иерархичных структурах: там всегда понятно, кто за что отвечает и где мои границы. В плоской одноранговой структуре типа команды, без внятного лидера я теряюсь. Как делиться общими задачами? Что делать, если равный тебе собрат абсолютно неправ? Все мои рабочие моменты, которые можно описать как «всё получилось офигенно», всегда были либо когда я вёл команду как менеджер, либо когда я работал один и мне никто не мешал.

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

Дизайн системы

Зато то, что не получилось на deep dive, получилось на последней стадии собеседования — дизайне архитектуры для высоконагруженной онлайн игры. Я не только задизайнил чёткий RESTful API с третьим уровнем зрелости, но ещё и прикрутил kubernetes кластер для immutable веб-  и API-серверов и отдельный кластер поменьше для реплицированной документной базы данных. Всё то, о чём я писал статьи последние полтора года пригодились, и на итоговую схему мы смотрели в полном восторге.

Чем всё закончилось

Из офиса я выезжал полностью довольным. Хотя технически проект мне всё ещё не казался интересным (кроме маленькой его части) и в случае чего предложение о работе я принимать не собирался, мне очень понравилась и атмосфера всего происходящего, и особенно — люди. Давно не попадалась команда разработчиков, которая читает те же программерские книги, что и я, и которая находит свою профессию настолько очевидно интересной.

А через сутки я получил письмо: «мы впечатлены вашими компетенциями и профессионализмом, но — нет». Нифига себе.

Одно дело, когда собираешься отвергнуть кого-то сам, и совсем другое, когда отвергают тебя. А именно как отвержение я это и воспринял, так что следующие сутки прошли в печали и размышлениях о природе вещей. Что совсем печально, они даже не рассказали, чем именно я им не подошёл. Попросил было обратной связи, но получил ответ, что «политика компании запрещает, но можем добавить, что команде было приятно в вами общаться». Официальная причина отказа — для такой маленькой группы как они, приходится быть очень избирательными.

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

А получил я их ответ в момент, когда с текущей работой, как и поиском новой, стало ну совсем всё плохо. Переговоры с начальством зашли в никуда, что исправлять — непонятно, и каждый божий день я хочу выйти в окно первого этажа, чтобы на офисной парковке меня съели медведи. И жопа даже не в том, что контора плохая. Они, кажется, вполне ничего, Просто всё, что я сейчас делаю, мне кажется бессмысленным, даже если оно юридически полезно. Даже в фантазиях по поводу, а что сделало бы (любую) работу интересной — пустота. И глядя на описания большинства вакансий я вижу точно такой же бессмысленный бред. Программирование — всё ещё очень интересная штука, но форма, в которой я ей занимаюсь, больше не работает. А новую никто не знает. Вот тебе и кризис среднего возраста.

Про собеседование в Нью-Йорке: 13 комментариев

    1. Спасибо, буду иметь ввиду. Я пока хочу походить по собеседованиям, понабираться опыта, и пока не сильно дёргаться, потому что, не зная, что же именно я хочу, есть большой шанс променять шило на мыло и через пол года начать страдать сначала

  1. Паша, главное-это поддержка самого себя и конечно же ощущение того, что ты полезен и нужен… и да — незаменим. Это воодушевляет.
    Удачи тебе огромной

  2. Есть ещё возможная третья причина отказа. Малые компании не любят принимать людей, которые потенциально могут впоследствии уйти и создать свой аналогичный бизнес. Кроме того, демонстрация на собеседовании склонности к лидерству и независимости суждений может быть расценена как угроза действующей иерархии управления. А вообще — кто их поймёт.
    В любом случае, если удастся придумать свою бизнес-идею и замутить собственный стартап — это даст столько драйва и мотивации, что надолго забудешь про понятие «скучная работа». Ну, и забот добавится, конечно.

  3. Спасибо, за то что делитесь своими впечатлениями о жизни о технологиях. Вас очень приятно читать.
    Любопытно, что за книга про собеседования которую вы упомянули выше?

    1. Спасибо! Книга называется Cracking the Coding Interview. У меня издание 2015-го года (вроде на рутрэкере, кхм, продаётся), но, возможно, есть свежее. И она такая, честная. Сборник задач, а не рецептов обмануть систему. Даже просто почитать полезно

        1. Кстати, если книга нужна была не сколько для интервью, сколько из любопытства к своей профессии, у меня на примете есть ещё одна интересная — Imposter’s Handbook. Это про базовый computer science от человека, который этот самый computer science не изучал. Но это Роб Коннери, ему можно верить. Он сейчас, кстати, на пару с Ханселманом пишет вторую часть. Не знаю, «продаётся» ли она на рутрэкере, но дядьки классные и я думал обе книги реально покупать, только в бумаге.

          1. Спасибо большое Павел!
            Книга the imposter’s handbook действительно стоящая. Понравилась подача материала, живые примеры с картинками которые легко запечатляются в памяти.
            Вторую часть книги авторы пока предлагают в цифровой версии, которую обновляют по мере готовности. В бумаге обещают в декабре.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *