Как я проходил собеседование в компанию Zynga

:

На Хабре опять стали появляться статьи о том, как проходить собеседования на должность программиста. Материал из них полезен соискателям так же, как учебники полезны студентам во время сессии. Вызубрите том по Мат. Анализу и, если попадете на тот экзамен, получите пятерку.

Гораздо интереснее читать реальные истории людей, которые описывают свой опыт собеседований в ту или иную известную компанию. Что спрашивали, что не спрашивали, какая была атмосфера, сколько проходило интервью? Такие данные много полезнее, чем «а зазубри еще это, авось спросят».

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

Ну, и картиночка на затравку.


Итак, в конце весны этого года на DTF висел баннер, который многие наверняка видели. Zynga поглотила все ресурсы Штатов и теперь хантит народ в заснеженной России. Если мне не изменяет память, они делали акцент на PHP и C++ программистов. Я подумал, что чем я хуже, тем более клиент большинства их игр написан на Flash. Наверняка, и флэшеры им тоже нужны.

Сразу скажу, что мне более было интересно как далеко я зайду и что из этого получится, чем реальная работа на Zynga. Во-первых скриншот. Н-цать пустых банок от Red Bull там не просто так. Во-вторых, я не люблю собак.

Интересно, что в то время по запросу «work at zynga» в первой тройке была ссылка на мой блог с вышеупомянутой картиночкой. Честно, я немного боялся, не выйдет ли мне это боком.

Странно, что про это событие (почти) никто нигде не писал. Я не знаю никого, кого в итоге взяли. А народу там было человек 50 на второй (очной) стадии собеседования. Сколько же они еще отсеяли на этапе разговора по Skype. Наверняка, не только YoungSkipper из Хабравчан был на том интервью.

Предварительное интервью

Главным по рекрутингу был некий Mathias Connot (он даже по этому поводу завел себе профиль на moikrug). По почте я общался только с ним. Где-то я читал, что он когда-то давно успешно хантил русских в Microsoft.

Мое краткое резюме им понравилось, Мэтт «записал» меня на Skype интервью в определенный день и час, выдал порцию инфы о компании и промо ролик (Внимательнее на 1:57). В назначенное время мне позвонил Luke Rajlich, FarmVille CTO.

Ошибка номер 1 — как бы вы хорошо ни знали АнглийскийАмериканский, перед разговором по телефону/скайпу с носителем языка поговорите с зеркалом, посмотрите фильм на английском — постарайтесь привыкнуть к иностранной речи.

Я какое-то время работал в Нью Йорке. У меня большой опыт общения с американцами. Но все равно, во время интервью, процентов 70 моего мозга были целиком выделены на то, чтобы понять собеседника и правильно построить ответ. В том числе и из-за неидеальной связи (на его конце). Плюс, я немного волновался.

Люк пробежался по моему резюме и стал задавать вопросы:

  • Рассказать о себе и проектах, в которых участвовал. Тут нужно было быстро и кратко перечислить несколько своих самых интересных/сложных проектов и рассказать о своей роли в них.
  • Несколько вопросов о Flash. Многопоточность, сокетные соединения, особенности отрисовки, ручное управление событиями мыши с полупрозрачными битмапами — в основном характерные для flash game development вопросы.
  • Далее он пошел в сторону. Спросил о различиях системы типов Java и ActionScript 3, чем отличается Strong Typing от Static Typing. Пытался запутать все это дело еще и Duck Typing'ом, что частично получилось.
  • Прыгнул на C++ и спросил про Templates. С чего бы вдруг? Я от плюсов очень далеко, но что знаю рассказал с примерами из других языков.
  • Попросил рассказать об MVC.
  • Спросил зачем нужен полиморфизм, что такое Abstract Factory и еще какой-то паттерн. Не помню.
  • Поинтересовался имел ли я дело с SQL и MySQL в частности.

25 минут прошли незаметно. На оставшиеся пять минут я позадавал Люку несколько вопросов — не каждый день удается поговорить с CTO FarmVille. За это время я узнал, что они в основном используют Linux + Apache + MySQL + PHP; что Erlang и Scala интересны, но на них не найдешь разработчиков; что игры свои они не защищают, потому что бесполезно и (в массе своей) не нужно. Посмеялся, когда я ему рассказал про 3 одинаковых полных клона в россйских соцсетях с фейсбука.

Ошибка номер 2 — надо заканчивать нервничать. Вроде не маленький уже, экзамены сдавал, на собеседованиях был, на конференциях выступал, подкасты записывал. Но все равно.

Ошибка номер 3 — не отвечайте сразу. Подумайте. Даже такие простые вопросы, как Strong Typing и Static Typing можно перепутать. Не бойтесь исправлять свои ошибки. Через пару минут уже на другом вопросе я понял свою фатальную ошибку и сказал, мол, я вон там сильно ошибся, на самом деле это вот так.

Ошибка номер 4 — прочитайте уже книгу GoF про паттерны. Кто-то скажет, что нафиг не нужно и так все понятно. Но я все же точного определения Abstract Factory (чего от меня хотел интервьювер) не знал, а рассказал немного другой тип фабрик и как мы используем их в своей работе. Порой, люди от вас хотят услышать именно определения.

По результатам разговора я был собой сильно недоволен. Все разобранные ошибки сделали свое дело, и я бы себя такого, скорее всего, на работу не взял.

Но нет, через какое-то время получил письмо от Мэтта, что они хотят меня лично видеть в Москве на втором этапе собеседований.

Подготовка

У меня был месяц до второго собеседования, в течение которого я сквозь лень почитывал интернет в поисках информации о компании Zynga, о возможных вопросах и задачах. Судя по советам в Интернетах, на интервью ходят одни сишники и их всех заставляют чеканить на скорость названия структур данных и писать на бумажке все известные алгоритмы сортировки. Я совершенно не знал чего ожидать.

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

Второй этап

Как сказал Мэтт, план был такой — по результатам интервью они отбирают 40-50 человек, едут командой в Москву, где лично беседуют со всеми по 10 человек в день (5 утром, 5 вечером).

В назначенное время я подъехал к отелю Marriott Royal Aurora в центре Москвы, где расположилась команда интервьюверов. Нас было на утро человек 5 или 6. Мэтт отвел нас в переговорную комнату, где я познакомился с другими кандидатами. Со мной попались в основном сишники и один PHP'ист. Странное настроение было у всех, мол, лучше там PHP'истом, чем тут сишником.

Тут же произошел забавный казус. Вошел молодой человек и молча уставился на нас. Мы уставились на него.
— Мэй ай сит хир? — спросил он и отодвинул стул.
— Sure, why not? — почему-то ответил я, и мы продолжали пялиться друг на друга еще секунд 10, пока я не сообразил.
— А что это мы по-английски говорим? — спросил я.
— Ой, а вы что, тоже на интервью? А я думал вы меня сейчас спрашивать тут будете.
Поржали. А ведь надо было начать спрашивать.

Потом Мэтт рассказал нам о компании и как правильно проходить интервью. Думаю, будет полезно всем:

  • Не торопиться, слушать вопрос, переспрашивать если что непонятно. Приступать к решению только полностью убедившись, что решается именно та задача.
  • Не пытаться поразить интервьювера сложностью своих решений. Начинать с простого, чтобы в итоге не запутаться.
  • Не сидеть молча, даже если не можете найти ответ. Размышлять вслух, показывать процесс обдумывания решения. Человеку интересен не столько ответ на вопрос, сколько как вы к нему пришли.

Интевью были построены следующим образом. У каждого соискателя своя комната со столом, двумя стульями, водой, окном и туалетом. На 20-30 минут заходит один из «экзаменаторов» и проводит свою часть интервью. На листках бумаги пишешь алгоритмы на любимом языке, рисуешь схемы данных и взаимодействия машин… Далее 15 минут перерыв. При этом, как сказал Мэтт, планируется от 3х до 5ти интервью с каждым, что если вас выгонят после третьего, то это, мол, ничего не значит. Но мы-то знаем…

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

Ошибка номер 5 — постарайтесь заранее разузнать как будет проходить собеседование, какие именно специалисты нужны компании, кто будет проводить собеседование.

Для меня было очень неожиданно, что ни один интервьювер не задал ни одного конкретного вопроса не то что по Flash, а вообще по языку программирования или технологии. Я, честно говоря, не думал, что меня будут интервьюировать на позицию C++ разработчика. Какой из меня C++ разработчик? Мозг был заполнен разной специфической для Flash информацией, а мог бы ведь запихать чего более полезного.

Первое интервью

Сразу же ошибка номер 6 , которая не то что бы ошибка, просто я начинаю тупить, когда кто-то смотрит мне в листок или в монитор. Я не могу делать практически ни-че-го. Это меня подводило многократно в школе, в университете на экзамене, на работе, а теперь тут. Я знаю многих с подобной проблемой. Нужно как-то учиться и пытаться с ней бороться. Никто не знает, что после собеседования вы можете написать этот алгоритм, над которым парились час, за 15 секунд.

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

Я вспомнил все похожее, что когда-либо делал и читал: реализацию A*; как из его работы частично кэшировать результаты для других мобов; завести вейпоинты на карте; разные другие варианты препроцессинга пространства; объединить мобов в кластеры с самоорганизацией внутри (чтобы было не так скучно); перекинуть часть обсчета на клиент (в разумных пределах) в конце концов…

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

Ошибка номер 7 — сколько можно повторять, не торопитесь! Даже Мэтт об этом предупреждал. Поймите проблему, обдумайте самое простое решение, напишите его. Посмотрите на уже работающий алгоритм, и сразу поймете как его улучшить и оптимизировать.

Второе интервью

Следующему собеседнику было интересно в каких проектах я участвовал. Рассказывал в основном о социалочках (в конце концов, в игровую же компанию устраиваюсь!). Во второй половине он спрашивал меня о структурах данных. Задал задачу найти цикл в Linked List. Возвращаясь к ошибке номер 7, я как дурак решил выпендриться знанием не самых очевидных алгоритмов, где и встрял в следующих вопросах, когда нужно было работать с их результатами. За последние пять минут в очередной раз протупил, но в перерыве задачу все-таки написал и ждал следующего посетителя.
Третье интервью.

После перерыва ко мне вошел CTO Zynga Cadir Lee. Если, кто были остальные я не совсем понял, то Кадир явно выбивался из группы молодых веселых парней. Он был больше похож на лектора в университете. Тут я почувствовал себя студентом на первом курсе и вытер холодный пот с рук об штаны.

Сперва, он проверил решение предыдущей задачи. Пару раз переспросил нафига я так сделал, а я опять проклял себя за ошибку номер 7. Далее последовал очень интересный и весьма неожиданный вопрос. Я к такому совершенно не был готов. Он попросил меня рассказать о фреймворке, который я использую на работе так, как-будто он устраивается к нам в компанию. Я почему-то решил рассказывать не о текущих наработках (наверно, посчитав их незначительными; да и команда маленькая сейчас), а о фреймворке, на котором мы в TimeZero делали игры. Кто знает, тот уже смеется над тщетностью сей затеи в данных условиях. В общем, получилось у меня весьма хреново.

Потом он попросил спроектировать таблицы(sic!) для Jira-подобной софтины. Вот чего я точно не ожидал, но все же стал в слух вспоминать сущности и соединять их через join'ы в таблицах (что скорее всего выглядело весьма жалко, ибо последний раз я делал что-то подобной ну ооочень давно). Посмотрев на мои никчемные потуги, Кадир решил дать мне что полегче — запроектируй игру в Кубик Рубика. С этим-то я справился сносно, учитывая все то давление.

Ошибка номер 8 — постарайтесь абстрагироваться от интервьювера, не отвлекайтесь на его личность, известность и пристальный взгляд. Так вы сможете сделать гораздо меньше ошибок и выставить себя сильно меньшим идиотом.

Ожидание

Ко мне зашел полурусскоговорящий член команды Алекс Сергиенко (как выяснилось, родители у него русские, а сам он впервые в россии, но говорить на Русском кое-как может) и сказал, что у меня больше интервью не будет. Что это значит было понятно и так, но неужели я был настолько плох? Мне казалось, что с первыми двумя получилось очень неплохо.

Мне вручили сумку с дурацкими подарками и проводили до выхода. Кстати, вот и открылся секрет откуда у меня этот Game Card на 10$ в CityVille (8

Через две недели прислали стандартное письмо, мол вы отличный кандидат, но пока у нас нет вакансий для вас.

Выводы

Я почти не расстроился, но сделал некоторые выводы.

Интересное настроение у кандидатов — «лучше там PHP'шником, чем тут Сишником». Как-будто ТАМ розовая мармеладная страна. Судя по всему, работать придется будь здоров. В тесных кьюбиклах на стремненьких стульчиках. Собаки бегают везде. А коллекцию банок от Red Bull не забыли еще?

При этом не очень понятно кого они искали конкретно. Такое ощущение, что им были нужны какие-то универсальные биороботы. Теоретическо-практические независимые от языка индивидуумы, которых можно бросить на любую задачу. Будь то backend на PHP, огромная распараллеленная база данных на C++ или игровой клиент на AS3. Не знаю как сейчас, но в мое время у нас в России такого образования не давали. Каждый учился сам на практике и (возможно) весьма преуспел в своей области.

Некоторых вопросов я не ожидал. Потом сидел думал какое-то время, например, над предложением рассказать об используемом в компании фреймворке.

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

Правильно, что читал разные теоретические книжки. Знания пригодились. Но, конечно, грустно, что Flash — это такая детская игрушка. Готов поспорить, что 90% флэшеров никогда не пользовались нестандартными структурами данных, да и непростой алгоритм из разряда классических на этих структурах написать не способны. Туда же и PHP'сты, да и Java Enterprise разработчики. Тут еще, конечно, вопрос «А зачем?».

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

Интересное из комментариев

  • Собеседование в большую компанию (вне зависимости от результатов) это бесплатная карьерная консультация. ooprizrakoo
  • Нашелся еще одиннесколько участник очных интервью: zloe_zlo golova invented jjlol
  • zloe_zlo посоветовал не относиться к собеседованию как к экзамену. Но, тем не менее, сеттинг конкретного собеседования был на экзамен очень похож. Сдача экзамена же тоже подразумевает комментирование своих решений и озвучивание мыслей. Единственное что, это да, более односторонний разговор.
  • YoungSkipper рассказал, что у него телефонное интервью было совсем не техническим, а на второй части ему задавали логические задачи. У меня логических задач не было, хотя все популярные я знаю.
  • Dehumanizer привел письмо из личной переписки с Mathias Connot.

    Mat Connot ✆ to me
    show details Apr 17
    Hi <мое реальное имя>,

    In my years as a technical recruiter for a couple different world class software organizations I can tell you that the single most important skill will be a great understanding of computer science fundamentals. Having a solid grasp of the fundamentals and maintaining it for yourself throughout your entire career will always serve you well. It’s not as much about language or tech, it’s about having the algorithms and knowing complexity etc.

    So many developers fall back on libraries and stop paying attention to the underlying math, complexity, etc. and that’s always a big mistake.

    At least that’s my .02 cents.

  • Комментарий by Mathias Connot о пресловутой картинке с Red Bull:
    — Great! Funny you ask, I answer that question pretty frequently. ;-) It's actually fairly easy to discuss. Glassdoor is not the best tool with which to evaluate a company, rather a better way would be to
    ask questions of current happy employees (like myself) rather than employees who joined and/or left the company when we were a VERY young start-up where work life balance was much more of an issue. It's
    true that work-life balance has been an issue for us. When we were just starting out and going from less than 10 employees and then adding staff and jobs and work at an unimaginable clip people were
    pushed much harder as we scaled from $0 revenue to 1 billion + in revenue. I'm not sure anyone has ever managed to do that in just 4 years before and in the early couple years before we were able to get
    enough people working on jobs and projects people were pushed pretty hard. It was a matter of just not having enough brilliant people to keep up with the growth. We've begun to address that over the
    last 12 months t
    hough and I'm happy to say that we're MUCH better at it today for a number of reasons. 1, hiring has increased to where we're much closer to work/worker balance. We've gone from 500 employees in early
    2010 to 2200 employees today. We have much more capacity and people are not having to cover nearly as much ground by themselves. We've also made a very conscious effort to listen to our employee
    feedback and take steps to build a much stronger culture of work-life balance.

    I believe that if you were to check Glass Door in a couple of years you'd see much different statistics. :-)

Update: спасибо всем, кто прислал сообщения об ошибках и опечатках.