Алгоритмические задачки на фрилансерских платформах

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

Вот здесь есть пример такого возмущения: Reddit. Там же есть и примеры задачек, которые попадаются на таких этапах: подсчитать минимальное число ходов коня между двумя точками бесконечной шахматной доски или перевести число в систему счисления с основанием минус два (гуглить нега-позиционные системы счисления). Вообще можете попробовать свои силы на Hackerrank или Codility. Если давно такие не решали, вам будет интересно.

Возмущения, высказываемые разработчиками, сводятся к двум пунктам:

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

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

Давайте разберёмся, почему так. Дело в том, что фрилансерские сайты имеют очень много специфики:

  1. Мотивация фрилансеров неустойчива.
  2. Фрилансеры по определению часто меняют проекты и заказчиков, выискивая наиболее выгодные для себя. При этом бывают накладки, когда один из клиентов вынужден ждать, срывая свои сроки. Оказать какое-то давление на фрилансеров очень сложно, так как они очень далеко и методов достать их фактически нет.
  3. Мотивацию фрилансеров трудно определить.
  4. Вот чего хочет человек? Обычно собеседующий определяет это, анализируя развёрнутые ответы кандидата и чётко улавливая интонацию и невербальные знаки. А с удалёнщиками? Да сложно это. Уровень английского часто такой, что на философские беседы не поговоришь. Человек старается отвечать кратко и с уклоном в технические вопросы. А даже если английский хороший, то межкультурные барьеры никуда не деваются. Вот спрашиваю я человека, почему он хочет бросить компанию и работать на удалёнке, а он отвечает: "Мои родители живут в деревне, а я живу в городе. Все жители деревни порицают меня, у нас так не принято. Мне важно уехать в деревню и жить рядом с родителями." Вот это серьёзно он, или отговорку придумал? Шутит или издевается? Не узнать.
  5. Заказчики не могут собеседовать разработчиков.
  6. Заказчики часто совсем далеки от сферы разработки и не могут осмысленно выбирать исполнителей под свои проблемы. Например, видел проект, где потомственый часовщик искал разработчика, который бы ему реализовал систему привода часового механизма через интернет. Он только смутно знал, что тут нужен Arduino или Raspberry PI, а остальное было всё в тумане. Да и проектов много очень коротких. Нельзя собеседовать человека неделю, чтобы он потом неделю работал. Поэтому нужен пул разработчиков, которых особо проверять не надо, которых можно брать и использовать.
  7. От разработчиков ожидают, что они умеют учиться сами.
  8. Многие разработчики считают, что чтобы выучить новую технологию, им надо попасть в проект, где эта технология используется. И там товарищи поделятся знаниями да и практика поможет. На фрилансе такой подход вызывает справедливое непонимание заказчиков.

В целом, если обычная аутсорсная компания имеет много ресурсов, чтобы встроить технически грамотного человека в процесс и сгладить его особенности, то во фрилансе заказчики гораздо более уязвимы, поэтому отбор программистов должен быть очень серьёзным. Надо как-то отсеять немотивированных, ненадёжных фрилансеров, которые не хотят или не умеют сами учиться. Как это сделать?

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

  1. Они не имеют прямого отношения к тому, чем разработчики обычно занимаются.
  2. У разработчика не получится взять куски готового кода и привычными приёмами накидать код. Ему придётся как-то самообразовываться. Причём, если он совсем с такими задачками не работал, то ему придётся пахать очень серьёзно: читать книги, искать статьи по конкретным темам, рыться в обсуждениях на форумах, решать аналогичные задачки, находящиеся в открытом доступе. А если разработчик уже имеет представление о сложности алгоритмов и умеет структурно мыслить, значит он уже учился учиться ранее.
  3. Разработчику придётся потратить много времени.
  4. Даже просто прорешать тестовые задачки, чтобы наработать навык, быстро не получится. Я на подготовку к этому этапу в своё время потратил около 100 часов. А мне такие задачки нравятся и я их время от времени решаю. В общем, неважно, что двигает фрилансером, жажда наживы и любопытство, но если он потратил такую кучу времени и подготовился к этому этапу, то мотивация у него серьёзная. Он знает, зачем он хочет пройти на эту платформу и не захочет с неё вылететь.

Вы заметили парадокс? Оба плюса алгоритмических задачек – это в точности те минусы, которые раздражают разработчиков. Причём, могу уверить, что если вас такой подход раздражает, то лучше дальше не соваться, так как в целом в процессе отбора много элементов, как будто взятых из старой армейской присказки: “чем бы солдат не занимался, лишь бы задолбался.”

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

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

Comments

  • [deleted] 2019-03-18T03:54:34Z

    • bukov_ka 2019-03-18T04:17:47Z

      А что такое "обычный фриланс"? Самый обычный фриланс для разработчика -- это Upwork/TopTal. Можно, конечно, напрямую искать себе клиентов, но я писал про "фриланс платформы", где действует отбор.

      И я думаю, что он и правда массивы не использует. Ну кроме какого-нибудь .ToArray() время от времени. В моём коде тоже я вряд ли найду прямо изменение произвольного элемента массива или выборку в произвольном порядке. Многие предпочитают List, чтобы не париться с удалением/добавлением элементов.

      Этих “опытных”, которых эти тесты бесят, куча в интернете. Я поэтому этот пост и написал. Вот ещё пример обсуждения: https://community.upwork.com/t5/New-to-Upwork/I-can-t-pass-the-Upwork-tests-but-I-know-for-a-fact-that-I-know/td-p/489658

      И насчёт тех, кто поумнее, тут тоже всё сложно. Я слышал от очень хороших программистов, что им ВУЗ нифига не помог в профессиональной деятельности, и что учили их какой-то фигне. Соотнести свои знания географии и умение писать код мало кто может.

      • [deleted] 2019-03-18T05:03:35Z

        • bukov_ka 2019-03-18T05:49:00Z

          > заказчик платит разработчику напрямую, или хотя бы процент получаемый платформой фиксирован В Upwork платежи идут не напрямую, а через Upwork. И процент не фиксирован, а меняется, но он известен, а TopTal его не разглашает. Честно говоря, не вижу большой разницы для фрилансера. :) А есть платформы, которые свои проценты разглашают частично.

          Те программисты, которым ВУЗ нифига не помог видимо не очень хороши, Я не говорил, что им ВУЗ не помог. Я говорил, что они это отрицают. Ты же говорил, про понимание факта, а не про сам факт. Так вот понимание как раз очень нечастое дело. Можешь провести эксперимент и спросить своих работников, как им помогла школьная география в жизни. :)

  • [deleted] 2019-04-02T22:36:29Z

    • bukov_ka 2019-04-03T04:21:44Z

      А средний рейт на апворке известен? А то я не в курсе совсем. Мой опыт зарабатывания денег на фрилансовых платформах весьма печален. Я работаю не во фрилансе и получаю больше среднего по Топталу. Но как наш с вами опыт может быть аргументом ПРОТИВ академических задачек? Такой вывод -- логическая ошибка.

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

      В больших интерпрайз системах оптимизация производительности сводится к совсем другим приемам и не делается за 30 минут. Я не писал, что приёмы те же или что оптимизация делается за 30 минут. Оптимизацией Enterprise я занимался очень много. Там оптимизация часто заканчивается в БД, оптимизацией запроса. И для понимания плана SQL запроса понятие сложности алгоритма очень пригождается. И серьезное увеличение производительности обычно делается переписыванием этого запроса, чтобы те же данные выбирались более быстрым алгоритмом.

      • [deleted] 2019-04-03T13:04:04Z

        • bukov_ka 2019-04-03T13:54:26Z

          Да, вы правильно меня услышали, эти входные тесты – они совсем не про опыт.
          • [deleted] 2019-04-03T19:51:20Z

            • bukov_ka 2019-04-03T19:54:59Z

              Эти задачки – это только один из этапов отбора. Технические навыки и опыт проверяются на других этапах.
  • [deleted] 2019-04-02T22:40:15Z

    • bukov_ka 2019-04-03T04:38:00Z

      Очень хороший пример, потому что именно так сдача на право управления и делается. :) Недавно слушал комментарии сдающих на права на категории A и B: - Да кому нужна эта механическая коробка, если я в жизни никогда её использовать не буду? - Где я в реальности восьмёрку буду делать? Совсем оторванное от жизни упражнение! - Да эта китайская техника уже при покупке не работала. Как на ней сдавать?! Я-то на нормальной потом ездить буду. Зачем сейчас мучают?

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

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

      Всё, как вы говорите, через даже не 3 года, а 3 месяца люди забывают те же самые ПДД и ездят. А кто-то сдаёт экзамены, особо не напрягаясь, из-за личных особенностей.

      А причём, сдача на права – это гораздо важнее, чем пройти на какой-то сайтик, который ещё непонятно что даёт.

      • [deleted] 2019-04-03T13:09:04Z

        • bukov_ka 2019-04-03T13:53:41Z

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

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

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

          Но с алгоритмическими задачками почему-то ситуация другая – разработчиков они массово бесят. Вот чтобы этот негатив как-то немного снять, я и написал этот пост.

  • [deleted] 2019-04-05T07:46:50Z

    • bukov_ka 2019-04-05T08:07:20Z

      Для начала я хочу уточнить, что я говорю не только о TopTal. Я видел такие задачки во местах (причём и не только фрилансерских, конечно).

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

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

      Что я не умею в soft skills, мне очень нужен продавец, а сам я пока задачки поучу? Ой, а можно это расшифровать? Я умею в soft skills, продавец мне не нужен, но мне кажется, что эта фраза означает что-то интересное.

      Что у меня было много времени задрочить типовые задачи? Да. А ещё то, что вам интересно потратить много вашего времени на TopTal/Upwork/Codementor/Turing/Soshace/X-team/т.д. Если бы вы просто хотели задачки порешать, вы бы пошли на саму Codility или HackerRank. Но усилия по проходу на конкретную платформу – это очень круто. Любая контора будет очень заинтересована, если к ней придёт разработчик, который скажет: “Хотелось бы потратить более 200 часов на тестирование в вашей компании, чтобы вы могли понять, подхожу ли я вам потенциально.” Учитывая, что само прохождение на платформу значит очень мало, то готовность разработчика убить столько времени показывает ОЧЕНЬ высокую заинтересованность.