Алгоритмические задачки на фрилансерских платформах
Периодически наталкиваюсь в интернете на крайне возмущённые вопли разработчиков, которые пробуют пройти на какую-нибудь фрилансовую площадку, и срезаются на этапе, где они должны в ограниченное время решить довольно сложные алгоритмические задачи.Вот здесь есть пример такого возмущения: Reddit. Там же есть и примеры задачек, которые попадаются на таких этапах: подсчитать минимальное число ходов коня между двумя точками бесконечной шахматной доски или перевести число в систему счисления с основанием минус два (гуглить нега-позиционные системы счисления). Вообще можете попробовать свои силы на Hackerrank или Codility. Если давно такие не решали, вам будет интересно.
Возмущения, высказываемые разработчиками, сводятся к двум пунктам:
- Такие задачи не имеют никагого отношения к реальным задачам, которые решают разработчики.
- Чтобы пройти этот этап нужно убить очень большое количество времени.
Самое забавное, что можно даже согласиться с этими двумя пунктами, но это не делает сам этап бессмысленным. Наоборот, конкретно для фрилансерских платформ такие задачки очень полезны.
Давайте разберёмся, почему так. Дело в том, что фрилансерские сайты имеют очень много специфики:
- Мотивация фрилансеров неустойчива. Фрилансеры по определению часто меняют проекты и заказчиков, выискивая наиболее выгодные для себя. При этом бывают накладки, когда один из клиентов вынужден ждать, срывая свои сроки. Оказать какое-то давление на фрилансеров очень сложно, так как они очень далеко и методов достать их фактически нет.
- Мотивацию фрилансеров трудно определить. Вот чего хочет человек? Обычно собеседующий определяет это, анализируя развёрнутые ответы кандидата и чётко улавливая интонацию и невербальные знаки. А с удалёнщиками? Да сложно это. Уровень английского часто такой, что на философские беседы не поговоришь. Человек старается отвечать кратко и с уклоном в технические вопросы. А даже если английский хороший, то межкультурные барьеры никуда не деваются. Вот спрашиваю я человека, почему он хочет бросить компанию и работать на удалёнке, а он отвечает: "Мои родители живут в деревне, а я живу в городе. Все жители деревни порицают меня, у нас так не принято. Мне важно уехать в деревню и жить рядом с родителями." Вот это серьёзно он, или отговорку придумал? Шутит или издевается? Не узнать.
- Заказчики не могут собеседовать разработчиков. Заказчики часто совсем далеки от сферы разработки и не могут осмысленно выбирать исполнителей под свои проблемы. Например, видел проект, где потомственый часовщик искал разработчика, который бы ему реализовал систему привода часового механизма через интернет. Он только смутно знал, что тут нужен Arduino или Raspberry PI, а остальное было всё в тумане. Да и проектов много очень коротких. Нельзя собеседовать человека неделю, чтобы он потом неделю работал. Поэтому нужен пул разработчиков, которых особо проверять не надо, которых можно брать и использовать.
- От разработчиков ожидают, что они умеют учиться сами. Многие разработчики считают, что чтобы выучить новую технологию, им надо попасть в проект, где эта технология используется. И там товарищи поделятся знаниями да и практика поможет. На фрилансе такой подход вызывает справедливое непонимание заказчиков.
В целом, если обычная аутсорсная компания имеет много ресурсов, чтобы встроить технически грамотного человека в процесс и сгладить его особенности, то во фрилансе заказчики гораздо более уязвимы, поэтому отбор программистов должен быть очень серьёзным. Надо как-то отсеять немотивированных, ненадёжных фрилансеров, которые не хотят или не умеют сами учиться. Как это сделать?
Процесс многоступенчатый. И одним из моментов этого отбора являются эти самые ненавистные алгоритмические задачки. У них есть два достоинства:
- Они не имеют прямого отношения к тому, чем разработчики обычно занимаются. У разработчика не получится взять куски готового кода и привычными приёмами накидать код. Ему придётся как-то самообразовываться. Причём, если он совсем с такими задачками не работал, то ему придётся пахать очень серьёзно: читать книги, искать статьи по конкретным темам, рыться в обсуждениях на форумах, решать аналогичные задачки, находящиеся в открытом доступе. А если разработчик уже имеет представление о сложности алгоритмов и умеет структурно мыслить, значит он уже учился учиться ранее.
- Разработчику придётся потратить много времени. Даже просто прорешать тестовые задачки, чтобы наработать навык, быстро не получится. Я на подготовку к этому этапу в своё время потратил около 100 часов. А мне такие задачки нравятся и я их время от времени решаю. В общем, неважно, что двигает фрилансером, жажда наживы и любопытство, но если он потратил такую кучу времени и подготовился к этому этапу, то мотивация у него серьёзная. Он знает, зачем он хочет пройти на эту платформу и не захочет с неё вылететь.
Вы заметили парадокс? Оба плюса алгоритмических задачек – это в точности те минусы, которые раздражают разработчиков. Причём, могу уверить, что если вас такой подход раздражает, то лучше дальше не соваться, так как в целом в процессе отбора много элементов, как будто взятых из старой армейской присказки: “чем бы солдат не занимался, лишь бы задолбался.”
Причём, здесь есть большая несправедливость. Те, кого этот подход призван отсеивать, даже не будут тратить на него время. А вот те, которые как раз подходят под требования, всё равно вынуждены тратить уйму своих сил и времени. Если такая несправедливость вас угнетает, лучше тоже не ввязываться в процесс, чтобы потом не расстраиваться.
В завершение, могу сказать, что в целом мне очень нравится, что есть такие сайты, где можно порешать алгоритмические задачки и получить хорошую оценку своего решения. Несмотря на свою кажущуюся оторванность от реальности, навыки решения алгоритмических задач пригождаются очень часто. Например, навык проверки крайних значений требуется с завидной периодичностью. А с производительностью проблемы бывают почти в 100% проектов. А решиать проблемы производительности, не имея понятия о сложности алгоритмов, нереально.
[deleted] 2019-03-18T03:54:34Z
bukov_ka 2019-03-18T04:17:47Z
И я думаю, что он и правда массивы не использует. Ну кроме какого-нибудь .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
[deleted] 2019-04-02T22:36:29Z
bukov_ka 2019-04-03T04:21:44Z
[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
И аналогичные возмущения про теорию, которая массово воспринимается как совсем оторванная от жизни:
Всё, как вы говорите, через даже не 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