Nuts and Milk
1323 words
7 minutes
Как пользоваться codewars

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

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

Регистрация#

Впервые попав на этот сайт, вам предлагают пройти небольшое задание. (Хотя, я не уверен, возможно его можно обойти.)

'codewars

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

'codewars

В этом коде мы видим функцию multiply, суть которой умножить два числа друг на друга. В JavaScript, чтобы функция возвращала какой-то результат, должно использоваться ключевое слово return.

function multiply(a, b) {
	return a * b;
}

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

'codewars

(Если у вас еще нет аккаунта на Github, очень рекомендую завести, поскольку вам не нужно будет впоследствии постоянно регистрироваться на подобных сайтах - достаточно просто войти под учетной записи GitHub.)

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

Интерфейс#

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

'codewars

Итак, нажали на Kata и появляется страница с задачами:

'codewars

По умолчанию здесь собраны последние каты. В разделе Diffuculty вы можете выбрать для себя подходящий уровень сложности. ****Всего 8 уровней. 8 kyu - самый простой и 1 kyu самый сложный. Термин **kyu** (кю) - также взят из карате и означает сколько степеней еще осталось до мастера (1 dan).

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

  • Sort by: Most Completed (наиболее решенные)
  • Language: My Languages
  • Status: Approved
  • Progress: Kata I have not trained on (Каты, которые я не решал)
  • Difficulty: сложность любая

'codewars

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

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

Нажав на заголовок задачи, вы попадете на страницу с её описанием:

'codewars

  1. Здесь дается описание и примеры.
  2. Если готовы приступить, нажмите кнопку TRAIN.
  3. Язык программирования, выбранный для этой задачи.
  4. Во вкладке Solutions можно подсмотреть решения, но тогда вам не засчитают очки.
  5. Задачу можно добавить в избранное, чтобы решить её позже, нажав на звездочку.

Нажав на кнопку TRAIN появится следующее окно:

'codewars

  1. Здесь также присутствует описание.
  2. В этом окне нужно вставить свое решение.
  3. Здесь представлена часть тестов, через которые будет проходить ваше решение.
  4. RUN SAMPLE TESTS запускает тесты, упомянутые в пункте 3.
  5. ATTEMPT - запускает все тесты. Их может быть 100 и больше. Я всегда нажимаю сразу на эту кнопку, потому что я могу пройти тесты из пункта 3, но не пройти случайные тесты, так что смысла в RUN SAMPLE TESTS практически нет.

Писать код можно прямо на месте (в окне, помеченным номером 2) и тут же его проверять, но я предпочитаю делать это в стороннем сервисе, таком как repl.it (онлайн редактор кода). Это связано с тем, что когда на работе выпадает свободная минутка и я могу порешать задачку, такие сервисы, как repl.it - это быстро и удобно.

Итак, вы нашли решение, вставили его в нужное окно и нажали ATTEMPT.

'codewars

  1. В данном случае - мое решение.
  2. Показывается количество пройденных тестов. Когда все тесты подсвечены зеленым цветом, это значит, что они пройдены. Если красным, то не пройдены.
  3. Сообщение о том, что вы еще можете сделать рефакторинг или добавить комментарии к коду.
  4. Нажав на SUBMIT FINAL вы отправляете финальную версию вашего решения, которое увидят остальные участники сайта.

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

'codewars

  1. Самое популярное решение. В принципе, очень схожее с моим.
  2. “Умное” решение. Как видно, его понять несколько сложнее, чем пример выше.
  3. Можно поднимать репутацию решения, как “Лучшие практики”, если вы находите их таковыми. Но здесь это довольно спорно и не всегда объективно. Например, 419 человек отметили, что решение придерживается лучших практик написания кода. Но в нем отсутствует, например, проверка на тип введенных данных пользователем. Если он введет вместо числа какое-нибудь слово, то код уже не будет работать. Напомню, что в данном случае речь идет о JavaScript.
  4. Или можно отметить решение, как “Умное”. Но я уже выше писал про “умный” код - пусть он вас не подавляет, но учит.

Статистика#

'codewars

В правом верхнем углу вы можете увидеть:

  1. Сохраненные в избранное задачки.
  2. Уведомления, которые будут появляться крайне редко.
  3. Текущий разряд. 8 кю самый низкий, 1 кю - самый высокий, а после 1 кю идут 1 - 4 дан, это уже мастера.
  4. Очки репутации. Они даются за каждую решенную задачу, а также некоторые действия в сообществе. Чем больше очков, тем больше у вас привилегий, которыми вы пользоваться скорее всего не будете. Например, скрывать самостоятельно комментарии, если они содержат спойлер.

Перейдя в профиль можно ознакомиться со статистикой поподробнее:

'codewars

  1. Разряд.
  2. Очки репутации.
  3. Позиция в рейтинговой таблице.
  4. Процентный показатель репутации относительно других участников.
  5. Общее количество выполненных задач.
  6. Визуальное представление сколько еще осталось до следующего разряда. В моем случае я прошел только 15,2%.

Несколько слов о рейтинге. Несмотря на то, что на данный момент у меня 4 kyu, фактически я не могу еще решать задачи с таким же уровнем сложности. Более менее комфортно я себя чувствую на задачах уровня 6 kyu. 5 kyu уже заставляют меня поломать голову, но еще вполне могу решить. Как же так получилось, что у меня 4 разряд? Дело в том, что системе не важно, какой сложности задачи вы решаете. Главное - количество. Было бы логичнее, если бы прогресс учитывался при решении конкретных задач. Например, если я решил 30 задач 6 kyu, мне присваивают 6 разряд. А так, решая задачи только для 8 разряда вы получите 6-й. Просто это будет дольше. Чем ниже сложность задачи, тем меньше очков она дает.

Однако, цифра позиции в рейтинговой таблице куда интереснее. Глядя на нее вы можете вспомнить, как занимали ~234,567 место, но своими стараниями обогнали большинство участников этого сайта.

Напоследок, хочу посоветовать никогда не подсматривать ответы до того, как найти своё решение. Даже если несколько часов у вас ничего не получается, ответ может прийти завтра. И пусть ваш код не будет элегантным и коротким, но зато вы нашли нужный алгоритм самостоятельно и повысили свой уровень решения задач. А это самое главное. Сделать рефакторинг кода никогда не будет поздно. Игнорируйте мысли о том ,что всё должно быть идеально с самого начала. Особенно интересно получается, когда вы видите другое хорошее решение, в этот момент новая информация закрепляется намного эффективнее, чем, если бы узнали её не промучившись целый день над своим решением.

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

Успехов!