Отличия CodeWars и LeetCode
Я более 5 лет использую оба сервиса для обучения людей фронтенду и подготовке к алгоритмам. Соответственно, подходят они для разных целей.
Оба сервиса работают примерно одинаково. Есть задачи по программированию, к ним нужно писать решения, которые пройдут автотесты: ваша функция запускается с конкретными данными и проверяется, что ваш ответ совпал с ожидаемым.
CodeWars
На codewars более 7 тысяч задач. Каждую задачу можно сдать только на том языке, на котором автор подготовил тесты. Лучше всего представлены JavaScript и Python. На 2024 год примерно такая статистика.
- JavaScript — 5.5 тыс, Python — 5.5 тыс, Ruby — 3 тыс
- Java — 1.5 тыс, C — 1.5 тыс, PHP — 1 тыс
- Go — 0.7 тыс, Swift — 0.3 тыс
Подборки задач
По опыту моих учеников, для того, чтобы изучить язык программирования, нужно решить 150-200 задач, причем по разным темам. Из полутора тысяч задач на джаве, я смог набрать около 80, которые покрывают примерно половину тем: список задач по Java.
Гораздо лучше получилось с JavaScript. Из 5 тысяч задач удалось подобрать около 150. Список задач по джаваскрипту содержит как простые задачи на массивы и объекты (таких простых задач на литкоде практически нет), так и задачи на специфичные темы: объектно-ориентированное программирование, фунциональное программирование, рекурсия.
Минусы платформы
Решать задачи без определенного списка непродуктивно: 90% задач особо ничему не учат. При этом каждая задача должна быть самодостаточной, это правило платформы. Из-за этого нет каких подборок для обучения.
Задач на асинхронность на платформе нет. Если хотите разобраться с промисами, колбэками и асинхроннастью — приходите заниматься ко мне.
Также на кодварсе есть задачи «на алгоритмы». Это, как правило, задачи уровня 3 kyu и выше. Мы их не разбираем, потому что они не помогают достингуть главной цели — выучить язык и использовать его для рабочих задач. Для изучения алгоритмов лучше использовать литкод.
LeetCode
На литкоде уже почти 3 тысячи задач. Их количество растет из-за регулярных соревнований на платформе, каждое из которых еженедельно добавляет несколько новых задач. Мне кажется, для подготовки к интервью можно рассматривать первые тысячу-полторы задач.
Задачи по темам
Формально литкод разделяет задачи по темам: бинарные деревья, списки, графы, очереди, префиксные суммы и так далее. Проблема в том, что теги с темами навешаны формально. Темы Array (1500 задач), String (600), Hash Table (500) ничего не дают.
В теме Heap (куча, очередь с приорететами) находится 150 задач, две трети из которых потенциально могут решаться с помощью кучи, но это не самое оптимально и не самое понятно решение. Из 150 задач я смог подобрать примерно 15 задач, которые действительно пользуются возможностями кучу.
Для того, чтобы хорошо подготовиться к собеседованиям требуется прорешать 300-500 задач, по 15-20 задач на каждую тему. У меня также есть список задач с литкода, где задачи разбиты по темам.
JavaScript на литкоде
На литкоде есть подборка задач именно по джаваскрипту — 30 Days of JavaScript — большую часть этих задач мы разбираем, когда идем по моей программе. Там есть хорошие задачи на таймеры и промисы, но их меньше по сравнению с моим списком. К тому же часть из задач закрыта платной подпиской.
Рекомендую начать решать литкод после прохождения основного курса по джаваскрипту и реакту и устройства на работу.
MaxCode (JavaScript)
На maxcode.dev более 150 задач по джаваскрипту, покрывающих основные темы: работа с данными (массивы и объекты), рекурсия, ООП, функциональное программирование, асинхронность. По сравнению с литкодом и кодварсом тут количество задач, но сами задачи составлены лучше.
Также на сайте есть программа обучения и шпаргалка по методам, то есть понятно, для изучения какого метода нужна та или иная задача.
Еще одно важное преимущество — в отличие от кодварса и литкода — описания задач и результаты тестов даны на русском языке. Для каждой задачи есть список методов, которые можно использовать в решении, и правильное решение.
Итого
CodeWars — 5.5 тыс. задач по джаваскрипту и гораздо меньше по всем сотальным языкам. Из них я подобрал около 150 на все необходимые темы, включая джавскрипт-специфичные: ООП, ФП, работа с массивами и объектами. Алгоритмы изучать на codewars неудобно: нет нормального обсуждения решений и удобной навигации по темам.
LeetCode — 2 тыс. задач по алгоритмам. Это значит, что там очень мало простых задач, на которых можно было бы учить язык с нуля. А также, что там почти нет задач на this, замыкания, на которых можно было бы учить JS.
MaxCode — 150 задач по джаваскрипту, включая асинхронность (промисы, колбэки, event loop). Есть план обучения, задачи разбиты по темам. Условия задач на русском языке. Есть подсказки, какие методы лучше использовать в решении.