Примерно в 2015 году я увидел рекламу hired.com, я действительно не искал работу, но все равно присоединился. Сделав несколько щелчков мышью, я внезапно оказался в незнакомой ситуации: на экране меня просили решить какую-то анаграмму с помощью JavaScript. И я не знал, что делать. Я потратил около пяти минут, тупо глядя на экран, прежде чем просто покинуть сайт в приступе раздражения.

На следующее утро я получил письмо по электронной почте, в котором сообщалось, что мне отказали в доступе на сайт. Я сказал себе, что мне все равно, хотя на самом деле это было так, и я начал ЗАБЫВАТЬ головоломками с кодом. Я погуглил практика головоломок с кодом и присоединился к Codewars.com, одному из первых сайтов, посвященных головоломкам кода. Я включил в свой список задачу, чтобы решать эти головоломки по 10 минут в день каждый день.

С тех пор я узнал, что загадки кода - обычная часть процесса найма программного обеспечения, будь то «доска» или эти веб-тесты. Я понял, что на самом деле меня отправили на первое собеседование после окончания колледжа, и я был настолько наивен, что понятия не имел, что происходит. Когда мне предложили решить задачу на PHP, я на самом деле сказал: «О, я не знаю, как это сделать, я бы просто погуглил». Я почти уверен, что они просто были сбиты с толку, а я непреднамеренно проявил некоторую дерзость. Они наняли меня. Мне повезло, но в следующий раз я не хотел быть таким неподготовленным.

Может быть, я не отрабатывал 10 минут каждый день, но за следующие два с половиной года я решил около 60 кодовых головоломок на Codewars. В основном я занимался JavaScript, а когда я больше углубился в Python для своего класса машинного обучения, я начал решать некоторые головоломки, которые я решал с помощью JavaScript, на Python.

По мере того, как я продвигался вперед, Codewars давали мне более сложные головоломки, на решение которых уходит 40–80 минут. Делая это по 10 минут, вы тратите 2–5 из этих минут на то, чтобы просто переориентировать себя и вспомнить ход своих мыслей. Так что это была основная причина, по которой я вышел из игры.

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

Во-первых, я чертовски много узнал. В 2015 году я провел большую часть своей карьеры в качестве разработчика PHP, поэтому, честно говоря, я не знал многих методов JavaScript. Я должен отдать должное этим знаниям, потому что в наши дни я в основном разработчик JS. Например, я понятия не имел, что это за метод карты. Теперь, когда я занимаюсь React, эти знания мне действительно пригодились. Я отслеживал множество JS-методов, которым научился на доске Trello. Раньше я боялся RegEx, но теперь я неплохо разбираюсь в этом, поскольку его используют во многих головоломках.

Я также узнал намного больше о тестировании программного обеспечения. Каждая головоломка Codewars тестируется, и вам часто нужно уметь читать тесты, чтобы решить головоломку. Фреймворк, который они используют, довольно прост в освоении, и как только вы добавите свои собственные головоломки, вам нужно будет написать свои собственные тесты. Я только начинал использовать в работе модульное и функциональное тестирование, так что эта практика мне очень помогла.

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

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

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

Есть ли вообще смысл подвергать меня этому? Я должен сказать, что этот тип кода я не часто использую в работе. Есть исключения, но они редки. Прошлой зимой я написал карточную игру для праздничного веб-сайта, и это было очень похоже на мою головоломку. Но в остальном большая часть кода, с которым я работаю или пишу, - нет. Вероятно, самое важное, что я делаю, - это проектирование программного обеспечения и операции разработчика, которые не тестируются с помощью кодовых головоломок. Для меня, несмотря на всю практику, они остаются препятствием. К сожалению, это означает, что мне нужно будет больше практиковаться в обстановке, подобной собеседованию. Пришло время заняться обучением программированию, внести свой вклад в OSS и в целом улучшить те навыки, которые я действительно использую на работе.

Абсолютно тот факт, что доска даже превратилась в то, что по сути является головоломкой с кодом, никогда не входил в цель этой практики. У Анила Даша есть отличная статья о проблемах с доской:

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

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