Ты не компилятор

в 8:49, , рубрики: головоломки, задачки, Карьера в IT-индустрии, отсев кандидатов, собеседования, управление персоналом

На конференциях часто на стендах раздают подарки. Обычно нужно решить какую-то задачку.

Невинная головоломка

Некоторые из задач предусматривают решение головоломки с кодом, вроде такой:

Каким будет результат выполнения следующего кода:

public class Sum {

    public static void main(String[] args) {
        System.out.println(0123 + 3210);
    }
}

  1. 3293
  2. 3333
  3. Этот код не компилируется
  4. Этот код приводит к ошибке IllegalArgumentException
  5. Ничего из вышеперечисленного

Моя обычная реакция — или немедленно покинуть стенд, или, если время позволяет, набрать код на ноутбуке, чтобы посмотреть результат (или поискать в Google). Вы можете упрекнуть меня в лености, но я предпочитаю представлять себя экспертом по тайм-менеджменту.

Просто, но бесполезно

Единственное преимущество такого подхода — оценить ответы может любой, если у него есть правильные ответы. И это всё.

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

В обоих случаях следует оценить способности, а наиболее простым решением видят как раз тест-опросник с несколькими вариантами ответа. Конечно, если у человека нет доступа к IDE или Google, то это становится трудной задачей. Но в что проверяется в вышеприведённом примере? Знание очень специфической ситуации, которая возникает при определённых параметрах. Это специфическое использование, которое в любом случае я запретил бы использовать в своих проектах по той же причине: это исключительная ситуация! А я не хочу, чтобы в моём коде встречались такие ситуации.

Другой пример

Вот ещё одна задачка, с которой вы можете столкнуться:

Какова корректная сигнатура метода service() в классе javax.servlet.http.HttpServlet?

  1. public void service(ServletRequest, ServletResponse)
  2. public void service(HttpServletRequest, HttpServletResponse)
  3. public int service(ServletRequest, ServletResponse)
  4. public int service(HttpServletRequest, HttpServletResponse)
  5. protected void service(ServletRequest, ServletResponse)
  6. protected void service(HttpServletRequest, HttpServletResponse)
  7. protected int service(ServletRequest, ServletResponse)
  8. protected int service(HttpServletRequest, HttpServletResponse)

Такие вопросы не проверяют ничего, кроме способности запомнить часть функциональности основных IDE или документации JavaDoc.

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

Ключевая проблема

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

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

То же самое относится к сертификации.

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

Осуществимо ли такое? К сожалению тех, кто считает это утопией, такая система уже существует. Наилучший пример — Java EE Enterprise Architect. Хотя на первом этапе нужно пройти тест с несколькими вариантами ответа, другие этапы предусматривают выполнение заданий как в настоящем проекте и написание соответствующего эссе.

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

Вывод

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

Автор: m1rko

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js