Отказ от ответственности. Это мое личное мнение. Названия компаний опущены. Цель этой статьи — поразмышлять над текущим процессом собеседования в мире технологий на основе моего недавнего опыта.

Представляем: я!

Привет, я 'bigo', и последние 17 лет я разрабатываю программное обеспечение. Все началось с того, что я понял, что можно написать скрипты, изменяющие поведение mIRC 4.72 (самого популярного на тот момент чат-клиента для Windows), позволяющие автоматически кикать пользователей, заливающих канал, запускать викторины, обслуживать файлы и управлять почти всем, что будет действовать на основе ввода от других пользователей, подключенных к тем же каналам сети чата (звучит знакомо?). Мне было 13, и я тратил столько времени, сколько нужно, чтобы научиться всему этому. В итоге я создал довольно популярный скрипт и общался (конечно, виртуально) со многими другими программистами-любителями.

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

Я стал очень опытным PHP-разработчиком. Я знал язык вдоль и поперек, влюбился в открытый исходный код и был вовлечен в первые дни Joomla! (тогда она еще называлась Мамбо). Забавный факт: один из моих старых проектов все еще отображается в разделе Кто использует Joomla! на их главной странице (а это было 10 лет назад). Жаль, что проблемы были не такими уж серьезными, и я начал понимать, насколько сломан PHP в основном из-за моего контакта с языками со статической типизацией — в основном с C++ и Java.

Раньше я работал полный рабочий день разработчиком Java на фабрике программного обеспечения, настраивая продукты Oracle в соответствии с потребностями транснациональных корпораций. Все было очень хакерским и плохо написанным, поскольку качество не обязательно было основным направлением деятельности этой компании. Мы также брали с клиентов почасовую оплату, поэтому от нас ожидалось, что мы будем делать много, и руководство не хотело, чтобы мы тратили время на тесты или рефакторинг (приятно!). Именно тогда я начал ненавидеть Java и Oracle. И ничего "предприятие".

После выпуска я переехал на пляж и устроился инженером №1 в очень крутой стартап без реальных клиентов, у которого были деньги на создание рекомендательных систем. Впервые работаю над чем-то действительно сложным, трачу большую часть дня на расшифровку научных работ и превращение их в настоящие прототипы. (Забавный факт: недавно эта компания была продана за 20 миллионов долларов США, и я получил 0,00 доллара, потому что был слишком наивен, чтобы говорить о справедливости, и я делал все это, потому что хотел работать с машинным обучением. Деньги были (и остаются) просто побочный эффект моего хобби).

Я до сих пор помню их процесс собеседования: одно собеседование по скайпу с генеральным директором и очень техническое трехчасовое занятие с техническим директором, где мне нужно было пройти «сертификационные» тесты Java и реализовать быструю сортировку и другие классические алгоритмы на питоне. Я никогда не забуду, что в него также входил IQ-тест, сделанный во флэш-памяти. Я также помню, что очень плохо сдал тест по Java, но, видимо, хорошо справился с алгоритмами и тестом на IQ, и меня взяли на работу.

Именно там я познакомился с TDD, Agile и Python. Я не мог быть счастливее со своей жизнью. Мне казалось, что я, наконец, становлюсь лучшим разработчиком.

Год спустя [и 6 лет спустя] мы собирались заключить нашу первую крупную сделку, и я наткнулся на твит одного из моих agile/scrum-героев, в котором упоминалось, что он создает кросс-функциональную команду в Y ( названия компаний будут опущены, поскольку цель состоит в том, чтобы не показывать пальцем) в Сан-Паулу и нуждался в «разработчиках-ниндзя» (в настоящее время люди предпочитают называть их «инженерами полного стека»), которые могли бы работать с Python, PHP и JS.

Я уволился до выезда на место (пожалуйста, не делайте этого, дети) и полетел в Сан-Паулу с чувством, что получу эту работу. К счастью, я сделал. У меня было много вкладов с открытым исходным кодом, и я работал с машинным обучением, оптимизируя прогнозы KNN + SVD, чтобы они выполнялись за 4 часа вместо 2 недель, помещая больше данных в 16 ГБ ОЗУ. Я чувствовал, что мои собеседования на месте были больше для того, чтобы проверить, могу ли я общаться на английском языке и не был ли я придурком для работы. Позже в тот же день, перед отлетом домой, у меня было предложение. И это было все.

В тот момент я был вне рынка. С этого момента моя роль на собеседованиях будет заключаться в интервьюере. Я также перестал писать свои любимые проекты, и мои редкие вклады в проекты с открытым исходным кодом были связаны с теми, что находились под эгидой Y; частично по юридическим причинам и частично потому, что я чувствовал, что это пустая трата энергии, которую можно было бы использовать для улучшения продукта и технологий моей компании. Большая ошибка. Домашние проекты. Никогда не сдавайтесь, дети. Шутки в сторону.

Наш процесс собеседования

Что ж, я всегда хвастался, насколько классным был наш процесс собеседования и как он работал. Я помог нанять некоторых из самых замечательных разработчиков, которых только можно было попросить: отличные навыки решения проблем и потрясающие командные игроки. Наш процесс состоял из очень строгого анализа резюме (без кода/github? вам лучше иметь докторскую степень), за которым последовал часовой технический разговор по телефону (без программирования, только чтобы убедиться, что люди знают, как работает HTTP, как работают индексы базы данных и что происходит, когда вы вводите URL-адрес в своем браузере, что должен знать каждый, кто разрабатывает программное обеспечение). Следующие шаги будут зависеть от роли и уровня: иногда кандидату давали домашнее задание, а иногда еще одно часовое собеседование по телефону, посвященное только программированию (классические простые задачи, чтобы убедиться, что кандидат не солгал в своем резюме, поскольку мы уже проверил их код онлайн). Мы привозили выживших на место, и они в течение 2-3 часов кодировали, чтобы создать готовое к работе программное обеспечение с некоторыми простыми, но сложными спецификациями; один, в комнате с интернетом и бесплатными закусками. Мы проверяли каждые 40 минут, есть ли у него/нее вопросы, хочет ли он пописать или застрял при компиляции nodejs из исходников. Затем у них будет группа из 3 или 4 инженеров в нашей команде, чтобы представить свое решение и ответить на вопросы. Мы ожидаем, что у старших разработчиков будет гораздо более элегантное решение, чем у новых выпускников колледжей, и мы не будем допрашивать новых выпускников колледжей, ожидающих увидеть приемочные тесты, поскольку есть вероятность, что они видели только теорию.

Если кандидат не может конкретизировать свои ответы, если он кажется придурком парню, играющему роль нуба, если он не написал качественный код за 3 часа, мы отправляем его домой. Если нет, у нас есть две или три 40-минутных встречи с ключевыми инженерами из команды и, наконец, 10-15-минутная встреча со всеми участниками, чтобы решить, делаем ли мы предложение или нет.

Тип проблемы варьировался в зависимости от роли. Это может быть файловая система в памяти, поддерживающая определенные команды, статический файловый веб-сервер, динамическая отзывчивая анимация CSS, что-то с бесконечной прокруткой и т. д.

‹‹Кат-сцена текущих дней››

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

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

Поскольку эта статья не о компании Y, я просто скажу, что я выгорел, пережил несколько панических атак и пошел к врачу, который прописал мне отпуск. Я сразу принял их (а еще оставалось много дней). 10 дней пребывания, чтобы вернуть мою жизнь в нужное русло, купить новые очки, отвезти машину в магазин и выполнить все поручения, которые я не мог выполнить. Я также возобновил изучение Python через несколько лет, просто чтобы проверить, что происходит в сообществе. Я снова играл с домашними проектами!

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

После того, как вы отметите свой пятилетний юбилей в Y, вам дадут двухмесячный неоплачиваемый отпуск, где вы сможете сохранить свою медицинскую страховку и все другие привилегии, кроме денег. Поэтому я бы взял этот неоплачиваемый отпуск и отправился бы искать работу. Я подумал, что будет более этично поступать таким образом, чем рассылать электронные письма со случайными предлогами для телефонных интервью. Также было бы неплохо вернуться в Сан-Франциско (а переезд занимает много времени!).

Когда все было спланировано, я поговорил со своим менеджером (одним из друзей, которых я бы пригласил на свой день рождения), который понял и поддержал меня. Он упомянул, как далеко компания может зайти, чтобы удержать меня, спросил, может ли он что-нибудь сделать, и сказал, что ничего не изменится, если я решу вернуться к работе в Y после творческого отпуска. Его единственная просьба заключалась в том, чтобы я остался до запуска первой версии. Нет проблем. Мы установили дату в течение пары месяцев

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

Поиск работы

Это Сан-Франциско; есть миллион стартапов, которые делают удивительные вещи и отчаянно ищут инженеров. Это должен быть кусок пирога, верно?

Я пошел в Glassdoor и подал заявку на десяток вакансий Senior Software Engineering. Я также ответил последним 6 или 7 рекрутерам, которые отправили мне письмо через LinkedIn и создали профиль на Hired.com. Я также работал над своим резюме, так как оно было довольно устаревшим, но я никогда не был хорош с резюме для массажа эго, поэтому я попросил друга просмотреть его. Я также начал играть с AngularJS и Tornado для развлечения, так как мне приходилось ждать, пока я не получу ответы от своих приложений.

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

Мой первый телефонный экран (который в большинстве случаев был телефонным звонком и экраном кодовой панели, где они могут видеть, как вы программируете) был с этим стартапом, о котором я никогда не слышал. Интервьюер просмотрел мой прошлый опыт, сделал кучу заметок и попросил меня рекурсивно и интерактивно сгладить массив. Без проблем. Проблема решена, поговорим. Пока.

На следующий день я получил экран телефона с U. Довольно стандартный экран телефона, где меня попросили реализовать алгоритм вращения строки. Проблема решена, поговорим. Пока.

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

Первый на месте

У меня есть приглашение на встречу в U на той же неделе. Я был очень взволнован: мое первое выездное собеседование за 6 лет.

Приехав в их штаб, я увидел группу инженеров, которые толкались локтями и сидели на очень дорогих стульях. Было очень громко, и большинство из них носят наушники. Это место было воплощением хаоса, и они не могли найти комнату для моего интервью, а когда, наконец, нашли, рекрутер стоял у двери и перенаправлял людей, забронировавших эту комнату, в другое место. Мой первый интервьюер был великолепен! Мы обсуждали, как решить реальные проблемы, с которыми они сталкивались в прошлом, как оптимизировать это и как подходить к проблеме, специфичной для предметной области… В конце концов, это был очень приятный часовой разговор. Затем он отдает меня второй паре интервьюеров, и именно тогда я начала чувствовать, что меня изнасиловали.

Они попросили меня реализовать алгоритм сбалансированного дерева на доске. Через час. В последний раз мне приходилось балансировать дерево 15 лет назад в колледже. Помню, у меня была как минимум неделя на его реализацию. Остаток часа я боролся, пытаясь максимально приблизиться к сбалансированному дереву. Они вышли из комнаты с улыбкой на лицах, и меня представили другому дуэту, они будут освещать кодинг вживую. Я мог выбирать между системой сокращения URL-адресов или чем-то еще с дизайном интерфейса. Конечно, я выбрал сокращение URL-адресов. Мне сказали, что я не могу пользоваться Интернетом, и я много боролся, пытаясь запустить свои тесты. Всем было ясно, что мой Python не так свеж, как должен. Как только я запустил все, я смог выполнить свою задачу в разумные сроки (с не очень хорошим архитектурным дизайном, хотя, поскольку я потратил 20 минут, пытаясь угадать, как запустить все тесты, 10-секундный поиск спас бы меня из этого).

Мой третий интервьюер не читал мое резюме и не очень интересовался тем, что я должен был сказать. Он хотел сразу перейти к проблеме. Я не хочу, чтобы вы решили эту проблему, которая была решена в начале шестидесятых… в основном он хотел, чтобы я реализовал ВЫРЕЗАТЬ, КОПИРОВАТЬ и ВСТАВИТЬ в текстовом редакторе на основе ленты, где я мог только перемещать и сохранять положение головы. и мог печатать из любой произвольной точки определенное количество символов, но не мог изменять содержимое ленты. Он провел большую часть времени, пытаясь заставить меня понять, что я должен делать и что я могу/не могу использовать. И я до сих пор не знаю, до сих пор.

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

В тот день я узнал несколько вещей: (а) Если бы я хотел получить новую работу, я должен был бы лучше решать головоломки и реализовывать структуры данных. (b) Ожидайте практически нулевого высокого уровня архитектуры, объектно-ориентированного программирования, протоколов, безопасности, базы данных, unix, тестов и т. д. вопросов. (c) Весь мой опыт во время собеседования бесполезен, даже для руководящей должности* (не совсем, как вы увидите).

Я понял, что все будет не так просто, и я был недостаточно готов к тому, что они ожидали от меня. Пришло время поработать над своими слабостями и разработать новую стратегию. У меня было чуть больше полутора месяцев, чтобы найти новую работу, и я все еще хотел взять свою девушку в Бразилию до окончания творческого отпуска.

Новый план

Несколько дней спустя у меня был экран телефона с Z, одним из самых раскрученных стартапов в Сан-Франциско. После 5-минутного разговора о компании и еще 5 обо мне мой интервьюер попросил меня реализовать игру, представляющую собой граф, в котором каждый игрок в свой ход выбирает непосещенный узел, соединенный с предыдущим узлом, которым он владеет (если только это первый ход, конечно). Я должен написать игру, лучшую стратегию для игрока А и игрока Б. За один час. По телефону. Я очень хорошо объяснял свой псевдокод, но к тому времени, когда мое интервью закончилось, я едва мог написать код для построения доски и управления ходом. Я потерпел неудачу по-крупному.

Мне нужен был новый план.

Я бросил всю свою работу с любимыми проектами, так как работающее программное обеспечение не имело бы значения, если бы я не мог решать головоломки и вам-никогда-не-придется-решать-эту-в-реальной-жизни-проблему, купил печально известную Книга CTCI и решила, что буду танцевать под песню.

Я также решил организовать свой календарь так, чтобы у меня было несколько компаний, о которых я знал, что не приму предложений [если они поступят] и буду использовать их в качестве тренинга для крутых, которых я оставлю в конец. Я бы также сэкономил немного времени, чтобы пройти собеседование в крупных компаниях «G», «F» и «S». Не потому, что они круче или проще, но если бы я дошел до этого момента, я бы знал, что у меня нет того, что ищут стартапы, и я должен продолжать работать в компаниях, которые будут ощущаться как другой тип «Y».

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

Я получил свое первое предложение от стартапа C с 50 сотрудниками. Они попросили меня, например, написать решатель судоку и вычислить все перестановки строки. У меня это было свежо в памяти из-за книг и сайтов с головоломками, которые я изучал. Я не принял предложение, но это был сигнал, что я наконец-то стал наемным парнем. Пришло время перейти к компаниям, в которых я действительно хотел работать.

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

Первые три интервью представляли собой 20-минутную беседу + 20-минутную головоломку. Я сильно облажался, решив не ту проблему на первом собеседовании (и мой интервьюер молчал 95% времени, вероятно, счастливый, потому что я собирался потерпеть неудачу), но, очевидно, я справился со всем остальным. Их директор по инжинирингу был первым человеком среди всех людей, с которыми я говорил до сих пор, который, казалось, законно интересовался моей историей работы. Получилось хорошо, но не очень…

Из-за провала первого собеседования меня пригласили на второй день на выезд, чтобы поговорить с другим инженером, чтобы он мог выработать позицию относительно предложения или отсутствия предложения. Я жонглировал в Yerba Buena, когда мне позвонили и спросили, смогу ли я сделать это в тот же день. Могу сказать, что ни своей одеждой, ни духами в тот день я бы их не впечатлил, но я все равно пошел, просто хотел закончить и двигаться дальше. Это было хорошее интервью, простая головоломка (движущаяся медиана, где он дал мне причудливую функцию вероятности), а затем просто прямой разговор о решении реальных проблем, и я получил предложение на следующий день, после разговора с генеральным директором и техническим директором (да , даже после 250+ человек они все еще общаются с новыми сотрудниками, что я считаю довольно удивительным). Это было на 30 000 меньше, чем их технический источник, упомянутый на наемном.com, но то же самое произошло с моим предыдущим предложением: они объявят огромную сумму денег только для того, чтобы вы ответили. Реальная жизнь не такая захватывающая. Несмотря на это, я решил согласиться, потому что верю в их философию, ценности и потенциал. Я также не думаю, что мне следует использовать шляпу наемника, так как я все равно не меняю работу из-за денег. Надеюсь, это будут длительные отношения, в которых я буду учиться и расти вместе с компанией. Я официально еще не работаю на них, когда пишу это.

И вот как я получил новую работу в 2016 году.

Обучение

Вот чему я многому научился за весь процесс:

  • Я узнал, что стал чрезмерно специализироваться на проприетарных технологиях, которые бесполезны вне моей нынешней компании; что возможностей много, но компании предпочитают отказываться от хороших кандидатов, чем нанимать плохих (я не утверждаю, что я не являюсь ни тем, ни другим); что легче перейти от стартапа к энтерпрайзу, чем наоборот.
  • Оглядываясь назад на процесс, я не чувствую, что сильно улучшился в техническом плане. Все, что я сделал, это изучил книгу и несколько веб-сайтов, которые учат вас, чего ожидать от интервью и быстрых путей.
  • Удивительно много интервьюеров хотели, чтобы я потерпел неудачу. Что не имеет никакого смысла, кроме удовлетворения эго.
  • Я очень горжусь нашим процессом собеседования в Y. Я чувствую, что процесс, который выбрала моя команда, лучше, чем подавляющее большинство, потому что он кажется реальным и дает кандидатам различные повседневные навыки. Тот факт, что нас не волнует, используют ли они Интернет для решения проблемы, является огромной победой, ИМХО, потому что это то, что они будут иметь в своем распоряжении изо дня в день, и все, что меня волнует, это кто-то, кто понимает, ПОЧЕМУ он решил использовать этот или тот.
  • Если бы я был гениальным придурком, социопатом или заядлым разработчиком, не имеющим представления об объектно-ориентированном дизайне или лучших практиках, я бы прошел 100% собеседований.
  • Я также узнал, что подача заявок на веб-сайтах компаний — наименее эффективный способ получить работу. Если вы хотите пройти собеседование в любом месте, это должно быть через сетевую рекомендацию (быть другом кого-то там) или через рекрутеров (я слышал, что эти мероприятия в кампусе также работают ... но я динозавр и больше не посещаю их) :П).

Хорошо! Вы сделали до конца. Теперь я хочу услышать ваши мысли, потому что жизнь не улица с односторонним движением.

-биго