Обложка: Технические навыки и творческое мышление: что оценивают на собеседовании в ИТ-компании

Технические навыки и творческое мышление: что оценивают на собеседовании в ИТ-компании

Никита Зайцев
Никита Зайцев

Руководитель направления разработки и технологического развития ГК «Эдит Про»

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

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

В «Эдит Про» большинство задач на интервью связано с разработкой на технологической платформе «1С». Причём у кандидата не обязательно должен быть обширный опыт работы с ERP-системами. Достаточно показать, что он проявил инициативу и занялся изучением стека технологий «1С» (платформа, библиотеки, стандарты и так далее) ещё до прихода на собеседование.

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

Кроме того, собеседование обычно строго ограничено по времени. Благодаря этому мы можем оценить, готов ли соискатель работать в условиях сжатых сроков, и как он реагирует на жесткие дедлайны.

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

О технологической платформе

Первое задание обычно связано со спецификой работы с платформами и ИТ-решениями компании «1С». Так мы проверяем базовые знания соискателя.

Пример 1

У нас есть переменная, её значение — ссылочный тип, «ДокументСсылка», «СправочникСсылка» или другой. Нам необходимо получить значение одного из реквизитов этого объекта данных, но если мы напишем «Если МояНакладная.ДатаОтгрузки < МинимальноВозможнаяДата», тогда грубейшим образом нарушим стандарт. В «1С» считают, что так писать программный код нельзя. Почему?

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

Поэтому вместо прямого обращения «Через точку» необходимо создать и выполнить явный запрос, который прочитает только одно поле соответствующей таблицы. Если же вконфигурацию встроена «1С: Библиотека стандартных подсистем», можно просто воспользоваться соответствующей библиотечной функцией.

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

Пример 1.1

Задание можно и усложнить.

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

Правильным ответом будет: «RLS, то есть ограничение доступа к объекту данных на уровне записей. У одного пользователя могут быть права на чтение конкретной записи, у другого — нет».

Усложнение позволяет оценить умение кандидата быстро ориентироваться в ситуации. Даже если соискатель не сталкивался с подобным кейсом, он может сопоставить вводные с возможными вариантами. И наиболее вероятным предположением будет «Ошибка чтения» — значит, нужно проверить права доступа.

Напротив, если соискатель ответит: «Объект заблокирован», — значит, он смутно представляет механику блокировок, реализованную на технологической платформе.

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

Задачи на знание профессионального поля

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

Пример 2

Если посмотреть на возможности технологической платформы по интеграции с другими информационными системами, мы увидим два объекта метаданных: WebСервис и HTTPСервис. Почему их два и чем они отличаются? И как мы будем определять, какой из объектов в какой ситуации использовать?

Суть ответа заключается в том, что объекты почти идентичны. Но WebСервис — это реализация протокола SOAP, а HTTPСервис — это небольшая надстройка над обычным http-запросом, которая воплощает концепцию REST. Соответственно, если нам требуется строгая формализация интеграционного взаимодействия на базе открытого протокола, мы выберем WebСервис. Если же строгой формализации не требуется — HTTP-сервис, поскольку у разработчика концепция REST-интерфейса есть дополнительная степень свободы.

Вопрос очень простой, но получить правильный ответ обычно удается в 1 случае из 10.

Задачи на абстрактное и алгоритмическое мышление

Мы оцениваем не только профессиональные знания, но и то, как кандидаты работают с нетипичными задачами.

Пример 3

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

Для нас важно, чтобы в рамках ответа соискатель не бросался на амбразуру, пытаясь сразу же написать программный код, а подошёл к решению задачи логически. Сначала необходимо определить критерии, по которым можно интерпретировать любую клетку игрового поля как новый корабль. Например, сама клетка должна быть частью корабля. А следующие клетки в направлении «Восток» и «Юг» должны быть пустыми. Если это условие выполняется, такую клетку мы засчитываем за новый корабль.

Дальше решение становится очевидным. Технически алгоритм выстраивается в один проход двумерного массива, двойной цикл с локальной переменной-счётчиком и проверкой единственного условия.

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

Творческие задания

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

Пример 4

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

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

Для этого все манипуляции с объектами данных информационной базы необходимо поместить в операторные скобки «НачатьТранзакцию/ЗафиксироватьТранзакцию». После того, как все необходимые манипуляции выполнены, но транзакция ещё не зафиксирована, необходимо создать новое регламентное задание. Его инициирует та часть программного кода, в которой описаны манипуляции с внешними объектами данных.

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

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

Учить нельзя использовать

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

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

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

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

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

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