×Закрыть

Сага о тестовых заданиях

Хочу обсудить тему выполнения тестовых заданий для вакансий.
Рассказываться и докладываться она будет со стороны программиста, субъективно, от моего первого лица. Никакие имена компаний называться не будут, это статья о «статусе» тестовых работ в Украине в целом.

Тема выполнения ТЗ совершенно не новая. Появляется вакансия — для неё необходимо отобрать кандидатов. Если вакансия не сложная, можно выдать тестовое задание потенциальным работникам. Делается это, насколько я понимаю, для экономии HR-часов и оценки умений кандата.

Я выполнил примерно 20 тестовых заданий, по времени каждое тестовое задание занимает от 3 до 5 дней. Считаем: 20 * 4 = 80 рабочих дней, итого почти три месяца, это если работать без выходных. Ни одно из этих тестовых заданий не принесло мне работы. В профайле можно найти ссылку на мой репозиторий, где они сейчас и находятся.
Ниже преведены пункты, которые больше всего наболели или были заметны:

1. Размеры заданий

Для frontend’a условия заданий практически всегда написать сайт с нуля, сверстать макет целого лендинга или поднять сервер на каком-то из фреймворков для работы с API. Технологии использовавшиеся в проектах могли быть начиная от HTML/CSS, до построения лендинга с сервером, препроцессорами и шаблонизаторами (Pug, Jade).
Больше 4-x заданий было сверстать лендинг, перенести его на Wordpress (с БД естественно) и сделать вывод данных через админку, что занимало порой полторы недели. Не понятно с чем связано, все тестовые требовались делаться на Angular’e, React и Vue нигде не присутствовали.

2. Проблемы с их выполнением и ответами от компаний.

В некоторых заданиях требовались технологии, которыми не пользовались сами программисты, вроде комбинации Grunt + Susy + Scss, где из-за глючености компиляция файлов занимала порой 15 секунд. Не может быть, чтобы этим пользовался кто-нибудь на реальных проектах. Задания в некоторых случаях даже не проверялись, однажды не было отвечено письмом на выполненое ТЗ, не говоря уже о фидбеке. Качество кода рассматривают в 1 случае из 5, важно количество использованых технологий и библиотек.

3. Как бороться

Панацея здесь одна: либо требовать оплату тестового, либо требовать собеседования. Как было сказано одним HR-ом — «процесс найма не подразумевает нарушение правил», с чем спорить сложно. Даже если предоставлены ссылки на предидущие работы, подробнейшее резюме со скиллами и показано портфолио, даже если заявить стоимость ТЗ в 10 гривен (реальный случай), вам откажут и с большой вероятностью в лице HR вы заработаете жирный минус. Ответ на такие заявления примерно одинаковый: «все делали и ты сделаешь, программистов ещё много» (тоже реальный случай). Откуда такая тяга к распостранению бесполезной работы — не известно.

4. Последствия

Самая гадкая часть — неюзабелность кода. Всё что он делает — это просто хранится в репозитории. Да, он просто занимает пространство и с вероятностью стремящейся к 100% не будет никогда использован. Потраченое зря время, целые дни. Такая затрата времени не стоит никакого фидбека, даже самого подробного от любого специалиста, так как он будет одноразовым. Никто вам не подскажет, как можно сделать лучше в технологическом плане. Да и фидбек фидбеку рознь, что можно сказать проверяющему, который советует помещать тег img в тег i.

Выводы

Любое задание, даже на 5 минуточек и на пол-денёчка ДО собеседования или без оплаты — показатель наплевательского отношения к кандидату. По факту, вам со старта предлагают работать в убыток себе. Тестовая работа показывает кандидата не как цельного работника, а как код-машину.
Вот как для меня выглядит выдача ТЗ кандидату не в сфере IT:
Кандидата просят выкопать колодец у себя во дворе и его возьмут работать копателем. Приедут — проверят. Если колодец не понравился, делай с ним что захочешь, мы найдём работника лучше. Что дальше делать с колодцем — не ясно. Во дворе может появиться 10 дырок. Никто не платит, инициатива принадлежит полность копателю. Где и в каких других сферах труда можно такое наблюдать — для меня останется загадкой. Максимум — бесплатная стажировка 3 дня, но уже на месте работы, а не дома за компьютером.

Всем только любви и добра.

LinkedIn

Лучшие комментарии пропустить

по опыту — 100% мест с обьемными тестовыми заданиями оказались жлобскими говно конторами ( по отзывам работавших и попытками запрплатных торгов ). Почти наверняка вы потратите свое время зря

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

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

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

Самое адекватное ТЗ, которое мне предлагалось сделать, было у одной довольно известной компании в Лондоне. Тебе дают один файл с одним классом на ~200 строк кода, который читает и пишет в CSV файл. Задача — написать для него код ревью и отрефакторить код. В этом классе нарушена практически каждая буква из SOLID, есть проблемы с CQS в интерфейсе, код не DRY и отсутствует какая бы то ни была обработка ошибок и покрытие тестами. Задание делается за полдня, но при этом дает возможность продемонстрировать теоретические знания через код ревью, которое ты напишешь и практические навыки написания надежного ООП кода.
Вот такое тестовое мне было приятно сделать и получить адекватный фидбек от людей с 20+ лет опыта в индустрии.
А за задания в стиле «а ну, замути нам iOS приложение на 2 экрана, которое будет скачивать картинки из твиттера и показывать в табличке» я сразу шлю на йух.

Недавно тоже проходил собеседование. Ну как собеседование, серию собеседований :). Первый так сказать контакт с Site менеджером случился 31 мая. Ему порекомендовал меня мой бывший коллега. Сайт менеджер позвонил, рассказал о том, что он набирает команду на израильский проет. Нужен Тим Лид. Проект очень успешный. R&D в Израиле. Миллионы инвестиций, рынок США и т.д. Работу не скал. Все хорошо на текущем проекте, но думаю: рекомендация, не первый день в деле, это будет легкая прогулка. Короче встретился с сайт менеджером, поговорили. Говорит: буду рекомендовать тебя дальше. Проходит время. Он снова звонит и говорит: «Дело такое, interview flow состоит из собеседования с talent acquisition manager, тестового задания, собеса о результатам тестового задания, ещё одно тестовое задание на architectural design, ещё одного собеседования по результатам уже этого задания, и если все ок — поездка на собеседование с биг босс в Израиль. Ну думаю звучит грустно, ну ладно отступать не буду. Корочки первое собеседование с talent acquisition manager. Ну думаю это ж наш HR. Это формальность. Оказывается не совсем. Начинает она всяком таком общем.э спрашивать. Да так с пристрастием. Мол а зачем тебе это вообще нужно. А что ты хочешь из себя представлять через Х лет. Ну и т.д. Вроде ничего такого, но так напористо довольно. Дальше тестовое задание. Говорят — это на часов 5. Делал я его наверное часов 10. Ну тут я наверное тормоз. Хотя хотелось все чтобы красиво было. Делал с душой. Выложил его на Heroku. Отослал. Через некоторое время собеседования с Senior-ом из Израиля. Поговорили, обсудили задание без каких-то более-менее глубоких технических вопросов. Дальше слледубщий этап — architectural design. Есть их приложение, нарисую схему что там где будет. Было жаркое время: новый кастомер, релизы, овертаймы. Ну думаю ничего, нарисую задизайню. Ночь после работы делаю. Отправлю. Говорят ок. Следующий этап — собес с R&D менеджером. Приятная женщина. Пообщались около часа. Ну я ухожу в отпуск на две недели. Прихожу из отпуска — назначают снова интервью с talent acquisition manager. Странно думаю, что это зачем снова? Вещь было уже. Ну ладно. Выхожу чтобы сделать звонок в коридор. Говорим опять о том почему я хочу работать именно у них. Потом она спрашивает как провёл отпуск. Говорю был с семьей под Одессой, отпуск отлично. Короче после этого собеседования, пишет мне Сайт менеджер и говорит что тобою эта HR не очень довольна, говорит ты не очень открытый человек :). Ну думаю ладно. Через неделю созвон с боссом. Поговорили. Через некоторое время дают ответ — не готовы рассматривать тебя на роль лида, потому что «недостаточно разговорчив». Но с технической точки зрения хороший фидбек и т.д. Будут рассматривать меня на роль синьера. С момента первого контакта прошло два с половиной месяца. Ну думаю что ж неприятно ну ладно. Проходит ещё какое-то время, израильтяне прилетают сюда. Сайт менеджер опять меня приглашает уже очно пообщаться. Прихожу. Опять эти люди, которые меня собеседовали. Опять о том о сём разговор. Короче через неделю две пингую сайт менеджера. Обещает дать ответ вот-вот. Наконец-то дают ответ: недостаточно опыта и лидерских качеств. С момента первого контакта прошло 3.5 месяца. Вот так. Никаких оценок ни себе ни компании не даю (ну разве что немного и неявно :) Просто история :)

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

грубо. а какая статья лучше из 3х, Богдан?

Недавно тоже проходил собеседование. Ну как собеседование, серию собеседований :). Первый так сказать контакт с Site менеджером случился 31 мая. Ему порекомендовал меня мой бывший коллега. Сайт менеджер позвонил, рассказал о том, что он набирает команду на израильский проет. Нужен Тим Лид. Проект очень успешный. R&D в Израиле. Миллионы инвестиций, рынок США и т.д. Работу не скал. Все хорошо на текущем проекте, но думаю: рекомендация, не первый день в деле, это будет легкая прогулка. Короче встретился с сайт менеджером, поговорили. Говорит: буду рекомендовать тебя дальше. Проходит время. Он снова звонит и говорит: «Дело такое, interview flow состоит из собеседования с talent acquisition manager, тестового задания, собеса о результатам тестового задания, ещё одно тестовое задание на architectural design, ещё одного собеседования по результатам уже этого задания, и если все ок — поездка на собеседование с биг босс в Израиль. Ну думаю звучит грустно, ну ладно отступать не буду. Корочки первое собеседование с talent acquisition manager. Ну думаю это ж наш HR. Это формальность. Оказывается не совсем. Начинает она всяком таком общем.э спрашивать. Да так с пристрастием. Мол а зачем тебе это вообще нужно. А что ты хочешь из себя представлять через Х лет. Ну и т.д. Вроде ничего такого, но так напористо довольно. Дальше тестовое задание. Говорят — это на часов 5. Делал я его наверное часов 10. Ну тут я наверное тормоз. Хотя хотелось все чтобы красиво было. Делал с душой. Выложил его на Heroku. Отослал. Через некоторое время собеседования с Senior-ом из Израиля. Поговорили, обсудили задание без каких-то более-менее глубоких технических вопросов. Дальше слледубщий этап — architectural design. Есть их приложение, нарисую схему что там где будет. Было жаркое время: новый кастомер, релизы, овертаймы. Ну думаю ничего, нарисую задизайню. Ночь после работы делаю. Отправлю. Говорят ок. Следующий этап — собес с R&D менеджером. Приятная женщина. Пообщались около часа. Ну я ухожу в отпуск на две недели. Прихожу из отпуска — назначают снова интервью с talent acquisition manager. Странно думаю, что это зачем снова? Вещь было уже. Ну ладно. Выхожу чтобы сделать звонок в коридор. Говорим опять о том почему я хочу работать именно у них. Потом она спрашивает как провёл отпуск. Говорю был с семьей под Одессой, отпуск отлично. Короче после этого собеседования, пишет мне Сайт менеджер и говорит что тобою эта HR не очень довольна, говорит ты не очень открытый человек :). Ну думаю ладно. Через неделю созвон с боссом. Поговорили. Через некоторое время дают ответ — не готовы рассматривать тебя на роль лида, потому что «недостаточно разговорчив». Но с технической точки зрения хороший фидбек и т.д. Будут рассматривать меня на роль синьера. С момента первого контакта прошло два с половиной месяца. Ну думаю что ж неприятно ну ладно. Проходит ещё какое-то время, израильтяне прилетают сюда. Сайт менеджер опять меня приглашает уже очно пообщаться. Прихожу. Опять эти люди, которые меня собеседовали. Опять о том о сём разговор. Короче через неделю две пингую сайт менеджера. Обещает дать ответ вот-вот. Наконец-то дают ответ: недостаточно опыта и лидерских качеств. С момента первого контакта прошло 3.5 месяца. Вот так. Никаких оценок ни себе ни компании не даю (ну разве что немного и неявно :) Просто история :)

з кєнтамиз Ізраеля в мене теж шото не ідьот....

Раньше сюда заходили израильтяне из бывших наших, которые рубят фишку, а сейчас потянулась волна сабров, которые все меряют своими специфическими мерками, которые им в ЦАХАЛе прививают. Ребята в целом умные, но крайне тяжелые.

Да, вот тоже приходит аналогия с ЦАХАЛ ))

У них вся школа менеджмента оттуда. За счастливыми исключениями советских и американских репатриантов.

Ребята в целом умные

угу угу это потому что строем ходят? ))

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

С момента первого контакта прошло 3.5 месяца. Вот так.

Однако, це вже мазохізм якийсь — стільки з ними возитись. Контора ж явно не Гугл.
P.S.
А якби таки після цього прислали оффер — ви б його прийняли ?

Так, можливо мазохізм. Але я не видатний якийсь вислувальник тож вирішив своє его приборкати та просто пройти весь шлях. Наприклад, як пробігти напівмарафон :)
Важко сказати, бо мені відмовили. Ми навіть не обговорювали ЗП. Якщо вона була б значно вищою за мою теперішню — можливо приянів.

я не видатний якийсь вислувальник

Кто-кто?

Вибачаюсь, вЕслувальник. Ну той, що гребе :)

Ми навіть не обговорювали ЗП

Это ошибка.

Это нормально ))

ЗЫ: в смысле это «просто реально нормально» и там когда «есть звоночки» следует автоматически перенастраиваться не на результат но на процесс.

ЗЫ: как то говориться «зато согрелись».

ЗЫ: это ты жаль ещё до торга за деньги не дошёл... ))

ЗЫ: это ты жаль ещё до торга за деньги не дошёл... ))

А вдруг он с Одессы?

Да, не дошёл. Я рассуждал таким образом, что раз не говорят о деньгах, значит денег у них — куры не клюют ))

И конечно же ж они спешат с вами поделиццо... ))

А от в мене проблем не було — аплаївся у дві Ізраїльські контори — отримав два офери без напрягів.

получила огромное удовольствие от тестового задания, когда искала работу. Оказалась самая интересная задача за последние пару лет =)

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

любые тестовые задания только на он-сайт интервью, все эти задания на дом от лукавого )

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

Мне нравятся тестовые задания.
Точнее, понравились. Хотя до этого, я их ненавидел. Люто.

Но, после 80-го задания, начал рассматривать их как тренировки.
Начиная от анализа задания и завершая способом реализации.
Сплошное веселье.

Улыбаться с постановки задачи? Или серьезно делать.
Делать полное TDD? Или копировать, как проклятый?
Взять вон те библиотечки? Или собрать свой велосипед?
База главная? Или чистая архи...
Тренировка, одним словом.

Негативное восприятие тестовых заданий, оно из-за другого =) хе-хе.

А так: качки качаются, спецназ спецназит,
а программисты программируют ;).

А время где взять на все это?

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

Самое адекватное ТЗ, которое мне предлагалось сделать, было у одной довольно известной компании в Лондоне. Тебе дают один файл с одним классом на ~200 строк кода, который читает и пишет в CSV файл. Задача — написать для него код ревью и отрефакторить код. В этом классе нарушена практически каждая буква из SOLID, есть проблемы с CQS в интерфейсе, код не DRY и отсутствует какая бы то ни была обработка ошибок и покрытие тестами. Задание делается за полдня, но при этом дает возможность продемонстрировать теоретические знания через код ревью, которое ты напишешь и практические навыки написания надежного ООП кода.
Вот такое тестовое мне было приятно сделать и получить адекватный фидбек от людей с 20+ лет опыта в индустрии.
А за задания в стиле «а ну, замути нам iOS приложение на 2 экрана, которое будет скачивать картинки из твиттера и показывать в табличке» я сразу шлю на йух.

А не секрет, какая была позиция?)

Senior iOS Developer

ИМХО

практические навыки написания надежного ООП кода.

Барьер между миддлом и джуниором, и является скорее фулпруфом для компании, чем реальным способом выявить Senior’а. Если это тестовое не подразумевало следующий этап в виде тех. собеседования, мне бы тоже такое тестовое понравилось, конечно). Но показывает ли оно нужный уровень — я бы сказал, совсем нет. С другой стороны, если после него тех. собеседование всё-таки было, то подобное тестовое можно было просто не давать.

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

После ТЗ было примерно 2-х часовое интервью по System Design, которое и должно

выявить Senior’а

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

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

Но и обычным тестовым (по крайней мере, как мы его привыкли понимать), я бы его не назвал в таком случае)

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

А за задания в стиле «а ну, замути нам iOS приложение на 2 экрана, которое будет скачивать картинки из твиттера и показывать в табличке» я сразу шлю на йух.

Есть такая компания на рынке, что дает такое задание.
Дайте угадаю, на Т начинается?

В смысле, задание с твиттером на 2 экрана? Это я к примеру сказал. Именно такого задания я не получал, но было много вариаций на тему «скачай что-то из инета и покажи красиво на экране».

Вы как пальцем в небо.
Такое тестовое задание есть, от одной компании с офисом в Киеве и не только.

Такое тестовое задание есть, от одной компании с офисом в Киеве и не только.

Ну, я вообще не удивлен=) дурные идеи — они как зараза

Нет, не на Т.
Не Тенет и не Террасофт.

Самое адекватное ТЗ ... тестовое ... делается за полдня

Спорное сочетание.

А ты в любом случае потратишь много свободного времени, чтобы попасть в хорошую западную компанию.
По факту, у тебя будет несколько опций:
1) Потратить 4+ часа на ТЗ дома. Я, как раз, привел пример ТЗ, которое действительно занимает немного времени и которое, в целом, приятно сделать.
2) Потратить 1-2 часа на live-кодинг в офисе. Возможно на доске. Меньше времени, но гораздо больше стресса и шансов провалиться.
3) Потратить 100+ часов на опен сорс в надежде, что он заменит ТЗ и live-кодинг.
После этого этапа пойдут многочасовые интервью. Опять таки, в свободное время.

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

хорошую западную компанию.

Емейзон, Гугль, МС, Эппл, Інтель, Ерікзон, Зіменз...?

Как вариант. Ну или нишевой лидер типа букинг, спотифай, аирбнб и т.д.

Чтобы ответить на этот вопрос, надо бы сперва очертить контекст. С чем сравниваем?

ні з чим,
питання в чому сакральний зміст:

потратишь много свободного времени, чтобы попасть в хорошую западную компанию.
По факту, у тебя будет несколько опций:
1) Потратить 4+ часа на ТЗ дома. Я, как раз, привел пример ТЗ, которое действительно занимает немного времени и которое, в целом, приятно сделать.
2) Потратить 1-2 часа на live-кодинг в офисе. Возможно на доске. Меньше времени, но гораздо больше стресса и шансов провалиться.
3) Потратить 100+ часов на опен сорс в надежде, что он заменит ТЗ и live-кодинг.
После этого этапа пойдут многочасовые интервью. Опять таки, в свободное время.
питання в чому сакральний зміст:

я бы мог ответить, что он в том, чтобы

попасть в хорошую западную компанию

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

Ні не так, а:
«для чого проходити 7 кіл пекла спевбесід, щоб попасти в якийсь букінг ком. Невже лише для того, щоб виїхати з Украшки і попасти в який умовний Вудж?»

Я понял тебя.
Но мой поинт был вообще не про релокацию. А про трудоустройство в хорошую западную компанию. В каком формате — это уже личное дело каждого. Вариантов немало: удаленка по долгосрочному контракту, стабильный фриланс и консалтинг, работа в локальном девцентре, ну и, наконец, релокация.
Зачем это все нужно? Чтобы получать $6-8k-10к+ и работать над продуктами, которыми реально кто-то пользуется в составе сильной инженерной команды.
На DOU, я тебе гарантирую, есть сотни людей, которые это сделали. И все они, в свое время, прошли 7 кругов ада в том или ином виде.
Понятное дело, что ребятам, которым ОК сидеть на 3к где-нибудь в киевском епаме до горбатой старости, нет смысла вообще париться о таких вещах. И я ни в коем случае никого ни к чему не призываю и не пропагандирую какой-то карьерный роадмап. Мой изначальный комментарий был про пример хорошего ТЗ, приемлимого для хорошей западной компании, вот и все.

Чтобы получать $6-8k-10к+ и работать над продуктами, которыми реально кто-то пользуется в составе сильной инженерной команды.
На DOU, я тебе гарантирую, есть сотни людей, которые это сделали. И все они, в свое время, прошли 7 кругов ада в том или ином виде.
Понятное дело, что ребятам, которым ОК сидеть на 3к где-нибудь в киевском епаме до горбатой старости нет смысла вообще париться о таких вещах.

і там і там робота на галері,
для життя вистачає 500 ...1000 у.е.,
в чім різниця, в розмірі з.п.?

Сорян, конечно, но это уже какие-то трешовые вопросы. В первом же моем предложении, которое ты процитировал указаны аргументы помимо зп. Их, естесственно может быть гораздо больше, особенно если начать сравнивать конкретные компании и продукты. Но если ты хочешь развести срач на тему «там vs тут», то я не стану в этом учавствовать. Как я уже говорил, я никого ни к чему не призываю и не пропагандирую. Формошлепство на галере за 3к — это самый адекватный вариант для 95% разработчиков, не требующий никах ТЗ и кругов ада.

тема не «там вс. тут», а тема (як в рекламі прального порошка) напрягатися (платити) більше, якщо є простіший варіант телефонного\скайп інтерв"ю, і працювати будеш знову ж на всесвітньо відомий бренд, без 7ми кругів співбесід?
І, навіть при приході 2х однакових оферів, для мене, більше шансів матиме офер із меншою кількістю рухів.

. Формошлепство на галере за 3к — это самый адекватный вариант для 95% разработчиков,

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

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

И много ли топовых мировых компаний, которым достаточно интервью по скайпу, чтобы нанять инженера? Тем более на удаленку.
Я, к сожалению, не встречал ни одной такой. Ну, то есть, вообще ни одной. Но я не исключаю, что мой опыт может быть не таким, как у большинства. Может, все вокруг настолько крутые и с такой громкой репутацией, что им достаточно интервью по скайпу и только одного меня гоняют всякими ТЗ, лайв-кодингом, системный дизайном и тд ¯\_(ツ)_/¯

Все написано правильно і правидиво.
Причитайте цю статтю уважно.
Зекономите багато часу, якщо скористаєтесь цим чужим досвідом.

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

по опыту — 100% мест с обьемными тестовыми заданиями оказались жлобскими говно конторами ( по отзывам работавших и попытками запрплатных торгов ). Почти наверняка вы потратите свое время зря

Сподобалось ось це тестове завдання github.com/hirdbluebird/Intetics

Задание действительно интересное :).
Правда ваше решение, похоже, содержит ошибку — число 99429 не является простым.

Моє рішеня:

Palindrome: 999949999
Prime number left: 33211
Prime number right: 30109
Duration: 9206 ms
30 хвилин на рішення та 15-20 зробити красиво
(function () {
    class Result {
        constructor(palindrome, left, right) {
            this.palindrome = palindrome;
            this.left = left;
            this.right = right;
        }
    }

    function getPrimeNumbers(from, to) {
        // start from zero, so + 1
        const size = to + 1;

        const variants = new Array(size).fill(true);

        const limit = Math.ceil(Math.sqrt(to));

        for (let i = 2; i < limit; i++) {
            if (variants[i]) {
                for (let j = i * i; j < size; j += i) {
                    variants[j] = false;
                }
            }
        }

        const result = [];
        for (let i = from; i < size; i++) {
            if (variants[i]) {
                result.push(i);
            }
        }
        return result;
    }

    function isPalindrome(value) {
        const digits = [];

        while (value > 0) {
            const digit = value % 10;

            digits.push(digit);

            value = (value - digit) / 10;
        }

        const size = digits.length;
        const limit = size / 2;

        for (let i = 0; i < limit; i++) {
            if (digits[i] !== digits[size - 1 - i]) {
                return false;
            }
        }

        return true;
    }

    function max(sources) {
        let result = sources[0];

        const length = sources.length;

        for (let i = 1; i < length; i++) {
            if (sources[i].palindrome > result.palindrome) {
                result = sources[i];
            }
        }

        return result;
    }

    function findResult() {
        const numbers = getPrimeNumbers(10000, 99999);
        const size = numbers.length;

        const results = [];

        for (let i = size - 1; i > -1; i--) {
            for (let j = i; j > -1; j--) {
                const left = numbers[i];
                const right = numbers[j];
                const palindrome = left * right;

                if (isPalindrome(palindrome)) {
                    results.push(new Result(palindrome, left, right));
                }
            }
        }

        if (results.length > 0) {
            return max(results);
        }

        return new Result(0, 0, 0);
    }

    const startTime = Date.now();
    const result = findResult();
    const endTime = Date.now();

    document.getElementById("js-palindrome").innerHTML = result.palindrome.toString();
    document.getElementById("js-prime-number-left").innerHTML = result.left.toString();
    document.getElementById("js-prime-number-right").innerHTML = result.right.toString();
    document.getElementById("js-duration").innerHTML = (endTime - startTime).toString();
})();

Мои глаза. выложил бы на gist что ли.

if (isPalindrome(palindrome))

Це якийсь оксюморон. Судячи з назви, змінна palindrome мала б з народження належати до великого роду паліндромів, а наразі вона відчуває приниження на кожній ітераціі.

const results = [];

Гадаю, тут можна було б обійтися звичайною змінною. Ні, серйозно, навіщо пхати усі проміжні результати до масиву, коли можна просто порівнювати кожен новий результат з максимальним і оновлювати останній за потреби.

Згоден, оновив раніше в себе в репозиторії, та перше рішення в коментарях залишив без змін. Найшвидший поки алгоритм ось dou.ua/...​rums/topic/25122/#1424131

99429
99429 % 3 == 0;
99429 % 11 == 0;
99429 % 23 == 0;
99429 % 131 == 0;
Хотів перевірити, моє рішення теж в коментарях.

А друге завдання на 8 годин як Вам?

Додай посилання будь-ласка, зрозумію яке саме

Ага, це той самий чувак і ті самі коментарі — https://******.it/2018/04/15/testing-task-time-waste/ До речі, моє рішення за 3.5с pastebin.com/6mNqNPL9 JS не знаю.

Круто, знайшов своє упущення, виправив, в себе робив перевірку на паліндром завжди, а в твоєму рішенні спершу перевірка чи більше вже існуючого рішення

    if (product > biggestPalindrome && isPalindrome(product)) {
        ...
    }

~0.25 сек. :)

То мабуть не на JS. Якщо на JS, то цікаво побачити.

Не JS. Но опыт реализации одного и того же решения на компилируемых и интерпретируемых языках (в частности, Delphi и VBA) подсказывает, что на сегодняшний день разница в быстродействии не превышает два раза — как правило, это коэффициент до ~1,2. Встречал даже отсутствие разницы в быстродействии!
С другой стороны, чтобы не привязываться ко времени, можно попытаться оценить количество исполнений самого глубокого цикла в решении. В моем варианте для этой задачи их 342020.

Є одна очевидна оптимізація, 10-значні паліндроми всі діляться на 11 (загальновідома ознака подільності на 11), тому велику частину пар простих чисел між 10К і 100К можна зразу відкинути (такі пари простих чисел, добуток яких буде більшим за 10^9)..... Такий розв’язок я відправляв в Intetics (працює десь 50мс)

А якщо ще й змінити підхід (але це вже спало на думку після того як отримав резульльтат першим способом, базуючись на тому, що відповідь це майже найбільший 9-значний паліндром): не розглядати пари простих чисел, а перевіряти всі паліндроми в порядку спадання починаючи з 999999999 на те чи вони є добутком двох простих 5-значних чисел, то такий розв’язок працюватиме ~ 1 мс

10-значні паліндроми всі діляться на 11

Швидше навіть всі паліндроми з парною кількістю цифр мають ділитися на 11

Ну зрозуміло, але добутком двох 5-значних простих чисел можуть бути лише 10- і 9-значні, тому в контексті даної задачі це немає значення

Идея абсолютно работоспособна :)
Вот что получилось в результате:

Test started
Test finished
Count of iteration: 12892
Found: 1
Time: 00:00:00.000

ЗЫ: Как-то даже очень быстро для такой красивой задачи

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

ЗЫ: с учетом комментариев по поводу десятизначных палиндромов by Ihor Iaromenko результат можно еще улучшить. :)

С учетом замечания Ihor Iaromenko количество внутренних циклов снизилось до 18991, а время — до 0,17 сек.

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

Це погане припущення. Щоб його використовувати треба, по перше, довести, що воно є серед таких чисел, а по друге, що воно має максимально можливу кількість цифр.

з кількістю цифр особливих проблем не бачу — результат добутку буде 9- чи 10-значним. Про 10-значні однозначно з,ясували, що паліндроми діляться на 11, тобто не наш варіант. Відповідно, залишаються 9-значні. Виберемо найбільше з них — 999999999. Наступними меншими з них будут такі, які змінюються в бік зменшення з середини — 9999899999, 999979999... 999XYX999... 99ZXYXZ99... 9VZXYXZV9...
Стосовно цифр по краях числа. Наші прості закінчуються на (1, 3, 7, 9). Подивимося на останні цифри, котрі вони можуть давати:
1 * 1 = 1
1 * 3 = 3
1 * 7 = 7
1 * 9 = 9
3 * 3 = 9
---
3 * 7 = 21
3 * 9 = 27
7 * 7 = 49
7 * 9 = 63
9 * 9 = 81
Комбінації з перенесенням значення в 10-й знак нам не підходять.
Залишаються
1 * 1 = 1
1 * 3 = 3
1 * 7 = 7
1 * 9 = 9
3 * 3 = 9
Тобто, серед чисел виду 9VZXYXZV9 має бути таке, котре утворене добутком двох простих п,ятизначних чисел. Тобто слід брати такі, які дають 9 на початку і 9 на кінці, а це лише ті за наших простих, котрі починаються на 1, 3, 9.
Профіт :)

Тобто, серед чисел виду 9VZXYXZV9 має бути таке, котре утворене добутком двох простих п,ятизначних чисел

Читер :) Сначала неплохо бы доказать, что для любого натурального r существует пара простых r-разрядных чисел a <> b таких, что поизведение a*b является (2*r-1) разрядным палиндром с девятками в старшем и младшем разрядах... Ну или хотя-бы доказать это для r=5. Сейчас ваша оптимизация строится вокруг того, что вы просто уже знаете правильное решение...

Ну... можно поработать в этом направлении :) (за строгими доказательствами это к более высоколобым нежели я товарищам)
Четное число цифр в результате не рассматриваем, так как известно, что такое делится на 11
989 = 23 * 43
99899 = 283 * 353
9975799 = 3061 * 3259
999949999 = то, что нам и требовалось найти :)

а можна детальніше Ваші міркування про початок простих чисел? чому першими цифрами не можуть бути, наприклад, 2 і 4, які в добутку дають 8 і, скажімо, ще 1-чка приходить з попереднього розряду, що дає потрібне 9?
UPD:
Щойно помітив Ваші приклади внизу

989 = 23 * 43
99899 = 283 * 353

Якраз в точності така ситуація. У Ваших міркуваннях ніде не фігурує, що кількість цифр точно 5, а значить вони мали б бути вірними і для цих випадків. Або я не дуже розумію, з якого кінця у простого числа «початок», або правий пан Strukov

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

Мої міркування виходять з того, що в данному контексті результатом розглядаються числа паліндроми. І всі міркування щодо початкової і кінцевої цифр стосуються лише їх. До речі, пан Strukov правий, що у мене немає коректного доведення гіпотези про те, що існує паліндром виду 9.....9 (з непарною кількістю цифр), що є добутком двох простих r-розрядних чисел (де r = n div 2 + 1). Але наведені приклади (знизу до факту рішення проблеми) дають мені право вважати, що таке припущення коректне (і конкретно для мене цього досить).

PS: після вчорашньої апробації ідеї Ihor Iaromenko щодо перевірки зверху тільки чисел паліндромів і знаходження першого з них, що відповідає умові, обговорення рішення, котре потребує більше ресурсів вже не виглядає таким цікавим.

Може я трохи плутано пояснив, але мене цікавить зовсім інше. Якщо дозволите, я зроблю спробу номер два :)

у мене немає коректного доведення гіпотези про те, що існує паліндром виду 9.....9 (з непарною кількістю цифр), що є добутком двох простих r-розрядних чисел (де r = n div 2 + 1).

Це мене не цікавить — якщо Ви якось провели міркування для першої і останньої 9-ток, то так само зможете їх протягнути і для інших цифр (їх там небагато лишається) і сказати, що якщо алгоритму з 9-тками не щастить, то він пробує в порядку спадання менші.

в данному контексті результатом розглядаються числа паліндроми. І всі міркування щодо початкової і кінцевої цифр стосуються лише їх.

А тут я не дуже розумію, Ви вище самі написали

слід брати такі, які дають 9 на початку і 9 на кінці, а це лише ті за наших простих, котрі починаються на 1, 3, 9.

(виділення моє) І останнє твердження мені хотілось би розібрати детальніше, бо воно мене зацікавило. Мене цікавить не перша цифра паліндрому, мене цікавить перша цифра простого числа. Я ж так розумію, що Ви залишили з усіх простих чисел лише ті,

котрі починаються на 1, 3, 9.

Ще й, мабуть, не всі добутки між ними розглядали. А це дуже сильне обмеження, що власне і дає весь приріст. І тут я не розумію: чому числа

які дають 9 на початку і 9 на кінці, а це лише ті за наших простих, котрі починаються на 1, 3, 9.

Я не бачу причини, чому добуток простих чисел, які містять на початку щось інше, а не 1,3,9 не може при добутку давати 9 на початку і 9 в кінці. Оцей перехід мене цікавить. Чому «які дають 9 на початку і 9 на кінці» = «ті за наших простих, котрі починаються на 1, 3, 9». Оцей останній знак рівності мені хотілось би зрозуміти і більш детально дізнатися Ваші міркування, що привели до такого висновку.
UPD.
Є приклад (і таких ще багато)
47059 * 20021 = 942168239
Обидва прості, починаються аж ніяк не з 1,3,9, а добуток містить дев’ятки і на початку і в кінці

Я виходив з того, що внаслідок перенесення в старший розряд та позиція, яка заповнилася б без переносу буде містити значення менше за 9.
Повторюся, що побудова паліндромів з перевіркою «згори» на розкладення в два простих п,ятизначних множника значно випереджає за часом всі реалізовані мною варіанти з обрізанням варіантів зменшення числа кандидатів.

Golang ~ 1.1 секунди, тому теж цікаво, що за рішення

Тестили то же решение, что выше в ветке, только переписанное на го?

Так, подивився рішення від De Money, об’єднав зі своїм та переписав на Go

import (
	"fmt"
	"math"
	"time"
)

type result struct {
	palindrome int
	left       int
	right      int
}

func main() {
	startTime := time.Now().UnixNano()
	result := findResult()
	endTime := time.Now().UnixNano()

	fmt.Printf("Palindrome: %d, prime numbers %d %d, duration: %d\n", result.palindrome, result.left, result.right, endTime-startTime)
}

func findResult() result {
	numbers := getPrimeNumbers(10000, 99999)

	size := len(numbers)
	current := result{}

	for i := 0; i < size; i++ {
		for j := i + 1; j < size; j++ {
			left := numbers[i]
			right := numbers[j]
			palindrome := left * right
			if palindrome > current.palindrome && isPalindrome(palindrome) {
				current = result{palindrome, left, right}
			}
		}
	}

	return current
}

func getPrimeNumbers(from, to int) []int {
	size := to + 1

	variants := make([]bool, size)

	for i := 0; i < size; i++ {
		variants[i] = true
	}

	limit := int(math.Ceil(math.Sqrt(float64(to))))

	for i := 2; i < limit; i++ {
		if variants[i] {
			for j := i * i; j < size; j += i {
				variants[j] = false
			}
		}
	}

	result := make([]int, 0)
	for i := from; i < size; i++ {
		if variants[i] {
			result = append(result, i)
		}
	}

	return result
}

func isPalindrome(value int) bool {
	digits := make([]int, 0, 11)

	for value > 0 {
		digits = append(digits, value%10)

		value /= 10
	}

	length := len(digits)
	limit := length >> 1
	right := length - 1

	for j := 0; j < limit; j++ {
		if digits[j] != digits[right-j] {
			return false
		}
	}

	return true
}

Ну тут можно кое-что еще оптимизировать:
* выше был годный хинт что не нужно вообще проверять десятиразрядные произведения
* проверять число на палиндром можно без выделения доп памяти (как следствие меньше работы для gc)
* в findResult внутренние циклы можно считать в отдельных горутинах параллельно

Как-то так в первом приближении pastebin.com/Lwx8JNX7
Результаты по времени скачут в силу многопоточности вычисления, лучшее время на моем железе порядка 25мс, среднее на уровне 60мс. Но я в идиоматичный го не умею есличё, поэтому очень возможно что можно посчитать еще быстрее (и уж точно покрасивше :))...

Після оптимізацій з пропуском десятирозрядних чисел Golang ~ 23 ms pastebin.com/k0vkhqDf
JavaScript ~ 150 ms pastebin.com/4LNhgxw7

Перевірив твоє рішення в мене на машині (меньш потужна), то найкращий час ~ 45 ms, а в основному від 100 до 300.

Ага, но если добавить один «потерянный» return в мое решение (findPalindromeProducts должна останавливаться после первого же найденного палиндрома, так как последующие будут априори меньше) + «заменить» канал на мьютекс то лучшее время падает до ~10 мс :)

Пітон 2.7

[33211, 30109, 999949999]
--- 1.53649377823 seconds ---

Будемо робити організацію на GitHub по рішеню тестових завдань?) Або хоч цією задачі різними мовами

Для такої доброї справи готовий поділитись говнокодом власного приготування :)

from math import *

def search_primes(num_range, div_range, proc_prime):
        for num in num_range:
            for div in div_range(num):
                if num % div == 0:
                    break
            else:
                proc_prime(num)

def get_five_digit_primes():
    primes_buffer = [2] # primes up to 1000
    search_primes(xrange(3,1000,2), lambda n: xrange(3,int(sqrt(n)),2),\
                  lambda n: primes_buffer.append(n))
    five_digit_primes = {1:[], 3:[], 7:[], 9:[]} # classified by last digit
    search_primes(xrange(10**4+1,10**5,2), lambda n: primes_buffer,\
                  lambda n: five_digit_primes[n % 10].append(n))
    return five_digit_primes

from bisect import bisect_left, bisect_right

def min_max_idxs(lst, min_n, max_n):
    idx_min = bisect_left(lst, min_n)
    if not idx_min:
        return 0, 0
    idx_min -= 1
    idx_max = bisect_right(lst,max_n)
    if idx_max >= len(lst):
        return 0, 0
    return idx_min, idx_max

def get_candidates(pr_5d):
    candidates = []
    for last_digit_x in [1,3,7,9]:
        for x in pr_5d[last_digit_x]:
            for last_digit_y in [1,3,7,9]:
                last_digit_product = (last_digit_x * last_digit_y) % 10
                min_pal = last_digit_product * (10**8+1)
                max_pal = min_pal + (10**8-10)
                idx_min, idx_max =\
                    min_max_idxs(pr_5d[last_digit_y],min_pal/x,max_pal/x+1)
                if not idx_min or not idx_max:
                    continue
                for y in pr_5d[last_digit_y][idx_min:idx_max+1]:
                    candidates.append([x, y, x*y])
    return candidates

def is_9dig_palindrome(n):
    digits = [(n / 10**idx) % 10 for idx in xrange(0,9)]
    for idx in xrange(0,4):
        if digits[idx] != digits[8-idx]:
            return False
    return True


import time
start_time = time.time()

five_digit_primes = get_five_digit_primes()
candidates = get_candidates(five_digit_primes)

max_paly = [0, 0, 0]
for candidate in candidates:
    if (candidate[2] > max_paly[2]) and is_9dig_palindrome(candidate[2]):
        max_paly = candidate
print max_paly

print("--- %s seconds ---" % (time.time() - start_time))

Теж спробував Python рішення pastebin.com/YHHBLsd8 ~ 1.15 seconds, і спробував твоє ~ 1.11 seconds

м-да, щось мені не сильно допомогло розбиття по цифрах і обмеження рейнджів :)

Якщо трохи посипати достроковими виходами останню функцію і там же провіряти на паліндромність, то рази в 3 можна діло поправити

def get_candidates(pr_5d):
    candidates = [0, 0, 0]
    max_digit = 0
    for last_digit_x in [1,3,7,9]:
        for last_digit_y in [1,3,7,9]:
            last_digit_product = (last_digit_x * last_digit_y) % 10
            if max_digit > last_digit_product:
                break
            min_pal = last_digit_product * (10**8+1)
            max_pal = min_pal + (10**8-10)
            for x in pr_5d[last_digit_x]:
                idx_min, idx_max =\
                    min_max_idxs(pr_5d[last_digit_y],min_pal/x,max_pal/x+1)
                if not idx_min or not idx_max:
                    continue
                for y in pr_5d[last_digit_y][idx_min:idx_max+1]:
                    if x*y > candidates[2] and is_9dig_palindrome(x*y):
                        candidates = [x, y, x*y]
                        max_digit = last_digit_product
                        break
    return candidates


import time
start_time = time.time()

five_digit_primes = get_five_digit_primes()
candidates = get_candidates(five_digit_primes)
print candidates

print("--- %s seconds ---" % (time.time() - start_time))
Решта коду як було. Вихлоп
[33211, 30109, 999949999]
--- 0.513112068176 seconds ---
А було 1.53

Интересно насколько увеличится производительность если вычисления распараллелить на GPU (с помощью WebGL/Metal/OpenCL/CUDA).

П’ятизначне число можна закодувати в колір пікселя та втулити на текстуру. Прості числа можна шукати пачками. Результат множення теж. Пошук паліндрома можна взагалі графічно вирішити. Береш число, кожному регістру привласнюєш колір, малюєш текстурку, робиш копію, яку відзеркалюєш та складаєш з оригіналом через difference. Перша чорна строка — необхідне число. Числа краще обробляти пачками, текстура буде 9xN або 10xN.

П’ятизначне число можна закодувати в колір пікселя та втулити на текстуру.

Шо за варварство!? Есть же специальные форматы для этого!

P.S. Когда цвет текселя из текстуры переведут во float — назад можно конвертнуть не всё.

Лишнее время надо будет потратить на конвертацию uint в vec3 (r, g, b). Да и не удобно в этом случае будет работать с векторными типами.

Цю тему треба розвивати бо дуже цікаво як буде виглядати на WebGL :)

Вот же ж нытиков развелось )
Не хочешь учить алгоритмы, структур данных, системный дизайн и работать в топах? Иди и делай тестовые на 5 дней, веслай на галере, будь материалом для одного известного сайта. Не хочешь — не делай и ищи удачи в зоопарке продуктовых контор где все собесы субьективные и друг на друга не похожие — в чем проблема?
Все хотят ничего не делать, кучу денег и чтобы таски интересные и менеджер хороший.

P.S. Если ты оцениваешь тестовое задание в 3 рабочих дня и все-таки соглашаешься его делать — делай и не ной, а иначе в чем прикол?

Та пройдет время и тебе тоже самое скажут

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

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

Картина выглядит где-то так:
1) Полдня (по факту это весь рабочий день) на приеме поработайте, понравится, возьмем на работу, ну а нет, так нет.
2) Вам бы еще подучится 3-4 месяца будете работать под присмотром профессора в сб, понравится, возьмем на работу, ну а нет, так нет.

Фантазировать конечно хорошо, а по факту имеем:
1) Никто такого не сделает. Врач каждый день сталкивается с серьезными случаями, особенно, которые работают в больницах. Инфаркты, травмы я уже не говорю про совсем тяжелые случаи и взять человека типа теста, проверить как он работает, на пол дня или день? А если потом пациент притензию предъявит, типа лечил неизвестно кто. Предложите какому-нибудь главрачу так сделать.
2) И в других профессиях такого нет. Инженер-механик не разрабатывает маленький механизм на пробу, архитектор не проектирует коттеджик, чтобы показать свое умение, инженер-строитель не делает детскую площадку перед домом для тестирования профпригодности.
Да, там есть свои способы определения, но они как то обходятся без тестовых заданий и не плохо обходятся.
А тут многие ратуют еще за бесплатное тестирование, типа ну и что, что я потратил день-два на тест, зато опыта набрался:)

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

В порно без тестового задания собеседования на чёрном диване на работу не возьмут %)

мы все немного «терпилы».

Нужно по капле выдавливать из себя раба. Я вот выдавил

Фантазировать конечно хорошо

Вам виднее. Если че, я описал 2 реальных случая найма врачей с 5-10 лет ОР после универа.

Инфаркты, травмы я уже не говорю про совсем тяжелые случаи

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

А что вы передергиваете,

Выйдите из мира своих фантазий. Инфаркты и травмы лечат разные врачи

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

Какое это имеет отношение к нашему разговру про тестирование при приеме на работу для различных профессий, в данном случае врачей?

Большое: если б вы не углублялись в свои фантазии, то смогли бы дочитать до конца абзаца:

Проблема с аналогиями в том что их очень трудно подобрать.

Вы придумали некорректную аналогию и на основании этого пытаетесь доказать свою правоту (или скорее просто заресоваться «ох как я пошутил»).

у меня сестра и мать врачи. Нету такого, нету.

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

Вот вам еще ужас из-за поребрика: человек идет на 18:00 пообщатся с завотделения. Через 10 мин привозят солдатика с поломаной ногой и зав отделение предлагает человеку сделать операцию (какую-то там спицу вставить в кость) со словами «Посмотрим чего вы научились работая с <какой-то известный у них врач>».

И в других профессиях нету:)

А теперь про джунов: знакомый после КИСИ делал чертеж(и) гаража/бытовки для загородного дома в качестве тестового.
И про не джунов: дядьку 50 лет просили «на собеседовании» поднять поддон с кирпичами краном.

ДЗ в ИТ — это та же история про желание проверить практические навыки не умея проверять и доверять. Просто в ИТ есть техническая возможность сделать это дома, у крановщиков такой возможности нет.

Лично мое мнение, суть не в этом. А в том, что сейчас в IT так много претендентов на вакантные места, что компании что только не придумывают, что бы как то отсеять неугодных. И если дело так пойдет и дальше, то еще что-нибудь выдумают. Например, спросят тебя, а ты в волейбол играешь, нет? Ну а что ж ты, у нас тут команда, в городских соревнованиях выигрывает. Кстати реальный случай, я лично видел, за поребриком.
А было бы претендентов на вакантное место не 10-20, а два-три, как у тех же врачей, то и экзамены никто бы не устраивал

Лично мое мнение, суть не в этом. А в том, что сейчас в IT так много претендентов на вакантные места

Интересное мнение. Наверное поэтому любому джависту с 5+ лет ОР выносят мозг стада фриланс-рекрутеров. А почему по вашему мнению не дают ДЗ «джуниор КуА», которых куда больше чем синьоров девелоперов?
И отсев происходит не за счет того что кто-то сделал ДЗ хуже, а за счет того что кандидаты отказываются от вакансий с ДЗ.

А было бы претендентов на вакантное место не 10-20, а два-три, как у тех же врачей, то и экзамены никто бы не устраивал

Вы у мамы с сестрой поспрашивайте таки как принимается решение о приеме на работу врача. Суть в том что врачи чаще всего __меняют__ работу по знакомству/рекомендации.

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

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

Да, есть такой фильтр на дартаньяна-говнокодера который рассказывает про то какой он синиор с 20 лет опыта (реальный пример). В итоге он на выполнение тз неделю тратит. Думаем, обычно люди тратят пару часов, ну ладно, всякое бывает: семья там или другие обстоятельства. Но и результат выглядит так, как будто этот код действительно 20 лет назад писали в школе... А вы предлагаете на таких тратить время на личное собеседование? Удачи :)
А если после выполнения

20 тестовых заданий

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

Да, есть такой фильтр на дартаньяна-говнокодера который рассказывает про то какой он синиор с 20 лет опыта (реальный пример).

А на собеседовании вы не замечали что он отвечает расплывчасто заучеными фразами, не может привести контрпримеры к вашим утверждениям и тд?

Замечал часто ситуацию, когда на чётко поставленный вопрос человек не может ответить, но пытается какую-то чушь молоть, типа «авось прокатит»... Лучше сказал бы честно, не знаю / не сталкивался / не помню, не проблема, никто ведь всего не знает и не помнит.... Но чаще такие отсеиваются тестовым заданием ещё до собеседования)

Но чаще такие отсеиваются тестовым заданием ещё до собеседования)

Пссс, скажу по секрету на ДЗ не только __такие__ отсеиваются.

Да-да, еще отсеиваются «гении» у которых гитхаб пустой, но они считают, что достойны тайтла Синиор Бох просто за выслугу лет))))

У меня пустой гитхаб, и я Синьор Бог, не все кодят в опен сорс

Это точно. Иначе бы вас заметили уже в Амазоне и наняли. и вы бы перестали тратить свое время, сидя на доу

Я не прошел интервю в амазоне ибо неквалифицированный индус меня собеседовал.

Кроме того Амазон никого не замечает если ты сам не попросишь собеседование

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

Между прочим, у нас уже автокефалия на носу, и тайтлы Синиор Бох верифицируются по месту жительства, а не в этих ваших безбожных Швециях)).

По теме.
Тестовое — смотря какое. В целом, отношусь вполне нормально, т.к. я их выполнял всего два. Оба были вполне адекватными форме сотрудничества (я бы просил +/- то же самое), а фидбек дали менее чем за сутки (на менее объёмное — сразу позитивный и предложили финальное собеседование с заказчиком, от которого я отказался, т.к. был вариант получше; на более объёмное — оффер после разбора полётов). Как правильно здесь написали, у всех есть выбор, и если взялись делать, то какой смысл потом жаловаться? Если бы мне тестовое не понравилось, я бы его не делал, и всё...

Про github: я выбираю работу, где вектор развития совпадает в целом с моим личным (иначе зачем такая работа?), поэтому вне рабочего времени я развиваюсь в смежных вещах, и кодить в оупенсорс нет времени. Можно, конечно, рассказывать, что «вам, значит, это неинтересно», но можно и сказать, что задродство в негативном его понимании — тоже не ахти какой плюс. По-хорошему, если такие решения используются в продакшене (а это 146% случаев), на контрибьюшн в оупенсорс должно выделяться рабочее время. Если компания этого (или рабочего времени на самообучение) не практикует, требовать github со стороны такой компании при найме — лицемерно, т.к. сами они вкладывать в то, что экономит им деньги, не хотят (если для разработчиков это фан, он не может быть обязаловкой по определению).

несогласен. думаю вы просто ищете следующую работу на текущем месте — поэтому и нет никаких проблем. Или я неправ и вы гурдью на танк броситесь ради вашей компании? нуу нет. врядли

А вы предлагаете на таких тратить время на личное собеседование?

а схера ли кто должен тратить личное время ради вас?

Поясняю: есть у меня допустим 10 собеседований и тут такой 11-й вариант в нонейм контору, но надо сделать тестовое. Догадываешься куда этот вариант идёт?

Він одразу виходить на перше місце у цьому списку із високим пріоритетом. :-)

Какой же ты мудак, как с тобой в команде люди работают.

Панацея здесь одна: либо требовать оплату тестового, либо требовать собеседования. Как было сказано одним HR-ом — «процесс найма не подразумевает нарушение правил», с чем спорить сложно. Даже если предоставлены ссылки на предидущие работы, подробнейшее резюме со скиллами и показано портфолио, даже если заявить стоимость ТЗ в 10 гривен (реальный случай), вам откажут и с большой вероятностью в лице HR вы заработаете жирный минус. Ответ на такие заявления примерно одинаковый: «все делали и ты сделаешь, программистов ещё много» (тоже реальный случай).
программистов ещё много

Ну много так много :)

Зависит от компании.

Самое лучшее — это когда тим-лиду/СТО проще выделить на кандидата 10-15 минут для очного/скайпового интервью, чтобы принципиально понять «подходит/не подходит». Или посмотреть примеры кода от кандидата в репозитории на гитхабе/и т.п. Всё! Но такое очень редко где встречается.

Иногда тестовое это кусок реального проекта, и тут без вникания в проект в целом — это как повезёт. Хотя это полезно бывает как раз для кандидата, чтобы понять с чем ему придётся работать в будущем.

Имхо, на сеньорские позиции нельзя давать тестовые — максимум для мидлов.

А эти все многочисленные этапы (большие компании часто грешат этим особенно) — ну такое.
Эйчары/эйчарши и их особенности — это отдельная песня.

получая тестовое и понимая что я ****(нехочу) его делать, а без него я не пройду RB, я бы просто напрямую писал бы начальнику или топу, объясняя почему я нехочу делать тестовое. Обычно это адекватные люди и им можно спокойно написать в Linkedin. при этом конечно случаются неадекватные ситуации и на уровень выше(чему я был удивлен).

Верно. Поэтому и нужно стараться обойти барьер в виде HR — это просто лишний препон ;)

Я вот тут неспешно просматриваю вакансии, разные, так вот местные конторы что-то даже резюме уже не спрашивают (в которое мне ещё надо вписать 2 предложения) а сразу на «поговорить» зовут.

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

неа, вобще неразу. собеседовал двух php с опытом 10 лэт. им тоже кидали тестовые(ну не более 4х часов займет). вот как можно понять уровень таких специалистов тестовым???

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

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

Правильно делают. У тебе в линкедине всё есть, да и пачка предыдущих твоих резюме уже давно лежит у них.
У меня как-то хрюша просила резюме скинуть, по линкедину вышла. Я ей объяснил какую кнопочку нажать.

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

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

Так, хотів прокачати свій фейковий аккаунт ним же, але спалили

В рулетку попробуй сыграть — везучий же

Одне діло коли тестове просять у компанію твоєї мрії, у топову компанію. А коли бодішоп на 50 чоловік вимагає тестове, то хай гуляють.

Причем когда тебе в день написало 14 рекрутеров и ты такой сидишь и думаешь, а надо ли делать тестовое? Плюс-минус весло везде есть. И самое смешное на работе же не алгоритмические задачки считать, не кривизну земли измерять и тд. А тупо быть конфигурастом, фиксить баги или лячкать говнокод.

Стоп. А как же сделать башни Ханоя палиндромом и расставить их ферзями на шахматной доске? причем должно работать быстро

Да даже если кривизну Земли либо что-то подобное. Алгоритмы уже сделаны, возможно даже реализации. Бери и пользуйся.

люди свой lodash пишут — практикуются

Автор все вірно написав. Ще якось можна зрозуміти коли простять тестове завдання у джуніора без досвіду роботи. Я робив тестове коли йшов на першу роботу. Але коли простять тестове у мідла чи сініора, то це демонстрація неповаги. Вони не хочуть витратити свій час на співбесіду, але від вас вимагають щоб ви витратили день на їх завдання, яке вони потім можуть проігнорити. Одне дивно, що ви це зрозуміли коли зробили 20 тестових :)

ОПу уже предложили оплачивать кодревьюверов, работу рекрутёра и рабочее время разработчиков, которые его будут собеседовать ?

точно, вообще охренел, он небось и на работу ходит чтобы денег заработать

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

Я выполнил около 10 ТЗ, также без имен и компаний расскажу свою боль с которой я столкнулся:
— первое ТЗ — телефонный разговор, ТЗ, выполнение, и далее я постоянно напоминаю В. о том что сделано и буду рад фитбеку, фитбек я выбивал несколько недель... В результате очередного телефонного разговара В. мне говорит ну у нас сейчас нет открытой вакансии.
— следующие ТЗ были то реально большими то банально не интересными (большие как Автор отметил — реально на два — три дня работы) при этом все показывало что они могут, взять а могут и не взять... и дело не в том что нельзя было выполнить, можно было выполнить еще круче чем просили, только вот зачем...
— еще одно собеседование — закончилось тем что в виде тестового дали живой сайт и заплатили денег, причем все произошло настолько быстро что мы вдвоем были в приятном удивлении...
— ну и не могу не отметить самое приятно, все же так бывает:
Звонок по вакансии, человек говорит я уже давно этим не занимаюсь, я передам Ваши контакты, приятно пообщались... жду... письмо от приятной Девушки (менеджер/HR), мол добрый день, выполните тестовое задание для продолжения разговора: ссылка на гит (на гите очень четко, кратко описано 3 задания с под пунктами), задачи понравились не тривиальные.

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

Далее было интервью, в котором один из вопросов:
— А почему сделали первое задание?
— По списку.

Вот с этим Людьми приятно работать, правда и у них 2 х недельный разрыв пока вам приоткроют дверь и встретят.

точно не шукаешь :)

Расслабтесь слегонца. Правила игры устанавливаются не только «процессом найма не подразумевающим нарушение правил», но и рынком труда ... точнее, я бы сказал, «привозом» :) Если компании не будут гибко реагировать на ситуацию, когда ВУЗы+вайти курсы не обеспечивают приток спецов нужной квалификации и не покрывают отток трактористов, место большинству на свалке истории :8) даже и без того, что мы тут договоримся к ним «ни ногой».

Еще 3 коп. Я неоднократно высказывалССо в пользу тестовых заданий: 10-20 минут, в ходе собеседования. Важно ИМХО увидеть (а) стиль кода (2) как человек работает со, скажем так, частными случаями. Трахарь-теоретик — к сожалению, весьма распространенный тип среди девелоперов, и при наличии у него опыта потрепацца, вкрыть сие на собеседованиях нереально.

Вторая копейка:

Проблемы с их выполнением и ответами от компаний.

Из сопсного опыта скажу, что зачастую ТЗ, особенно на 5 дней, — это типа застолбить кандидата. Пока он ваяет очередную нетленку, можно и головой подумать: а он нам сопсно нужен!? А если не нужен — ответить, что код кривой, и па-па. Об этом стоит помнить.

Третья:

либо требовать оплату тестового, либо требовать собеседования

 А подскажите плз, где в IT тестовые оплачиваются? Это ИМХО из той же оперы, что и безоплатная работа 2-3 месяца в тестовый период :( - зашквар.

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

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

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

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

Недавній випадок:
— кіко хоч
— 100500
— зробіть ТЗ
— зроблено
— о.к., от вам офер на 100100
— але була мова про 100500
— ладно, 100500, але ще одне ТЗ
— а якщо не зроблю
— на офер не впливає
— зроблено
— о.к.
— мені вже не цікаво, маю кращий офер...

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

Сразу нафиг!

Автор поста сам четко описал что такое тестовые задания.

Любое задание, даже на 5 минуточек и на пол-денёчка ДО собеседования или без оплаты — показатель наплевательского отношения к кандидату. По факту, вам со старта предлагают работать в убыток себе. Тестовая работа показывает кандидата не как цельного работника, а как код-машину

Все описано четко и добавлять тут нечего

Тестовые только делал когда искал первую и один раз перед переходом на вторую (не доделал) работу.

Я помню свое первое тестовое задание. Поднять почтовый сервер чтоб справлялись со 100mbps почты и фильтровальной спам.
Так меня взяли и первой задачей было перевести поятовик со стенда в продакшн.

Это было из здорового человека.

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

у меня так всего один раз прокатило, обычно отвечают что нужно именно их тестовое задание

Конечно!В опенсорсный проект же вникать нужно и шевелить мозгами что и как ты там решил. А их задание уже давно, возможно сами проходили. В плариуме несколько лет гуляет задание на многопоточность )))

Древо файлов составлять?

Оно самое, через мульти поточность )))

Причём они запрещают юзать TPL, PLINQ и прочие продвинутые средства работы с потоками. Только резетэвенты, только хардкор.

Делал, было дело. Хотя сейчас, скорее всего, отказался бы. Работы на 2 дня, если без фанатизма.

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

Шли на три буквы, это тест на прогибаемость

ну я в жизни три тестовых сделал, одно когда первую работу искал (~8 часов), второе — то самое в плариум про многопоточность (~12 часов); и один раз, когда старую работу уже покинул, а новой еще не было (~3 часов)

ну и конечно ни одно тестовое работу не принесло :)

Смотри в чем разница. Мне надо тестовое, если у тебя нет опыта с нужными мне технологиями. Обычно оно такое: прочти книжку и сделай IDE. Любое, на базе XText. Если у тебя уже есть примеры на гитхаб, техническую часть ты прошёл. При этом время я не ограничиваю, чем быстрее сделаешь — тем больше вероятность, что вакансия будет.
Люди же просят именно то, что дают. Да быстро, да без вариантов. То есть, во втором случае это тест: будешь ли бы овертаймить бесплатно

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

Тестові завдання не завжди така велика біда, як ТС описує. В багатьох випадках це заміняє звичайний кодинг на папері/google docs/codeshare/різьбу по дереву. До того ж, поки не бачив тестових завдань, в яких дійсно розписано, що проект має бути аж 100% готовий, в більшості випадків просять просто робочий прототип, що не займає так багато часу, якщо кандидат хоч раз вже подібне робив.

Тут головна проблема в асиметричності: кандидат витрачає кілька годин (а як пише автор, іноді і днів, що зовсім дико виглядає як на мене), а компанія зі свого боку — хвилин 20 на те, щоби перевірити і дати фідбек. Коли кодиш на папері в присутності інтерв’юера, він витрачає стільки ж часу, скільки й ти. Плюс можна щось самому попитати, про компанію дізнатися і т.д.

Кому что...
Я лично на бумаге кодить не умею :)
Я однажды сделал так : ТЗ было по Ларе, я в текущий проект дописал нужный для теста класс, только на гит не заливал :)
У проверяющего код завёлся и вуаля.

Наверно от направления зависит.
Для frontendа в виде тестового часто даются коммерческие задачи. От «сверстайте лендинг полностью» до «отрефакторьте этот код, а еще прикрутите слайдер».
Самое смешное, когда hr начинает убеждать таки сделать тестовое задание под соусом «вам понравится!»

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

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

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

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

Софтина — любая. Вопрос не в совершенстве кода, а в умении профи писать в том же стиле и на том же уровне.

Софтина — любая.

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

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

Гена ннна! (к) (тм)

github.com/apache/trafficserver

надо найти нужный модуль — CLI

+

добавить новую команду

Гена ннна! (к) (тм)

github.com/...​njdk-mirror/jdk7u-hotspot

надо найти нужный модуль
или потоков и сделать свой мелкий фикс
формат лога

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

Гена ннна! (к) (тм)

github.com/Netflix/zuul

Упростим задание до «сделать хоть что-нибудь valuable» ))

Хе, можно проимпрувить редми. пошел твитить Илону Маску

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

А дать задачку «на листочке» (или как сейчас модно «у доски») во время собеседования, почему нельзя?

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

умение найти нужное место в большом объеме кода и аккуратно в него вклиниться

Большой — очень субъективное понятие. Для кого-то большой — это проект на базовое понимание которого уходит не менее недели. А кто-то считает что «та у них не маленький проектик я всего за 2 недели понял что там да как».

это и есть повседневная программная инженерия, в отличие от задачек на знание основ и алгоритмов

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

Если вы попали на саппорт энтерпрайз проекта, то да.

А если проект, года два как, пишет распределенная команда человек 15, так нет?

Но иногда приходится и что-то новое делать.

И его не форкают от опенсорса, а пишут int main (void) ?

Проблема в том что понимание человека трейдоффов

Речь идет не о костыле. А добавлении вполне законной новой фичи — вызова REST API, заголовка в сетевой протокол, драйвера для новой модели периферийного устройства. Другими словами — найти нужное место в коде, написать функцию, увязать ее с caller/callee, не забыть о валидаторах-тестах и оформить это все в виде кошерного бранча-патча. Полный функциональный аналог водительского экзамена на пропуск трамвая / троганье на горке.

найти нужное место в коде, написать функцию, увязать ее с caller/callee, не забыть о валидаторах-тестах и оформить это все в виде кошерного бранча-патча.
Большой — очень субъективное понятие. Для кого-то большой — это проект на базовое понимание которого уходит не менее недели. А кто-то считает что «та у них не маленький проектик я всего за 2 недели понял что там да как».

Подобные задания я называю «мы не такие»: наше задание уж точно позволяет 100% понять уровень человека.
К слову, по подобному заданию на 2 часа, которое у меня заняло 30 мин, наниматель понял что у меня большой опыт работы со спрингом и глубокие знания экосистемы. Проблема в том что на тот момент мой опыт со спринг-фреймворком составлял 2-4 часа просмотра видосиков и 3 дня проекта, который так и не взлетел дальше базовой функциональности.

Полный функциональный аналог водительского экзамена на пропуск трамвая / троганье на горке.

Хорошая аналогия, только забыли про парковку елочкой в 2 ряда :)

Подобные задания я называю «мы не такие»: наше задание уж точно позволяет 100% понять уровень человека.

Пригодность конкретного человека, к конкретной работе. Бывают крутые алгоритмисты, а при виде простенького make-файла — тухнут и с подключением нужных версий библиотек не могут совладать.

Бывают крутые алгоритмисты, а при виде простенького make-файла — тухнут и с подключением нужных версий библиотек не могут совладать.

Даже хуже: как правило крутые алгоритмисты имеют проблемы с билд-скриптами и покрытием тестами вне хеппи-паса.

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

и покрытием тестами вне хеппи-паса.

Что логично, посему и нужно тестирование и тестировщики. Правда им платить нужно, а жаба-с не позволяет.

Меня мейки бесят своей уродливостью, а вот с либами — очень часто всё не просто бывает. Либы то обычно специфические не массовые.
Как меня достала TF на C++ с ее зависимостями от конкретных версию их же гуглоподелий — из реп то не подходят. Собери именно специфическую и только ее и никакую другую. Они в код вхадкорили проверку именно конкретной версии их либы.

Мейки это очень условно. Может быть и CMake и Maven и что-то кастомное. Вопрос в том, что написанный код — это пол-дела. Его еще надо в рамках существующего проекта сбилдать и грамотно оформить пул-реквест.
Ну а танцы с библиотеками это вобще отдельный разговор и высший пилотаж.

CMake

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

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

Это всё мелочи.

Но да, алгоритмисты обычно хуже с кодом, чем програмеры — в одну голову всё не влазит. Вот я уже без гугла и не могу. Уже сознательно не запоминаю многие фичи С++ и их юзание. У гугла спросить быстрее. Тоже и с системами сборки и т.п.
Особенно это чувствуется, когда помимо алгоритмов нужно еще прыгать между С++, питоном и матлабом.

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

А дать задачку «на листочке» (или как сейчас модно «у доски») во время собеседования, почему нельзя?

Не имеет смысла, так как сильно отличается от рабочих реалий. Зашел в JIRA — а там description-а нет и несколько дней выясняешь че тебе надо делать. Потом кодишь, делаешь PR, затем у тебя нет доступов на Jenkins и ты просишь соседа посмотреть на твой билд, пришел тестер с багом или PO с дельными замечаниями...
P.S. Основной скилл программиста не код писать на языке, а взаимодействие с тулами. Код 5%, тулы 95%

Жаль что такой логики не придерживается большинство `реков`

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

Это хорошо в теории на практике оно 146% не укладывается в поставленные тут же ж условия:

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

+ ко всему основной принцип «задания» который я встречал это «первичный отсев» ещё до этапа «об чём вообще с ним разговаривать?» что вообще логично потому как если уже всё:

когда уже проведено интервью, проговорены условия работы, стороны заинтересованы в сотрудничестве

... и тут вдруг:

но перед окончательным решением наниматель хочет убедится, что мосье не теоретик.

То тут остаётся только пожелать «нанимателю» всего наилучшего и обязательно обращаться в случае чего когда у него у «нанимателя» уже будет чего конкретно а не «наниматель мосье теоретик». ))

ЗЫ: но чисто теоретически всё это можно на условиях предоплаты по рейтам «хМного» но деньги вперёд.

Ну такое, разве что ты фанат этой тулы. В противном случае я сильно сомневаюсь что поднять, настроить энв, разобраться куда тулить, написать код, протестить, сделать PR займет 1.5 часа. Вдобавок в опенсорс тулы более жесткие требования по коду, документированию, тем же PR и ты получается сам загнал себя в ловушку: наговнокодишь чтобы уложиться во время — тебя макнут «Че ж вы батенька говнокодите, вон рядом код красивый какой?», если сделаешь красиво и по стандартам — скажут долго делал, не 1.5 часа «Очень долго делаете, наверное завалите нам все сроки на проекте...» Как видишь, ТЗ не более чем инструмент гнобления.

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

Иногда даже не так бывает, когда я пытался устроится контрактором и я увидел, что теряю заказчика на собеседовании как раз из-за того, что собеседование оказалось абсолютно рядовым для обоих сторон. Я посмотрел на себя со стороны и понял, что врядли бы его нанял прямо здесь и сейчас. Тогда пришлось достать туз из рукава и сказать, что у меня есть идеи, как ускорить один из «продуктов» в два раза. С точки зрения полезности — ноль целых ноль десятых, скорость в том продукте была не нужна абсолютно, ждать 5 или 10 секунд разницы нет ни для кого никакой, но с другой стороны многие были уверены, что это потолочная производительность и ускорить больше нельзя. Я сказал, что за две недели увеличу скорость в два раза, если мне дадут исходники, исходники выдали через 5 минут, через две недели выдали работу :)

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

А мне понравилась задача Самсунга с пластинками, такое мало кто предлагает сейчас.

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

Кстати да, отличный ход, если ты хочешь получить этот контракт/работу.

А мне понравилась задача Самсунга с пластинками, такое мало кто предлагает сейчас.

Мне тоже, но это все-таки на немножко подготовленного человека и имеющего некоторый запас времени.

сказал, что за две недели увеличу скорость в два раза, если мне дадут исходники, исходники выдали через 5 минут, через две недели выдали работу :)

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

На собеседовании практически невозможно определить, что за люди с кем возможно будешь работать.

тобто чи 3,14дараси чи ні зразу так і не визначиш?

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

Ну ладно еще джуны, у которых чаще всего еще нет выбора (и опыта), но вот мидлы и сеньоры... Если сам не станешь уважать себя и своё личное время — никто не будет это делать за тебя.

Есть еще вариант, что себя уважаешь слишком. Тайтл — синьор, а опыта и умений между джуном и мидлом. Задание у кого-то может занять 3 дня, у другого 30 минут. В этом вся соль, как по мне.

Тайтл — синьор, а опыта и умений между джуном и мидлом.

Я могу сказать тоже самое про некоторые компании: говорят что лидер рынка, а на самом деле: кидки на зп, обязательные овертаймы, ад в бухгалтерии, заказчики-индусы и тд. Кто даст тестовое задание самой компании тогда?)
Способности должно определить собеседование. На крайний случай — испытательный срок. Он и для кандидата, и для компании. А тестовое — не лучший способ определить скиллы, его может сделать кто-то другой вместо человека отзывавшегося на вакансию.

Ну продавать себя всем нужно, в том числе и компаниям. Важно понимать разницу между (само)рекламой и реальностью. Тестовое задание — всего лишь часть оценки и к рабству не имеет никакого отношения. Если так рассуждать, то весь процес найма, как и весь наемный труд = рабство.
Online assessment от Amazon/Google/etc тоже ведь тестовое. И ничего, тысячи человек делают ведь.
Ну да ладно, это просто мое мнение. Вон ниже уже пинают, что я не в Amazon, и, видимо, много себе позволяю.

Online assessment от Amazon/Google/etc тоже ведь тестовое. И ничего, тысячи человек делают ведь.

Есть пара моментов:

  1. У них тестовое это проверить скилы или так, «у всех есть и нам надо»? Потому что вот то что в топике про целые лендинги и готовые сайты — это скорее второе. Хотя бы потому что в итоге получится очень много кода, который кто будет исследовать и оценивать?
  2. Какой профит от поступления на работу в Amazon, Svitla Systems и Luxoft? Стоят ли очереди из более-менее подходящих кандидатов в три из этих контор или только в первую?

А так да, у амазона, гугла и фейсбука тоже тестовое.

Online assessment от Amazon/Google/etc тоже ведь тестовое. И ничего, тысячи человек делают ведь.

Вы очень близки к правильному ответу, он даже есть в вашей фразе. Есть сценарии, когда ДЗ очень полезны.

Так Svitla Systems и не Amazon на секундочку.

Задание у кого-то может занять 3 дня, у другого 30 минут

И что же это за тестовое такое, которое все покажет и можно выполнить за 30 минут?

показатель наплевательского отношения к кандидату. По факту, вам со старта предлагают работать в убыток себе. Тестовая работа показывает кандидата не как цельного работника, а как код-машину.

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

---

А теперь вопрос к сообществу: Я один начал замечать что домашние задание стали в разы популярнее у работодателей чем это было года 2 назад?

нет специалистов годных провести тех. интервью

нет желания менять устои. привыкли по старому. а рынок за 4-5 лет изменился

В украинском ИТ требуются низкоквалифицированные и дешёвые «синьоры», пашущие на рутине за 4к/мес. И тут действительно работает «все делали и ты сделаешь, программистов ещё много».

Если не хочешь тестовых заданий — заводи трактор, сваливай в Прекрасную Эльфию и выходи там на проекты с часовыми рейтами. Тестовых заданий больше не увидишь.

В украинском ИТ требуются низкоквалифицированные и дешёвые «синьоры», пашущие на рутине за 4к/мес.

Что??? Макс,тут на форуме и не один 6к, 8к и выше зарабатывают.Встречаются те,кто годами сидят на 3-шке,но они не показатель зарплат всех айтишников.

тут на форуме и не один 6к, 8к и выше зарабатывают

Одного с 6к знаю в Украине — но он из командировок по странам ЕС не вылазит. Одного знаю с чем-то типа 10к — но он в чём-то типа «совета директоров» одного глобального проекта, который все знают. И они тестовые задания не выполняют (да и технические собеседования «аля экзамены» не проходят).

А о таких оплатах всяким-разным — не, не знаю.

Мы с Вами явно в параллельных вселенных живем. О каких 3-4-6-8к Вы говорите? Я оценивая себя на уровне мидла±, просил скромных по Вашим меркам 1,5к и то многие говорили, что столько не дадим. Правда речь о PHP была. Может они там на чем то более низкоуровневом пишут, вроде Scala, Java, etc ?

Зачем себя сравнивать?
Как оказывается, не в разных вселенных.В топиках проскальзывают моментами зп. По Киеву запомнила 6 к $ Senior Java(5+ лет) и зп в 8к $ ( стек не помню).Это свежие вот данные за пару месяцев.
Это не все так зарабатывают,но есть же.

Один опытный рекрутер сказал в интервью — в укр. ИТ большой процент найма(от 10% точно) происходит тупо по знакомству. Так что знакомься с рекрутерами, цветы, конфеты, поцелуи — и будет тебе счастье

Он соврал тебе на раз в 8. Знакомство нужно не с HR, а с компанией, с тем чтобы ОБОЙТИ дебильный HR-барьер (и все от них зависимые) и сказать на их бюрократическую ложь — свою бюрократическую ложь, в точности совпадающую с той, которую они хотят услышать. Притом когда стадий несколько — на каждой стадии ложь своя, зачастую противоречащая предыдущей. Но так надо.

Разумеется, есть исключения. Но почему-то они «трактористы». С чего бы?

Потому наиболее частый вариант найма — проводник изнутри компании. Почему таким проводником не является HR? Потому что вся роль этой позиции в Украине — бльадь с низкой социальной ответственностью и высокой лояльностью большой шишке с короткой шишечкой. И других туда не берут.

Вижу наболело :) если система вас не устраивает — не играйте по их правилам.

И это была Она, и это нормальный рекрутер(уверен), а не те, кого вы имеете ввиду.

Увы, закон пока запрещает сжигать на костре, или иным способом выпилить из эволюции этот класс низших приматов.

Грубовато, но надо играть в обход рекрутеров, чтобы у них как и у почтальйонов не осталось работы. Вообще я надеюсь что скоро к нам на рынок прийдут AI фирмы которые будут автоматически скринить соискателей.
Да даже обычный чатбот будет лучше выполнять свою работу.

AI может отобрать только людей, которые тупее этого самого AI, и работу которых может выполнить скрипт.

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

ну захочется норм работку = будете играть по правилам

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

В других местах это тоже есть, но там где подобные особи получают гроши, им дают полномочия секретутки и не более. В IT же у этих «высококлассных специалистов» целая религия, они считают себя стражами рая, не меньше. И это не на уровне отдельных предприятий, это уровень постсовка (там где он сохранился) — то есть у них есть свои сообщества, СМИ, ивенты, свои папы-римские — и всё это, напомню, за счёт рабочих команд на которых они паразитируют.

Про «норм работку» есть отдельный сайт .итальянский, там русским по белому показано к чему приводит шизофрения, возведённая в ранг нормативов отрасли. Особенно прекрасно в ней чувствуют себя мошенники — ведь так они могут выглядеть одинаково с обычными работодателями. ИЧСХ, они ведь ищут чаще всего, мошенникам постоянно нужны люди, ибо не задерживаются.

Это ты ещё с немецким HR не пересекался:) Каждая б. как минимум королева, всегда занята, всегда пафос. И ещё есть фишка именовать себя партнерами и не здороваться ни с кем кроме С-левел патронов.
Имхо совок тут ни при чем. Это очень лёгкая для входа сфера и если с шершавостью языка все ок, можно взлететь быстро но при этом остаться той же безмозглой некомпетентной б. Отсюда и манеры общения и надменность и все лстальное

... других туда не берут.

Это Ты про кого? про тех, которые с никакой социальной ответственностью, или про шишек с короткими шишечками ;) ?
В тему м-м-м высокой лояльности есть шикарный анегдод про гаишников без ушей , угу ?..

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

+1, примерно так и идет отрицательный отбор :((

Так что знакомься с рекрутерами, цветы, конфеты, поцелуи — и будет тебе счастье

Сразу видно неофита, зови под Градусник и будет тебе счастье.

Я даже погуглю что это такое. Привет Харькову! церковное значение — верно?

Плохо ты гуглишь как для айтишника: dou.ua/forums/topic/11394

Даже рад что не в теме :) везучий я всетаки

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

Правильно — не работу найдешь так личную жизнь устроишь

Подписаться на комментарии