Оффтоп Daria Khokhlova
3 246

Письмо в редакцию: Специализированные тесты не способны выявить профессиональные качества разработчика

В редакцию vc.ru пришло письмо от основателя рекрутингового агентства 2Diggers Александра Зверева, в котором он описал основные проблемы, которые связаны с использованием тестов при найме технических сотрудников в стартап. По мнению автора, подобные тесты выявляют только знание синтаксиса определённого языка программирования, но не демонстрируют профессиональные качества кандидатов.

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

Я собирался сам пройти какой-нибудь из тестов и написать про это обзор, но все это как-то откладывалось, пока главный рупор массового найма Алена Владимирская вскользь не прорекламировала Центр Сертификации Mail.Ru Group, правда, делая поправку на то, что этот сервис хорош при найме на средние и младшие позиции.

Но Алена — HR. А я всё-таки программист. И я могу этот тест пройти, оценить его и выдать свое экспертное мнение. Что я и сделал. Я прошел тест на знание языка C#. И набрал 14 из 45. Ну, хорошо, я пару лет не притрагивался к С#, но всё-таки почти четыре года был одним из разработчиков ReSharper и знал C# сильно лучше среднего программиста. Впрочем, возможен такой вариант, что я — идиот, и все эти четыре года команда ReSharper была в опасности.

Абзац про методологию

Популярные сейчас проекты онлайн-образования (и еще создатели ЕГЭ) вовсю используют тесты. Но у них другие цели тестирования: они проверяют, как слушатель усвоил материал.

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

Можно ли проверить производительность человека тестами? Наверное, можно. У меня есть удачный пример тестирования аудиторов, но не программистов.

Удачный пример тестов для аудиторов

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

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

Важно обратить внимание на то, что тест не проверяет, помнит ли кандидат все законы и подзаконные акты (вы ведь знаете, что победитель чемпионата по Scrabble во Франции не говорит по-французски?). Тест проверяет, понимает ли кандидат, как устроена российская система законодательства, и может ли он быстро найти ответ на сложный вопрос, а также взвесить риски, связанные с противоречивостью законов. Всё как в реальной жизни.

Тест был не совсем multiple-choice, а скорее тест с открытыми ответами. Но писать в нём надо было мало (краткий ответ и ссылки на законодательство и нормативные акты). То есть в итоге тест проверялся очень быстро.

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

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

Как сделаны современные языки программирования

Отлично, Mail.Ru Group потратила эти 40 часов за вас и сделала хорошие тесты. Но действительно ли они такие хорошие? Большая часть тестов, не только от Mail.Ru Group, но и на большинстве сервисов — это тесты про языки программирования. Что это значит на самом деле?

Относительно давно я слушал презентацию Ильи Рыженкова про язык Kotlin:

В этой презентации Илья шутил на тему схожести синтаксиса языков Kotlin и Swift: кто у кого украл идеи? На самом деле никто ни у кого, просто принятые обеими командами архитектурные решения витали в воздухе.

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

На моем любимом сервисе Coursera почти не бывает вопросов про «какие ошибки компилятор выдаст в этом кусочке кода». Для этой работы (сюрприз) есть компилятор. Это нормально, когда программисты пишут из головы код с ошибками: они сначала решают задачу по выражению своей идеи существующими средствами, а на следующих этапах уже правят ошибки компиляции. Именно поэтому придумали делать автоматические тесты для программ и постоянно их запускать: люди делают ошибки — и это нормально. Ключевым же для работы навыком является способность эти ошибки обрабатывать. Но тест «где Уолли?» это никак не проверяет.

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

Теперь давайте сделаем не простой тест «найди ошибку», а полезный тест «напиши понятный код». Вы можете такой тест написать? Я — нет.

Кто должен делать тесты

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

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

Цель тестирования — не показать, какой автор теста умный, а показать, какой прошедший тест полезный.

Что вообще важно знать программисту

Что является определяющим навыком в работе программиста? Способность сделать программу. В вашем конкретном случае — это способность сделать программу определенного типа (сайт, игру, систему для управления ядерным реактором) в определенные сроки. А вместо этого мы тестируем то, насколько программист умнее компилятора. Слушайте, компилятор за вас уже написали, и именно для того, чтобы сделать рутинный труд программиста эффективнее, предоставив ему возможность сосредоточиться на реальных проблемах и действительно важных вещах.

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

Вот можно ли сделать тест на понимание таких вещей как, например, управление памятью в .NET (поверьте, там есть что спрашивать, и многие кандидаты не знают даже азов)? Уверен, можно. Но я пока ни одного такого теста не видел. Может, потому, что на такие темы намного приятнее беседовать с кандидатом лично: тема обширная, глубокая и очень хорошо показывает, насколько кандидат разбирается в том, как вообще работают программы.

Тест на знание синтаксиса языка полезен после прослушанных курсов. При найме важнее «потрогать» более глубокие вещи.

Другие сервисы

На самом деле, в тесте от Mail.Ru не все еще не так плохо. Одному моему приятелю на интервью выдали тест, который стал у него выяснять про экзотические параметры командной строки в Java и про то, в каком порядке идут параметры у каких функций. Это провал.

Я уверен, что осмысленность вопросов на сервисах тестирования будет расти, но так же быстро будет расти и внешняя база ответов на эти вопросы. Однако главный вопрос, который зачастую остается неотвеченным, — «Почему вы все еще спрашиваете то, что спрашиваете?». И это «почему» должно быть прагматическим, а не из разряда «каждый это должен знать». Во времена моей молодости каждый должен был знать день рождения дедушки Ленина. Мне это знание, кстати, один раз пригодилось: в военкомате у психиатра.

Что делать

  1. Во-первых, не тестировать этой ерундой специалистов даже начального уровня. Тем более, что для начинающего программиста знать язык — не главное. Выучит он его за неделю. Для него важны hard skills (то, что приобретается и нарабатывается долгим трудом): алгоритмы и данные. Вот про них можно сделать тест. Но, к сожалению, определяющим является умение эти алгоритмы применять и комбинировать, а это в тест, мне так кажется, не засунешь. Но подобным тестом можно отсечь хотя бы безнадежных кандидатов, у которых нет даже элементарной базы. Не забывайте, что тестом можно отсечь не только безнадежных кандидатов, но и лучших кандидатов, так что не увлекайтесь.
  2. Во-вторых, пойти к людям, которые понимают в этом столько же, сколько и вы, но ещё и имеют время подумать о методологии тестирования и этим тестированием заняться. То есть заплатить таки кому-то из умных и неленивых людей. Оплата выйдет, скорее всего, почасовая.
  3. В-третьих, сделать свои собственные очень хорошие тесты, потратив на это массу времени, сил и денег. А потом зорко следить, чтобы эти тесты не утекли из компании.
  4. В-четвертых, забыть про все эти тесты, как вы это уже сделали 20 лет назад с тестами и сертификацией от Brainbench.

#Криейторы #разработчики #работа #разработка #программирование #программисты #письмо_в_редакцию #найм_на_работу #найм_сотрудников

Статьи по теме
Письмо в редакцию: Перестаньте спрашивать фигню на интервью с кандидатами
Письмо в редакцию: Прекратите оценивать ИТ-кандидатов по резюме
{ "author_name": "Daria Khokhlova", "author_type": "editor", "tags": ["\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438","\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430","\u0440\u0430\u0431\u043e\u0442\u0430","\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b","\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","\u043f\u0438\u0441\u044c\u043c\u043e_\u0432_\u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044e","\u043d\u0430\u0439\u043c_\u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432","\u043d\u0430\u0439\u043c_\u043d\u0430_\u0440\u0430\u0431\u043e\u0442\u0443","\u043a\u0440\u0438\u0435\u0439\u0442\u043e\u0440\u044b"], "comments": 26, "likes": 12, "favorites": 1, "is_advertisement": false, "subsite_label": "flood", "id": 10558, "is_wide": true, "is_ugc": false, "date": "Tue, 15 Sep 2015 07:59:05 +0300" }
{ "id": 10558, "author_id": 5723, "diff_limit": 1000, "urls": {"diff":"\/comments\/10558\/get","add":"\/comments\/10558\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/10558"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199791 }

26 комментариев 26 комм.

Популярные

По порядку

Написать комментарий...
3

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

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

Ответить

Комментарий удален

Комментарий удален

1

Тесты не всегда предназначены для окончательного выбора. Есть много ситуаций, когда требуется отобрать 10 из 100. Например, на вакансию подало заявки 100 человек. С помощью тестирования можно отсеять 90 а с оставшимися работать плотнее. Или провести тестирование работников отделов предприятия и посмотреть на результаты и сравнить их.
Все это конечно нужно для крупных компаний, если в компании 3 программиста, то тесты не нужны. А если нужно принимать какие-то решения о судьбах сотни человек или даже по нескольким десяткам, то тесты очень помогают.
Сервис, который умеет это делать http://skilltech.ru {реклама}

Ответить
0

Если вам на вакансию пришло 100 заявок, а надо выбрать 10, то вы набираете кассиров, а не программистов.

Ответить
0

Серьезно? Интересен ход мысли. А как по вашему должно быть? Пришло 12 а нужно 10? или пришло 100 а нужно 200? Или 100 программистов не существует в природе?

Ответить
0

Последнее. 100 программистов не существует в природе. Точнее так, существует, и даже 100 тысяч в этой стране. Но не существует такой вакансии, на которую прислало бы резюме 100 программистов.

Ответить
0

Вы ошибаетесь :) Даже для небольшой и никому неизвестной фирмы с небольшим окладом через бывший сервис http://brainstorage.me/ поступало в среднем 30-40 предложений. А если говорить о компаниях международного масштаба, то 100 заявок очень легко.

Ответить
0

я эту мантру от skilltech усвоил.

давайте проведем реальное исследование? что мы тут спорим-то без цифр в руках?

Ответить
1

Александр знает про codility или codingame? Это те же самые тесты, только в нем нужно написать маленькую программу, решить простую задачу. Они как раз проверяют, умеет ли кандидат решать поставленные задачи, почти без привязки к синтаксису того или иного языка.

Ответить
0

Александр знает даже больше: http://2diggers.ru/knowledge/whiteboard-interview

Ответить
0

О, круто. Можно построить дискуссию.
Интервью на листочке - ок, но мы о разных сущностях говорим.

Какова цель тестов? ИМХО, с минимальными затратами (то есть временем специалистов - разработчиков, hr) отсеять слабые и кадры и выявить сильные.

Доску с фломастерами нужно проводить несколько раз уже на финальной стадии ради объективности результатов (если вы не стартап с численностью три человека), поэтому в гуглах и фейсбуках четыре-пять интервью на листочках. А это очень дорогое удовольствие.

К чему это я: тесты проводить надо, но только вида топкодера или codility. Вы ведь не возьмете жонглера, знающего все виды шариков и ножей, но ни разу не продемонстрировавшего свое умение?

Ответить
0

Давайте по-другому. Какая цель процесса найма? Меньшими затратами нанять максимально производительных сотрудников. Даете им тесты? Значит сразу получаете резкое снижение потока кандидатов и много ложно-отрицательных ответов. Задача не выполнена.

Ответить
2

Значит сразу получаете резкое снижение потока кандидатов и много ложно-отрицательных ответов

Резкое снижение потока - ок, согласен. Это барьер для слабых.
А поясните, пожалуйста, про ложно-отрицательные ответы? (Мы в контексте тестов типа топкодера говорим)

Ответить
0

вам не нужен барьер для слабых, они и так отвалятся. вам нужен магнит для сильных.

топкодер – это хорошо, но не всегда такой градус нужен в реальной жизни.

Ответить
1

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

Мы вообще одну и ту же задачу решаем?
Типичная ситуация: нанять c#/java/python программиста уровня middle и выше. Как обычно происходит: есть вакансия, откликается 10 кандидатов.
Из них: 3 - неадекваты, 4 - быдлокодеры, с остальными тремя можно говорить.

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

У вас другой опыт?

Ответить
0

Да, у меня другой опыт.

На вакансию не откликается никто, всех надо искать руками.

Вы не можете дать тест, не пообщавшись с человеком (лично встречаться не обязательно), иначе он вас пошлет куда подальше. И общаться надо так, чтобы было понятно, что за вас стоит бороться.

Вы можете писать на интервью (по скайпу) что-то в редакторе – ок.

Ответить

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

Комментарий удален

–1

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

Ответить
0

А можно ещё по скайпу попросить в гуглодоке написать решение какой-нибудь эзотерической алгоритмической задачки с ходу. Вот тут и отличие нашего IT и ихнего. И почему у ихнего всё есть, а у нашего ничего нет. А, есть. Дизертиры с аркадками для мобилок.

Ответить
1

а чем вам не угодили простые алгоритмические задачи?
ведь все программирование - про алгоритмы

Ответить
1

Ага, в Яндекс любят подобное спрашивать. Хотя на практике это тебе никогда не понадобится.

Ответить
0

Не совсем. Про алгоритмы только computer science. Но это такая сильная фраза на собеседованиях, что её себе приписывают абсолютно все. Ваше недовольство вызвано тем, что наши программисты не могут решать алгоритмические задачи, которые им дают на дом, на 1 час потупить вечером перед сном. Кандидаты растягивают эти задачи на недели гугления, а потом начинается, что тестовые задания зло и не показывают ничего. В США и Европах устраивают целые онсайты по 4-5 часов, по 1-3 раза. И ничего, летают, заваливают, потом через год опять летают. У нас просто брожение умов и никак не хотят принять такую модель хантинга. Она жестокая, я согласен. Но и задачи решаются не детские. Почитайте Elements of programming interview. Там всё хорошо описано. Хочешь работать? Готовься работать. Универы и мамки закончились.

Ответить
–1

Могли бы написать "ты просто пидр и не понимаешь особый русский путь". Чего минусовать сразу.

Ответить
0

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

Ответить
0

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

з.ы: посмотрите кто создал великие продукты!?

Ответить
0

Ну тестирование куда лучше, чем анализ фейсбушечки соискателя.(см стартап айрекрутер ниже)

Ответить
0

У Яндекса при отправке резюме уже несколько лет одни и те же тесты, на которые уже давно есть решения, но вы не поверите, они позволяют отсеять 90% уже до этапа собеседования.

Ответить
0

ИМХО гораздо ценнее шаблонных тестов - посмотреть активность кандидата на тематических форумах, особенно какие вопросы он там задавал.
Из этого можно понять уровень проблем, с какими сталкивался программист,и, как следствие, оценить его уровень познания в данной области. Ну и бонусом(возможно) - примерно определить его стиль работы, любимые методики и так далее.

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Хакеры смогли обойти двухфакторную
авторизацию с помощью уговоров
Подписаться на push-уведомления