Обложка: Задачи с IT-собеседований: модуль для платформы интернет-магазинов

Задачи с IT-собеседований: модуль для платформы интернет-магазинов

Олег Бидзан
Олег Бидзан

Технический директор Simtech Development

Небольшая предыстория

Большая часть задач компании Simtech Development связаны с платформой для интернет-магазинов и маркетплейсов CS-Cart. Платформа известна в среде разработчиков, но количество соискателей, которые уже пробовали работать с платформой, не такое большое. Поэтому на собеседованиях, помимо всего прочего, мы проверяем кандидатов на то, как быстро они смогут погрузиться в незнакомый им фреймворк и решить задачу. Для этого мы используем два подхода:

  • стандартный — выдаём тестовое задание для самостоятельного решения;
  • парное программирование — решение задачи во время собеседования.

Стандартный

Этот подход используется не только как инструмент оценки знаний кандидата, а и как инструмент знакомства разработчика с платформой CS-Cart; чтобы дать кандидату понимание с чем нужно будет работать, возможность оценить свои силы и опыт перед принятием решения о трудоустройстве. Есть несколько вариантов, которые, прежде всего, делятся по направлениям (frontend/backend), а затем по предполагаемому уровню кандидата (junior/middle/senior). В каждом задании содержится несколько секций:

  • описание;
  • подготовка;
  • непосредственно задача;
  • требования;
  • техническое задание;
  • усложнения.

Описание

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

Подготовка

Так как платформа CS-Cart довольно сложная, особенно в плане бизнес-функциональности, мы обязательно предоставляем кандидатам всю необходимую документацию. В некоторых случаях даём несколько дней на ознакомление и только потом высылаем само задание (это позволяет более точно замерить время, которое кандидат потратил непосредственно на выполнение задания). Секция включает ссылки: на документацию по API, на описание функциональности, на инструкции по установке и видеоуроки.

Задача

Краткая формулировка задания. Например: разработать модуль Staff для CS-Cart в течение 5 дней.

Требования

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

Техническое задание

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

Усложнения

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

Пример задания — Модуль STAFF

Модуль подразумевает создание интерфейса в CS-Cart для управления персоналом через панель администратора, а также вывод страницы со списком персонала в витрине магазина. Пошагово:

  1. В панели администратора добавить ссылку Staff в секции Website верхнего меню.
  2. Кликнув по этой ссылке, должна открыться новая страница Staff в админ части.
  3. На этой странице админ сможет добавлять, редактировать Staff members.
  4. Записи должны показываться в виде таблицы со следующими столбцами (по аналогии с меню Website -> Pages):
    1. POS;
    2. Name (имя будет сформировано из значений First name и Last name);
    3. Status.
  5. Оформление всех новых страниц должно быть выполнено в едином стиле со всеми остальными страницами админ части.
  6. Кликнув по ссылке edit, расположенной для определенной записи Staff member, должна открыться детальная страница с описанием свойств записи Staff member.
  7. На этой станице админ сможет редактировать следующие поля:
    1. «First name» текстовое поле ввода;
    2. «Last name» текстовое поле ввода;
    3. «Function/title» (например: директор, главный бухгалтер и так далее) текстовое поле ввода;
    4. «Email» текстовое поле ввода;
    5. «Description»  text area, редактируемая через стандартный визуальный HTML-редактор;
    6. «POS» текстовое поле ввода.
  8. На витрине магазина необходимо добавить страницу со списком персонала в табличном формате с выводом имени/фамилии, должности. При клике на имя/фамилию должна открываться детальная страница сотрудника со списком всех полей.
  9. Оформление этой страницы должно быть выполнено в стандартном стиле всех остальных страниц клиентской части.

Усложнение

  1. Реализовать дополнительное поле «Photo» для загрузки фотографии сотрудника, вывести это фото на списке персонала в витрине магазина и детальной странице сотрудника.

Разбор задания

Задание несложное, рассчитано на кандидатов уровня junior. Оно охватывает практически всё, что может потребоваться среднестатистическому сотруднику в компании Simtech Development: работу с базой данных, работу с бекендом и фронтендом, проверку на самостоятельность и ответственность.

В самом начале мы задаем общий «тон» задания. Ссылка в меню — это несложная модификация, однако, показывает, что мы ожидаем не просто работающее приложение по прямой ссылке с выводом результирующего массива, а оформленное задание. В платформе пункт меню можно добавить несколькими способами. Кандидат может пойти по правильному пути или свернуть не туда.

Далее мы просим реализовать обычный CRUD (Create, Read, Update, Delete). Обратите внимание, в задании нет прямой необходимости сделать массовое редактирование или удаление объектов. Однако, внимательный кандидат увидит, что в любом другом месте такая функциональность есть, и либо сделает его, либо уточнит необходимость создания (те самые вырезанные части ТЗ, о которых я писал выше).

Далее идёт указание на необходимость использовать единую стилистику (гайдлайн) оформления страниц. Тут мы не ожидаем от кандидата геройства (хотя некоторые пытаются его демонстрировать), нужно лишь разобраться, что уже есть в системе и скопировать необходимые поля, немного адаптировав. Возвращаясь к вырезанным пунктам ТЗ, в задании нет указания добавить сортировку по полям на списке сущностей. Кандидат должен сам принять решение или задать вопрос.

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

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

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

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

В качестве усложнения предлагается добавить возможность загрузить фотографию. Этим мы:

  • проверим как кандидат умеет работать с файлами: будет использовать дефолтные функции PHP или разберётся как устроено хранение файлов в платформе; задумается ли он о том, что текущая модификация будет работать на проекте с распределенной файловой системой или CDN;
  • проверим на чем сконцентрируется кандидат: на качестве основного задания с проработкой деталей в виде сортировки и массового редактирования или погонится за выполнением большего количества пунктов ТЗ.

Парное программирование

Наверное, каждая компания сталкивалась с отказами разработчиков от выполнения тестового задания. Кто-то считает себя слишком крутым, у кого-то нет времени, а кто-то устал в поисках работы тратить по несколько дней на выполнение заданий. В таких случаях мы предлагаем вариант «парного программирования». Наш сотрудник вместе с кандидатом решают задачу; в ходе реализации задачи можно задавать любые вопросы. Для  соискателя — это возможность познакомиться с будущим руководителем и с платформой CS-Cart. Для компании — оценить уровень задаваемых вопросов и принять решение готов ли тимлид работать с этим человеком. Занимает этот процесс от одного до двух часов, что на наш взгляд, приемлемо для обеих сторон.

Пример задания, которое мы даём на парном программировании (взято из реальной практики)

Экспорт цены со скидкой

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

Для выгрузки информации по товарам на платформе CS-Cart есть функциональность Экспорта в csv-файл (который можно загрузить в стороннюю систему). Выгружаемые поля настраиваются, но к сожалению, в списке выбора по умолчанию доступна лишь базовая цена без скидки.

Задача: добавить возможность выгрузить в csv-файл цену со скидкой, если она проставлена у товара.

Разбор задания

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

Начинаем с блиц погружения в систему. Человек, знакомый с фреймворками и CMS-системами, сразу спросит где настраиваются скидки, а тот, кто не знаком с подобными системами, попытается предложить решение с сохранением скидки в базе данных для каждого товара. Скидка настроена, мы убедились, что она отображается на витрине; теперь кандидат должен разобраться как скидка считается. И тут начинается первая из трёх интересных частей.

Путь, которым пойдет кандидат в поиске системы калькуляции скидки, и рассуждения кандидата на 80% определят успешность прохождения собеседования. Некоторые соискатели начинают издалека: ищут сначала темплейт, где выводится информация, дальше по цепочке ищут откуда получается нужная переменная; другие рассуждают логически и сразу пытаются найти нужную функцию и внутри неё разобраться, где применяется скидка. Важно как быстро потенциальный сотрудник начнёт «трогать» код, в какой момент он вставит первый дебаг, чтобы посмотреть результат. В CS-Cart можно получить информацию о товаре вместе со скидочной ценой, вызвав функцию верхнего уровня, а можно проваливаться почти до бесконечности, пытаясь найти функцию, которая непосредственно применяет скидку. Очевидно, что путь, по которому пойдет кандидат, даст нам понимание, как он будет программировать в будущем.

Следующий интересный момент, с которым сталкивается кандидат: добавление нового поля в список доступных к экспорту полей. В платформе CS-Cart используется паттерн «схемы», в которых описывается вся логика. Мы обратим внимание на то, разберётся ли кандидат сам и насколько уместные вопросы он будет при этом задавать. Если тимлид видит, что человек закапывается, он остановит его и задаст наводящие вопросы или направит в нужное русло, так как время на выполнение задания ограничено.

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

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