Кодовый набор: как найти толкового программиста



© Kevin van Aelst

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

Алексей Поспехов, основатель ICONIC MOBILE

Найти хорошего программиста — задача другого порядка, нежели поиск UI/UX-дизайнеров или проектных менеджеров. Если при найме сотрудников в области продаж или управления их качества и опыт понятны в процессе первичного общения, то без жесткой проверки понять уровень программистов просто невозможно. За поиск отвечает моя правая рука в бизнесе — наш директор по развитию Дарья Воробьева, которая до этого управляла всеми нашими проектами. Мы размещаем информацию о вакансиях на крупных порталах типа HeadHunter.ru и на всех отраслевых сайтах, где покупаем доступ к базе резюме.

Но на глобальных ресурсах вроде HeadHunter.ru на поиск нужных специалистов и фильтрацию резюме уходит уйма времени. Выручают социальные сети — в основном Facebook, где друзья друзей всегда находят нужных людей. Много объявлений мы публикуем в тематических группах — это работает. И без этого в неделю мы получаем около 10–20 резюме с предложениями, но в большинстве случаев это либо люди без опыта, либо программисты, сделавшие одно приложение и возомнившие себя гуру iOS-разработки.

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

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

Алексей Симоненко, сооснователь HTML Academy По моему опыту, эффективнее всего опубликовать вакансию на сайте по поиску работы и подкрепить ее постами в своих пабликах — в равной степени в Facebook, Vk.com и Twitter. Мои личные публикации, которые идут через каналы компании и личные контакты, дают хороший эффект.

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

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

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

Ярослав Маркин, основатель и технический директор Evil Martians Вопросы на собеседовании, конечно, больше всего зависят от того, чего ждут от кандидата на указанной позиции. Я сторонник подхода, при котором собеседование делают достаточно легким (базовые вопросы на проверку общего уровня кандидата), а тестовое задание — сложным. В конце концов, нельзя нанять разработчика без проверки качества кода, который он выдает.

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

Что касается портфолио: обязательно нужно обращать внимание на выполненные проекты и работы. Часто встречаются кандидаты с огромным количеством языков и платформ, перечисленных в резюме, но с небольшим количеством (и качеством) выполненных проектов. Для интернет-бизнеса очень важно (а для стартапа — жизненно необходимо!) понимать приоритеты разработчика. Нужно обращать внимание на людей, которым принципиально важно поставлять законченные проекты, которые могут работать на бизнес-показатели и гордиться своими результатами; в то же время есть большое количество разработчиков, которых интересуют лишь используемые языки и инструменты (побольше и разных), а не отдача от собственной работы. Часто именно эти кандидаты меняют работу раз в полгода, перескакивая из стартапа в стартап. И, что интересно, часто именно у таких кандидатов с большим и внушительным по технике портфолио оказывается довольно поверхностным знание перечисленных технологий.

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

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

«Интересно, что у многих известных программистов, в том числе, например, соавторов ядра Linux или некоторых авторов популярных языков программирования, профильного образования попросту нет»

Что действительно важно, так это активность в open source, особенно для таких специализаций, как веб-программирование. Точно так же как научный сотрудник составляет свое резюме из публикаций в достойных изданиях, веб-программисту помогает участие в чужих проектах с открытым исходным кодом (часто это языки и фреймворки, которыми пользуются тысячи людей) или разработка собственных. С самой первой вакансии своей компании я просил кандидатов прикладывать к рассказу о себе ссылку на opensource-профиль, а в последнее время предложение присылать ссылку на свои работы на GitHub встречается уже практически во всех вакансиях веб-программиста на современном языке или фреймворке.

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

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

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

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

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

Наша компания работает полностью удаленно уже в течение почти шести лет; это около тридцати сотрудников, разбросанных от Будапешта до Бали. Мы — однозначные сторонники и пропагандисты такого подхода к работе. Подробнее о нем можно почитать в популярной книге «Rework. Бизнес без предрассудков» Джейсона Фрайда и Дэвида Хейнмейера Ханссона. Помимо очевидных преимуществ, это дает возможность нанимать действительно лучших сотрудников без привязки к локации. Удаленная работа позволяет мгновенно обнаружить проблемы в планировании и коммуникациях, быстро принять решение о том, справляется ли человек с работой. Действительно, для большинства людей полностью самостоятельная работа может быть сложной. Однако если нанять такого человека в офис, это только скроет его проблемы с самоорганизацией. Так, если работать со специалистом удаленно, постановщика задачи не интересует, сколько часов в день он работает и проводит ли время в социальных сетях — главное, чтобы задача была сделана в срок и качественно. В случае же работы в офисе эти проблемы скрываются — человек сидит в офисе в рабочее время, работает на компьютере, как понять, есть ли проблема?

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

Однако тестовое задание дается не только для проверки уровня кандидата. Гораздо важнее проверить его ответственность и коммуникационные способности. Мы пытаемся создать полную иллюзию рабочей обстановки: есть задача, задачу требуется оценить в часах и сделать к определенному сроку. Разумеется, при этом она должна быть выполнена на должном уровне. Ряд кандидатов отсеивается только потому, что не задает нужных вопросов и делает задачу неверно или неполно; часто кандидаты не предупреждают, что не успевают сделать все к сроку, часто приходится слышать отговорки о том, почему задача не была сделана. Все это позволяет достоверно судить о том, какие проблемы могли бы быть при работе с кандидатом в реальных условиях.

В качестве тестового задания мы, как правило, даем немного обобщенную реальную задачу из проекта, которая стоит в плане; обобщенную настолько, что кандидату предлагается оформить ее как opensource-проект для повторного использования в других продуктах. Это позволяет проверить знание организации кода и архитектуры: часто разработчики, уверенно прошедшие несложное тестовое задание, начинают «плыть» в проекте, как только он становится сложнее по архитектуре.

Преимуществ у такого подхода масса: в случае, если задача сделана качественно, код используется на настоящем проекте. Кандидат же видит, что ему дали не придуманную задачу, а просят решить реальную проблему — даже если ему не сделают предложение, этот код он сможет показать будущему потенциальному работодателю. Наконец, таким образом можно пополнить свое opensource-портфолио — доходит даже до того, что одному из наших разработчиков сразу после выполнения тестового задания дали бесплатную лицензию на популярную IDE (среду разработки) за вклад в open source.

Дмитрий Колобов, технический директор Habrahabr.ru Для меня образование кандидата не столь существенно. Гораздо важнее его практические знания: с какими технологиями работал, в каких проектах участвовал, чем именно занимался. Опыт работы в высоконагруженных проектах, как правило, является плюсом. Последних четырех программистов мы нашли, опубликовав вакансии на своих же ресурсах, — ранее Hantim.ru, а теперь Brainstorage.me. Первый этап — отсеивание на основе письма и резюме. Обычно сразу видно, подходит нам человек по скиллам или нет. Далее мы списываемся и приглашаем на собеседование в офис или по Skype, если кандидат находится в другом городе. Тестового задания у нас нет. Собеседования проходят в формате беседы — кандидаты рассказывают о себе и своем опыте, мы рассказываем о себе, о том чем занимаемся и о работе которую предстоит делать.

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

Андрей Татаринов, технический директор Zvooq Дипломы вузов со сложными вступительными экзаменами и программой (МГУ, МГТУ, МФТИ, МИФИ, СПбГУ) — признак хороших умственных способностей кандидатов. Так же как и работа в компаниях с жестким фейсконтролем на входе: Yandex, Mail, Badoo, Undev. Портфолио, к сожалению, часто бывает misleading. Потому что непонятно, сколько времени кандидат потратил на конкретный объект в портфолио и каков объем именно его вклада в этот объект. Поэтому в последнее время я придаю больше значения собеседованию и поведению и ответам кандидата во время общения. На собеседовании я использую несколько видов вопросов:

Простые, конкретные вопросы, показывающие, умеет ли кандидат программировать вообще (например, FizzBuzz).

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

— сеть, DNS, TCP,

— nginx, кэширование, пулы соединений, сервера приложений,

— фреймворки, роутинг запросов в фреймворке,

— базы данных, соединения в БД, пул соединений, передачу данных и т.д.,

— задачи с изменяющимися параметрами.

«Давай напишем…» — например:

— веб-сервис, в котором можно рисовать кружочки,

— а теперь кружочки и квадратики,

— …и звездочки,

— а теперь у нас много пользователей,

— очень много, сервер не справляется,

и т.д.

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

Кроме найма в команду, почти всегда есть возможность воспользоваться услугами аутсорс/аутстафф подрядчиков. Как правило, система, которую развивает компания, может быть разбита на две части: собственно платформу и какие-то спецпроекты на ее основе. Для развития платформы, как правило, стоит брать специалистов в штат. Это — базовая экспертиза компании, которую нужно ценить. Спрос на ресурсы в этой зоне ответственности обычно хорошо прогнозируется и довольно стабилен. Базовую команду не стоит бесконтрольно расширять. Для проектной работы можно использовать аутсорс. Это позволяет справляться с пиковыми нагрузками по разработке (в этом месяце нужно 10 спецпроектов, в следующем — ни одного) и не отвлекать базовую разработку.

При этом город аутсорса не имеет значения. Лучше всего работать с аутсорс-компаниейи просить собеседовать кандидатов, которых они предлагают. У меня был опыт работы с компаниями, где есть несколько центров разработки: Москва, Питер, Киев, Минск, Воронеж. Но при найме удаленной разработки нужно помнить, что очень важен контроль: частые регулярные синхронизации по статусу, формальная постановка задач, перепроверка результатов работы внутренней командой перед сдачей.

Илья Салтанов, директор по развитию Sports.ru Есть две базовые стратегии формирования команды разработчиков — найм в штат и аутсорсинг.

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

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

Рынок внешней разработки серьезно заматерел за последние несколько лет, теперь практически под любую задачу можно найти отличную команду в России, Беларуси или Украине, и ребята будут работать как надо. Начать поиски можно с России, не обязательно сразу идти за границу. В Минске можно найти хорошую команду сильно дешевле, чем в Москве. В Киеве тоже, но не дешевле, чем в Екатеринбурге или Челябинске. Sports.ru в недалеком 2007-ом году запускался на аутсорсинге Олега Бунина, и до сих пор часть программным продуктов у нас развивается штатными программистами, а часть — сторонними командами.

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

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

Я бы рекомендовал стартапам избегать услуг кадровых агентств: во-первых, дорого, долго, ненадежно, во-вторых, нужно учиться продавать свою идею и будущим сотрудникам, а не только инвесторам и клиентам. Помимо нетворкинга — обязательно нужно шуметь на рынке, тусовках, конференциях, профильных сайтах, в СМИ. Это поможет будущим сотрудникам принимать решение в пользу вашей компании.

Когда вы изучаете отклики на вакансию, точно не стоит пренебрегать резюме: его содержание очень многое может рассказать о человеке еще до встречи. У всех есть свои маркеры невменяемости в резюме, по которым можно отсеять кандидата еще до собеседования. Я, например, стараюсь избегать встреч с людьми, которые пишут о себе как о «веб-мастере»(«делаю PHP, MySQL, Photoshop, Apache, 3dmax, Java и Objective-C») или после десяти лет опыта работы все еще пишут о своих школьных достижениях: «второе место на городской олимпиаде по химии».

На собеседовании стоит начать с обсуждения опыта работы кандидата (в каких командах работал, что делал сам) и перейти к навыкам (что умеет, что знает, задачки там — кто что любит). Нужно понимать, что уровень вопросов интервьюера определяет уровень компании в глазах кандидата: вряд ли кандидат согласится на работу, если все собеседование его гоняли по алгоритмам и численным методам; и наоборот — если интервьюеры не зададут ни одного технического вопроса на встрече.

Михаил Табунов, технический директор Coub

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

На собеседовании мы даем всем стандартную задачку на программирование. Она неприлично простая, даже наш аккаунт из сейлз-отдела решил ее. Но ее решают примерно 70 процентов претендентов. Конечно, надо посмотреть на код, посмотреть, что кандидат делал раньше, где он раньше работал. Хорошо, если можно поговорить с бывшими работодателями или коллегами. Если часто менял работу, то это повод задуматься. Разумеется, человек должен вписываться в команду.

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

Источник: theoryandpractice.ru