Как нанять хорошего PHP-разработчика
А уж если вы проводите собеседование без разработчика-эксперта в нужной дисциплине, или если у вас маленький стартап, и вы пытаетесь нанять одного из первых подходящих сотрудников, всё становится ещё сложнее. Подобрать достойного и опытного специалиста без широких знаний в индустрии — задача нетривиальная.
Мы в Rubrain.com занимаемся поиском программистов уже пять лет занимаемся поиском программистов, и отобрали в базу более шести тысяч (!) сотрудников уровня middle+. Большинство из них на практике оказались отличными профессионалами. Хотя с некоторыми, конечно, первое впечатление было ошибочным. Но здесь как в отношениях: иногда нужно пожить вместе, чтобы понять, чем именно тебя могут бесить. Даже самый крутой профессионал может попасть в чёрную полосу и стать лентяем.
Но для начала, если вы не хотите обучать разработчика с нуля, нужно смотреть на кандидатов с хотя бы 2-3 годами опыта (лучше, конечно, 5). Чтобы они могли сами создавать новый продукт, брать на себя ответственность, принимать архитектурные решения. В идеале сотрудник, которого вы вызываете на первое собеседование, уже поработал в крупных фирмах, поучаствовал в больших проектах, получил нужно менторство. Если вы нанимаете фрилансера — у него должно быть несколько сайтов в портфолио (достойных или нет — это мы сейчас проверим). Кстати, фрилансеров — горячо рекомендуем, особенно если вы берёте сотрудника на удаленку. Если человек всю жизнь работал на себя, определенное чувство ответственности у него точно есть, и от внезапно нахлынувшего чувства свободы он в запой не уйдет.
Итак, у HR есть резюме программиста. Проекты, над которыми он работал, или кусочки кода. Что теперь?
Оценить качество его работы по коду вы можете, даже не имея навыков программирования. Как это сделать? Существует, как минимум, два способа определить огрехи:
1. С помощью специальных инструментов. Можно прогнать веб-приложения или сайты из портфолио потенциального сотрудника через особые онлайн-сервисы, чтобы получить общую картину его компетенции. Эти сервисы (или утилиты) обнаруживают ошибки, «мусорный» код, излишне сложные комбинации и другие признаки не очень качественного труда разработчика. Они найдут что-то в любом случае — поскольку идеального кода не существует в природе. Другой вопрос, сколько огрехов так удастся обнаружить, и насколько значимыми они будут.
Для PHP хорошо подходит Mess Detector — он как раз находит чересчур сложные методы, потенциальные баги, неиспользованные расширения, не слишком чистый или неоптимальный код и так далее. Также можно применять CodeSniffer, находящий ошибки в синтаксисе или стандартах кодинга. Он подходит не только для PHP, но и для CSS и JavaScript.
Также, отдельно, существуют подобные инструменты для CSS и HTML. Настройка PHP CodeSniffer 2. Пробежавшись по коду глазами. Даже HR без опыта в разработке вполне может это сделать. Нужно немного подготовиться и изучить стили программирования, но это не так сложно, как кажется. Просто понять, будет ли следующим людям удобно работать с кодом этого разработчика. Правильно ли он расставляет фигурные скобки, обрамляет ли он пробелами бинарных операторов, добавляет ли он комментарии, описывающие информацию о его коде. Вкратце о том, как всё должно выглядеть, можно почитать тут, а намного подробнее — тут. Если код человека, написанный для коммерческого проекта, не содержит таких элементарных вещей, говорить с ним особенно не о чем: поддерживать проекты, созданные этим разработчиком, станет слишком сложно. Хороший пример того, как определить уровень профессионализма разработчика, приводит компания Edison. Даже по небольшому кусочку кода можно отличить junior от senior и от миддла. О том, что вы нашли хорошего кандидата, также может говорить: Задачки разного уровня сложности, позволяющие быстро отделить зёрна от плевел. Или, по крайней мере, понять, насколько «плывёт» кандидат. Часть из них подходит даже для интервью специалистов уровня middle+. А познаний в языке рекрутеру иметь не обязательно. Работа с массивами — огромная часть PHP. Поэтому программист для стартапа должен понимать, как они представлены изнутри (в виде хэш-таблиц, как и большинство других структур данных). PHP написан на языке C, где массивы имеют только целочисленные индексы. Чтобы транслировать индексы массивов из PHP в целочисленные индексы массивов C используется хэш-функция. Она преобразует индексы (и строковые, и целочисленные) в целые числа. Значения располагаются в итоговой хеш-таблице. Наиболее часто встречаются такие модели как аспектно-ориентированная, функциональная и процeдурная. Типовые решения определенной проблемы, многократно повторяемое в процессе проектирования архитектуры продукта. Показывают взаимодействия между классами, позволяют сделать систему гибкой и легко изменяемой. Магические методы — методы в PHP, начинающиеся с двойного подчеркивания «__». Всего их тринадцать, в том числе __construct, __destruct, __isset, __set, __unset, __clone, __sleep, __wakeup, __call, __callStatic, __get, __toString, __set_state. Человек, вступающий в вашу команду веб-разработчиков, должен понимать, что в массиве суперглобальной переменной $GLOBALS хранится информация, доступная в глобальной области видимости. В том числе и другие суперглобальные массивы. К примеру, доступ к $_ENV можно путём: $GLOBALS[‘_ENV’]; В плане других суперглобальных переменных кандидат может рассказать о: Есть несколько способов быстро проверить, не пустой ли массив. В том числе, среди наиболее популярных: Можно также устроить проверку через if/else, есть и другие варианты. Но не все PHP-программисты смогут сразу ответить, как всё это работает. empty() — работает намного быстрее, чем count(), в обоих сценариях, как с пустым, так и с заполненным списком. Причина — когда мы считываем длину строки, используя count (или sizeof), программа должна пройти через все символы, чтобы понять, сколько знаков там есть. Она начинает в начале, и идёт до конца. На это тратится время (пусть даже небольшое). В empty же она останавливается после первого знака, когда понимает, что массив не пустой. Проводится простая проверка: является ли начало строки таким же, как и конец строки. Всё остальное работает так же, как и count. А isset — вообще подходит только для индексных массивов. — function f(a,b) { return a+b } и — var f = function(a,b) { return a+b } Разница существует — она состоит в видимости функции. Первый пример, без var, виден везде в текущей области видимости. Даже до самого определения функции. Второй пример, с var, присваивает функцию переменной, поэтому такая функция видна только после её определения. Если с квалификацией, с качеством кода и с ответами всё неплохо — можно проводить тестовое задание! Опять же, сделать это может даже сам руководитель небольшой компании или HR. Примеров достаточно в интернете. Желательно, чтобы тестовое (для специалиста любого уровня, даже сеньора) могло быть выполнено за довольно короткий промежуток времени, от 15 минут до четырех часов. Так количество кандидатов, прошедших собеседование до конца, можно будет повысить. И затем выбирать уже по личностным качествам и интересу к работе. Кстати, если вы хотите пропустить все эти этапы, и сразу получить гарантированно качественных специалистов — просто воспользуйтесь услугами Rubrain.com. За годы работы мы уже отобрали лучших разработчиков для вас!

Вопросы, которые стоит задать
