Pull to refresh

Внутри поста деньги. Очередной JavaScript-конкурс

Self Promo
Привет, друзья. Тут речь пойдет о маленьких конкурсах JavaScript-программистов, которые проводит стартап Хола. Мне до сих пор кажется, что посетители Хабрахабра — самая целевая аудитория для таких конкурсов, особенно после разделения сайтов на МикроМозг и тот, другой сайт.

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

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

Про конкурс


Сразу самое интересное: условия конкурса.

В состав Node.js входит имплементация высокопроизводительного связного списка, которая ко всему прочему бережно относится к оперативной памяти. Вот она, эта замечательная штука: github.com/joyent/node/blob/master/lib/_linklist.js

Этот код довольно специфичный: он написан для хранения idle timeouts (хоть это никак и не отражается на его работе), и не позволяет одному объекту содержать несколько списков. (Здесь, очевидно, имеется в виду непосредственное участие одного и того же узла в двух и более списках. — прим. перев.)

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

Побеждает самая быстрая, эффективная и обобщенная реализация.

Почитать оригинал на английском можно вот тут.

Решения принимаются до 30 июня. Призы: 1500, 1000 и 500 долларов США за три самых лучших решения, и 350 долларов за самую оригинальную попытку.

Анализ задания


Дальше чистая спекуляция, т.е. мое собственное мнение. Оно может оказаться верным, а может не оказаться — настоящая квантовая механика; как и кота Шрёдингера, мое мнение поэтому нельзя ни погладить, ни накормить.

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

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

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

О подвохе


А подвох вот в чем: нестрогость задания напрямую связана с настоящей целью проведения маленьких конкурсов. По секрету сообщаю: цель — найти программистов, чтобы пригласить их на работу. Работать в Холе можно удаленно, а можно локально, если вы случайно (или вовсе даже преднамеренно) очутились в Израиле.

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

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

Хроника событий


Конкурс, про который вы почитали выше — третий по счету.

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

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

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

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

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

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

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

Выводы


  • Можно написать ~10 строк кода и выиграть ~1000 долларов. Полтора барреля нефти за строку кода.
  • Когда на халяву дают деньги, надо брать.

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

Удачи!
Tags:
Hubs:
Total votes 36: ↑23 and ↓13 +10
Views 9.3K
Comments Comments 22