В комментариях к посту о том, как chatGPT почти крякнул домашнее задание на позицию ML инженера, наметились зачатки спора про домашние задания ("take-home") против алгоритмических собеседований с написанием кода в режиме реального времени ("leetcode"). Разверну мысль, возможно, защищая непопулярное мнение: мне домашние задания куда больше по душе.
Ругают вообще-то оба этих способов отбора кандидатов, домашние задания - в основном за неоплачиваемое время кандидатов и нагрузку во внерабочие часы, литкод - за проверку специфичных навыков. Так что тут выбор из двух зол. И мой выбор - домашние задания. Поскольку, про минусы литкода только ленивый не писал, буду больше про take-home.
Плюсы take-home в сравнении с алгоритмическими собеседованиями
Плюс 1. Куда ближе к реальной работе
Тут вряд ли кто поспорит, завернуть модельку в API и докер, обсудить model lifecycle management и дашборды с метриками - бесконечно ближе к реальной работе MLE, чем пресловутые BFS и DFS (уж красно-черные деревья такой мем и стереотип, что даже не хотел упоминать).
Плюс 2. Меньше стресса
Кандидат работает в нестрессовой обстановке. Про стресс собесов вживую сто раз говорилось, просто отметим, что не спеша делать задание дома или на работе (кек) - куда лучше.
Плюс 3. Проверка навыков приоретизации
Хорошее задание дается из расчета на 3-6 часов работы. Это значит не 40, а реально 3-6 часов. В таком ограничении я вижу только плюс - можно увидеть, что кандидат считает важным, а что нет. Для примера можно представить идеальный парсер какого-то сайта и хреновую архитектуру приложения и, наоборот, продуманную архитектуру и базовый quick & dirty парсер.
Плюс 4. (опц.) Качественный фидбек
Это в общем не факт, что верно, тут скажу за себя: я даю кандидатам подробный фидбэк по заданию, как по ключевым решениям, так и по коду. Джунам такой фидбек будет сильно полезнее, чем стандартный фидбэк после запоротого алгоритмического собеса или отписка «надо бы структуры данных поботать».
Плюс 5. Часть портфолио
По согласованию с работодателем сделанное домашнее задание можно поместить в портфолио проектов. С сравнении с сотнями часов, потраченных на литкод, это выглядит плюсом, таким же, как от пет-проджектов.
И, конечно, минусы. Приведу и те, которые традиционно считаются минусами, со своими контраргументами.
Минус 1. «Кандидаты работают за бесплатно»
Хех, давайте поговорим об этом. Во-первых, если постараться, можно и оплатить работу кандидатов, что, думаю, в средней компании сделать сложновато, но можно.
Во-вторых, будем честны, больше половины заданий настолько плохи, что фидбек очень ценен для кандидата, а говорить об оплате времени даже как-то нелепо, когда на выходе что-то несуразное, вот уж реально chatGPT лучше сделает.
Так что средний кандидат тратит время на take-home, получает опыт и фидбек, по мне – fair enough. Не вижу особого отличия от 100 часов, убитых на литкод, и собес, запоротый за 10 минут, где попадается hard или крепкий medium (см. плюс первый, take-home задания хотя бы куда ближе к жизни, чем литкод).
Минус 2. Работа во внеурочное время
Часто можно слышать, что «бедные кандидаты должны работать над заданием во внерабочее время». Серьезно? А литкод? В рабочее время? Тебе в принципе надо сильно постараться, чтоб сменить работу. И хорошо бы не лицемерить, когда человек ищет работу, он уже отбирает немного времени и от работы в текущей компании, опять же будь то take-home, литкод или какой угодно другой собес.
Минус 3. Задания утекают в открытый доступ
Да, вот это серьезный минус, тут можно частично разрулить проблему путём NDA, но задания все равно будут утекать, с этим нельзя что-либо сделать. А новые задания каждый раз легко не придумаешь, когда надо (к слову, это же - наибольшая сложность открытых повторяющихся курсов типа mlcourse.ai).
Минус 4. Вряд ли для синьоров
Вот это да, проблемка, точнее, ограничение - take-home хороши для найма стажеров, джунов, мидлов, но вот господа синьоры, весьма вероятно, ответят «нет у меня времени на это ваше задание». Но по мне это и не такая уж проблема, у синьоров можно другие вещи спрашивать, с ними на первый план выходят поведенческие собеседования (писал про них тут) и истории из жизни.
Минус 5. chatGPT
Да, это надо переосмыслить то, как chatGPT почти справился с моим заданием на MLE. Я пока вот что намыслил: chatGPT не убил мое задание. Да, с этим ассистентом задание можно сделать на 90%, окей. Тогда просто объявляю прямо в формулировке задания, что можно пользоваться chatGPT, идем дальше, обсуждаем все вокруг. Опять же, приближено к реальной работе.
Минус 6. Можно скатать
Да, никак не проверишь, сделал ли за тебя друг твое задание. Но у меня take-home всегда сопровождается собесом с презентацией решения, и кажется, я с высокой точностью могу понять, когда человек презентует не свой код. Но да, false positives в этой части отбора возможны.
Резюмируя, я бы не противопоставлял эти два вида отбора кандидатов (так что формат поста – не баттл), но мне ближе домашние задания. Их, впрочем, можно совместить и с простым "литкодом" уровня 1000-го числа Фибоначчи или даже fizz-buzz, чтоб как можно быстрее нулёвых отсеять. К слову, с Амазоном у меня было и домашнее задание (tech talk), и простой литкод, и стандартные вопросы по теме, и куча времени для behavioral.
По-моему был такой баттл уже, но в целом все мои личные аргументы за и против ты собрал хорошо, да. Мне часто приходится бывать с обеих сторон найма :)
Я больше люблю небольшие домашки, а-ля «реализуйте вот такую функцию и напишите к ней тесты», чем потеть на лайв-кодинге по телефону. Но всё сильно зависит от конкретных домашек.
Хотя всякие индусы, китайцы и славяне стали много читерить, делегируя свои домашки специальным людям из своего бодишопа. Но этот обман легко потом детектится в разговоре.
Ну и дежурная напоминалка: от уровня «сеньора» и выше тупая проверка умения писать код не имеет никакого смысла. Там важны совершенно другие скиллы. Так что когда интервьюер спрашивает написать очередную рекурсию кандидата с лид-позицией — это скорее показывает неподготовленность интервьюера или ошибку в вакансии.
Я обычно на такое всегда говорю посмотреть мой гитхаб. По нему видно, что код написать я смогу, давайте лучше потратим время с пользой и проверим всё остальное. Если говорить это без пафоса и наезда — интервьюеры даже радуются, что ты экономишь их время.
Но в FAANG'ах не работает, там процесс найма стандартизирован, и от заранее написанного сценария интервью отходить строго-настрого запрещают (якобы чтобы избежать bias'ов). Но я в них и не хожу :)
😱 Комментарий удален его автором...
Мне проще поработать на лайвкодинге 2 часа, чем несколько вечеров домашку делать. На лайвкодинге все равны, я не трачу кучу часов на задание и они сразу видят как я работаю.
Насчёт сделать домашку и потом выложить на гитхаб в качестве примера работы - в заданиях этот момент чётко описан "как никуда не выкладывать, чтобы будущие кандидаты не скопипастили". И часто в качестве домашних заданий они хотят увидеть чуть ли не готовый проект, складывается впечатление, что я не тест прохожу, а уже там работаю.
Сделать домашнее задание != получить фидбек по нему с точки зрения обмена денежной энергии. Я считаю, что любая работа должна оплачиваться - хотите, чтобы я сделал тестовое, то будьте готовы оплатить моё время. Причёт тут не важна сумма, а сам факт - я не прошу оплатить мне время по цене лида в гугле, а просто показать своё отношение. Ведь я иду на работу, чтобы зарабатывать деньги, а они ищут того, кому будут платить за работу. Попытка убедить меня потратить несколько вечеров и бесплатно сделать задачу это очень плохой знак. Я вижу это так, что в компании любят, чтобы сотрудники бесплатно поработали сверхурочно и активно это применяют. Последний раз, когда мне оставляли фидбек был настолько общий, что chatGPT лучше бы написал ревью на код.
Итого, только лайвкодинги, а если домашние задания, то оплачиваемые.
Как будто бы в конечном итоге почти все компании проводят и домашнее задание, и какую-то форму технического собеседования где чаще всего есть и лайф кодинг. Редко где вижу возможность скипнуть домашнее задание.
Примечание: работаю в Data Science. Формат домашних заданий часто подразумевает не только проверку технических навыков (ML, Python), но и очень многих софт скилов (storytelling, навыки коммуникации, креативное мышление и так далее).
Для меня два этапа довольно комплементарны, и проверяют несколько разные вещи и виды работы. Тем не менее связка "полноценное домашнее задание + лайв кодинг/тех интервью" забирают много времени с обеих стороны: кандидата и компании.
Поэтому я люблю формат домашних заданий с таймером на 2-3 часа. Вы заранее договариваетесь во сколько ты получишь задание и у тебя есть 2-3 часа на его решение. Высылаешь значительно позже - реджект.
По итогу сумма затрат времени с обеих сторон не такая большая, тем не менее может быть проверен широкий спектр навыков.