Домашнее задание vs. Онлайн-кодинг

 Публичный пост
5 марта 2023  794

В комментариях к посту о том, как 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.

Связанные посты
13 комментариев 👇
Вастрик Блогер, питонист, мизантроп 5 марта 2023

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

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

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

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

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

Но в FAANG'ах не работает, там процесс найма стандартизирован, и от заранее написанного сценария интервью отходить строго-настрого запрещают (якобы чтобы избежать bias'ов). Но я в них и не хожу :)

  Развернуть 1 комментарий
  Развернуть 1 комментарий

@vas3k, ну fizz-buzz можно и синьору дать, если реально синьор – 5 минут и поехали дальше, к бихейву. Если дутый синьор – вот за 5 минут и отвалится. Так что я даже за литкод, только лайтовый, а не 6 сессий с хардами.

  Развернуть 1 комментарий
Олег Леонов Lead Android Developer, nano blogger 5 марта 2023

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

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

Сделать домашнее задание != получить фидбек по нему с точки зрения обмена денежной энергии. Я считаю, что любая работа должна оплачиваться - хотите, чтобы я сделал тестовое, то будьте готовы оплатить моё время. Причёт тут не важна сумма, а сам факт - я не прошу оплатить мне время по цене лида в гугле, а просто показать своё отношение. Ведь я иду на работу, чтобы зарабатывать деньги, а они ищут того, кому будут платить за работу. Попытка убедить меня потратить несколько вечеров и бесплатно сделать задачу это очень плохой знак. Я вижу это так, что в компании любят, чтобы сотрудники бесплатно поработали сверхурочно и активно это применяют. Последний раз, когда мне оставляли фидбек был настолько общий, что chatGPT лучше бы написал ревью на код.

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

  Развернуть 1 комментарий

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

  Развернуть 1 комментарий

@yorko, блин, а я вот ща задумался. По идее если бы все были красивыми и делали реально интересные домашки - было б вообще здорово, и поделал, и научился (даже на позиции сеньора). Но, к сожалению, часто домашки очень типовые, без креатива, на рутинное повторение-переписывание того, что было на курсах( жалк(
Но кстати на свои задачи для отбора стажеров (тест+немного практики) получал очень много положительного фидбека. Причем, не пустого - я писал людям спустя 2-3-4 месяца, так что у них было 0 причин не послать меня или соврать (то есть я предполагаю, что фидбек+- честный был).

Так сделаем же наши домашки познавательными и интересными!

  Развернуть 1 комментарий

@yorko, За потраченное время. Это не час пособеседоваться, а зачастую несколько вечеров. Насчёт полезное решение или нет - тут зависит от тестового задания. Моя позиция это оплачивать труд, даже если это только кандидат а не работник - относить к нему так, как будто это уже работник.
Если же оценивать по вашей логике, то можно и работникам не платить, а просить их доказывать что именно они сегодня сделали на работе, а если он не сможет доказать, что один час из работы, то не платить за него.
Подготовка к литкоду это дело добровольное 0 можно и не готовиться и просто взять и решить задачку с ходу на собеседовании и лидкод более универсальный, если ходишь по фаангам, чем просто тестовое задание от одной компании.
Не воспринимайте на личный счёт, если вы готовы делать тестовое задание бесплатно, то это не значит что все готовы делать.
Ну и к слову, я 15 лет в разработке и никто от меня тестовые задания не получал - предпочитаю проверять кандидатов в лайве или по github.

  Развернуть 1 комментарий

@stalkermustang, это верно, тупые рутинные домашки делать совсем не хочется. К счастью, тут chatGPT врывается, значит, давать рутинные домашки становится меньше смысла.

Я за интересные креативные задания. И даже за использование chatGPT во время их выполнения. Но все остальные сложности остаются.

Почитав “working backwards” про философию Амазона, в том числе относительно найма, я сам буду делать больший упор на бихейв.

  Развернуть 1 комментарий

@sagus, в идеальном мире, конечно, подготовка к собесам не нужна, а проверяют только те знания и навыки, которые ты приобрел на работе и готов применить в новой компании. В реальности это не так. Тогда вопрос, кто оплачивает время кандидата на подготовку?

Я все еще не понял отличия:

  1. реши литкод, крепкий медиум или хард. На подготовку нужно часов 60-70
  2. сделай тестовое. На него нужно 6 часов (да, бывают плохие тестовые, где нужно целых 20 часов).

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

Пс. аргумент про большую универсальность литкода принимаю, согласен.

  Развернуть 1 комментарий

@yorko, подготовку сам кандидат и оплачивает, потому что он готовится не к конкретной компании, а ко всем сразу. При решении же тестового, это тестовое актуально только в одной компании - не получится сказать, что вот я решил тестовое в другой компании, можно ли зачесть. А подготовившись один раз на литкоде результаты/опыт/знания применимы вообще везде.

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

Тестовые вообще обо мне ничего не скажут, то есть с огромной вероятностью я их сделаю, а вот на лайвкодинге могу посыпаться. Да и вообще мидл кандидат может попросить сделать старшего брата сеньора и попросить всё максимально объяснить. Тут система с тестовыми и ломается. Я как-то за месяц прошёл 16 циклов собесов в разных компаниях (по 4 этапа) и понят, что могу и зайца обучить их проходить.

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

  Развернуть 1 комментарий

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

  Развернуть 1 комментарий

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

Примечание: работаю в Data Science. Формат домашних заданий часто подразумевает не только проверку технических навыков (ML, Python), но и очень многих софт скилов (storytelling, навыки коммуникации, креативное мышление и так далее).

Для меня два этапа довольно комплементарны, и проверяют несколько разные вещи и виды работы. Тем не менее связка "полноценное домашнее задание + лайв кодинг/тех интервью" забирают много времени с обеих стороны: кандидата и компании.

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

  • Есть стресс из-за прессинга времени, но нет стресса от живого общения с людьми.
  • Можно гуглить, что близко к реальной жизни.
  • Неплохой прокси проверки реальных технических навыков - если давать неделю на решение, то там и фрэймворк какой-то можно выучить новый за это время, и заиметь необходимый навык, которого у тебя могло не быть и т.д., а за 2-3 часа можно проверить знания здесь и сейчас;
  • Хорошая проверка навыков приоритезации
  • Проверки быстроты мышления
  • В дальнейшем можно следущий этап собеседования базировать на этом домашнем задании - обсуждение case study, отдельные технические моменты. У кандидата как раз есть мысли для размышлений и неплохая затравка для подготовки.

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

  Развернуть 1 комментарий

@kvaranovich, плюсую. Ровно в таком формате и даю задание – с последующей презентацией и вопросами как по хард, так и по софт-скиллам.

  Развернуть 1 комментарий
Юрий Кашницкий Principal Machine Learning Scientist автор 5 марта 2023

😱 Комментарий удален его автором...

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб