Отличия CodeWars и LeetCode

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

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

На codewars более 7 тысяч задач. Каждую задачу можно сдать только на том языке, на котором автор подготовил тесты. Лучше всего представлены JavaScript и Python. На 2024 год примерно такая статистика.

Подборки задач

По опыту моих учеников, для того, чтобы изучить язык программирования, нужно решить 150-200 задач, причем по разным темам. Из полутора тысяч задач на джаве, я смог набрать около 80, которые покрывают примерно половину тем: список задач по Java.

Гораздо лучше получилось с JavaScript. Из 5 тысяч задач удалось подобрать около 150. Список задач по джаваскрипту содержит как простые задачи на массивы и объекты (таких простых задач на литкоде практически нет), так и задачи на специфичные темы: объектно-ориентированное программирование, фунциональное программирование, рекурсия.

Минусы платформы

Решать задачи без определенного списка непродуктивно: 90% задач особо ничему не учат. При этом каждая задача должна быть самодостаточной, это правило платформы. Из-за этого нет каких подборок для обучения.

Задач на асинхронность на платформе нет. Если хотите разобраться с промисами, колбэками и асинхроннастью — приходите заниматься ко мне.

Также на кодварсе есть задачи «на алгоритмы». Это, как правило, задачи уровня 3 kyu и выше. Мы их не разбираем, потому что они не помогают достингуть главной цели — выучить язык и использовать его для рабочих задач. Для изучения алгоритмов лучше использовать литкод.

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

Задачи по темам

Формально литкод разделяет задачи по темам: бинарные деревья, списки, графы, очереди, префиксные суммы и так далее. Проблема в том, что теги с темами навешаны формально. Темы Array (1500 задач), String (600), Hash Table (500) ничего не дают.

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

Для того, чтобы хорошо подготовиться к собеседованиям требуется прорешать 300-500 задач, по 15-20 задач на каждую тему. У меня также есть список задач с литкода, где задачи разбиты по темам.

JavaScript на ликоде

На литкоде есть подборка задач именно по джаваскрипту — 30 Days of JavaScript — большую часть этих задач мы разбираем, когда идем по моей программе. Там есть хорошие задачи на таймеры и промисы, но их меньше по сравнению с моим списком. К тому же часть из задач закрыта платной подпиской.

Рекомендую начать решать литкод после прохождения основного курса по джаваскрипту и реакту и устройства на работу.

Итого

CodeWars — 5.5 тыс. задач по джаваскрипту и гораздо меньше по всем сотальным языкам. Из них я подобрал около 150 на все необходимые темы, включая джавскрипт-специфичные: ООП, ФП, работа с массивами и объектами. Алгоритмы изучать на codewars неудобно: нет нормального обсуждения решений и удобной навигации по темам.

LeetCode — 2 тыс. задач по алгоритмам. Это значит, что там очень мало простых задач, на которых можно было бы учить язык с нуля. А также, что там почти нет задач на this, замыкания, на которых можно было бы учить JS.

Codewars — для изучения языка, Leetcode — для изучения алгоритмов.