В конце 2016 года была опубликована аналогичная статья. С тех пор список был обновлен на основе наблюдений и анализа нескольких ресурсов (постов в популярных блогах, обсуждений на Quora, поисковых запросов в Google и обсуждений на форумах, таких как reddit/learnprogramming и Hacker News).

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

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

1. Coderbyte




Beginner? — ?Intermediate

Coderbyte предлагает 200+ соревновательных задач, которые вы можете решать в онлайн-редакторе, используя 10 различных языков программирования. Вы сможете ознакомиться с официальными решениями для некоторых задач, а также найти более 800 тысяч пользовательских решений. Coderbyte рекомендован командами многих известных образовательных курсов по программированию благодаря коллекции задач, полезных для подготовки к собеседованию.

2. Codewars




Beginner ?— Intermediate

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

3. CodeFights




Beginner ?— Intermediate

CodeFights — платформа, состоящая из коллекции задач, которые можно решать в онлайн-редакторе, и форума пользователей для обсуждения возникающих проблем. Отличительной особенностью является функция «Company Bots». Это возможность конкурировать с «ботами», которые были запрограммированы инженерами крупных технологических компаний. Вы когда-нибудь задумывались, насколько ваши навыки программирования соответствуют стандартам инженеров из Uber, Dropbox, Quora и других высокотехнологичных компаний? Посоревнуйтесь с этими ботами и узнайте. Не думайте, что это будет легко. Чтобы сделать соревнование более интересным и сложным, каждый из вопросов, с которым вы столкнетесь, настраивается под определенную компанию. Например, в соревновании с Uberbot, ожидайте заданий, связанных с алгоритмами маршрутизации и планирования.

4. CodinGame




Beginner ?— Intermediate

Этот сайт отличается от перечисленных выше тем, что вместо обычного решения, на CodinGame вы пишете код непосредственно для того, чтобы сыграть в онлайн-игру. Это увлекательно и некоторые из игр очень забавны (см. пример). Игровая графика хороша, а пользовательский интерфейс редактора/игры очень плавный. В целом, это отличный веб-сайт для новичков, изучающих программирование.

5. TopCoder




Intermediate — Advanced

TopCoder — одна из первых платформ для соревнований по онлайн-программированию. Популярные Single Round Matches происходят несколько раз в месяц в определенное время. Это возможность посоревноваться с другими разработчиками. Вот несколько тем, которые могут быть затронуты.

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

6. HackerRank




Intermediate — Advanced

HackerRank сосредоточен на вопросах из многих областей информатики, таких как алгоритмы, математика, SQL, функциональное программирование, AI и многое другое (см. пример). Для каждой задачи создается обсуждение и таблица лидеров. Большинство задач начинаются с предисловия, в котором глубже описывается проблема и то, как подойти к ней, чтобы придумать решение.

Крупные работодатели, которые сотрудничают с ресурсом — Cisco, VMware, Red Hat, Dropbox и еще более 1000 других компаний, имеют возможность отфильтровать кандидатов, провести с помощью платформы техническую часть собеседования и увидеть соискателя «в деле».

7. LeetCode




Intermediate — Advanced

В LeetCode собрана одна из лучших коллекций задач на применение алгоритмов. Темы, которые охватывают задания, требуют знания структур данных (binary trees, heaps, linked lists, etc.) Задачи более сложные, чем на других сайтах, но они окажутся очень полезными, если использовать их при подготовке к собеседованию.

Раздел "Mock Interview" (Пробное интервью) специально предназначен для подготовки к собеседованию. Также проводятся соревнования по программированию, и есть раздел статей, который поможет вам лучше понять определенные задания.

8. CodeChef




Intermediate — Advanced

CodeChef — это некоммерческая образовательная инициатива индийской софтверной компании. Это глобальное сообщество программистов, объединенное целью обучения и дружеской конкуренции в рамках платформы для соревновательного программирования.

Каждый месяц CodeChef проводит три конкурса и раздает призы победителям в качестве поощрения. Кроме того, платформа открыта для всего сообщества разработчиков, которые могут проводить свои собственные конкурсы. Организации по всему миру в среднем проводят 30+ внешних турниров и конкурсов на CodeChef.

9. GeeksforGeeks




Intermediate — Advanced

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

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

10. Codeforces




Advanced

Codeforces — российская платформа для соревнований по программированию, на которой регулярно проводятся турниры, в которых участвуют одни из лучших программистов в мире. Если вы начинающий кодер, задания, скорее всего, будут слишком сложны для вас — вот пример из недавнего соревнования. Для решения этих задач обычно требуются передовые знания в области математики и алгоритмов.

Цель Codeforces — предложить разработчикам удобную платформу для создания, проведения и обсуждения соревнований по программированию. В платформе есть элементы социальной сети, это больше чем новостной портал и больше чем online judge. Вы сможете самостоятельно подготовить и провести соревнование. Вы сами решите, будет оно открыто для всего мира или будет локальным соревнованием вашего университета.

Комментарии (13)


  1. wxmaper
    18.01.2018 05:17

    Из 10 штук ни одного русскоязычного… Печальная статистика.


    1. TheKnight
      18.01.2018 05:30

      Ээээээ… Codeforces. Создана Мишей Мирзаяновым. Русскоязычен. Почти все задачи формулируются на двух языках — русском и английском.
      Мне кажется, вы несколько переутомились и устали в это прекрасное январское утро. Вам стоит отдохнуть.


      1. webdevelopacc
        18.01.2018 09:33

        … и немного подтянуть английский — потом еще спасибо себе скажете;


  1. Sevensenn
    18.01.2018 08:12

    Добавлю:
    Sphere Online Judge
    Code Abbey
    Project Euler 1/3 доступна на HackerRank и на Codewars
    POJ Peking University
    CodeEval отчасти
    Kaggle тоже можно использовать для практики
    Checkio
    Exercism


  1. dro1d
    18.01.2018 09:23

    Что насчет acm.timus.ru? Когда то был весьма популярен.


  1. GeraJet
    18.01.2018 09:46

    Можно добавить SoloLearn


  1. lanseg
    18.01.2018 10:36

    А в topcoder уже можно решать задачки без участия в соревнованиях?
    Ну и интерфейс — когда я в последний раз туда заходил, он был невероятно ужасен, хуже только фейсбук.


  1. rockon404
    18.01.2018 12:34

    Попробовал codewars. Дошел до 5kyu и надоело. Причем надоело даже раньше, чем бросил раньше, какое-то время еще писал задачи для прокачки рейтинга. Проблема, что все задачи очень похожи, можно выделить всего несколько типов, причем абсолютно все легко решаемые, с определенным уровнем подготовки, а сложность, зачастую, лишь показатель того сколько ты убьешь на написание кода времени. Это на всех ресурсах так или есть проекты с задачами поинтересней?


    1. nobodyhave
      18.01.2018 14:28
      +1

      Посмотрите на вторую половину списка, где сложность помечена как Intermediate — Advanced. На этих сайтах есть как базовые задачки, так и весьма любопытные.
      В частности Hard и выше задачки на Hackerrank, Hard задачки на Leetcode, Medium и выше на Codechef.


  1. Aquahawk
    18.01.2018 15:39

    Есть полностью русскоязычный acmp.ru/index.asp?main=tasks и там много прикольных алгоритмических задач. Да в основном рассчитан на учащихся, но задачи отсортированы по тематикам и сложности. Выбор языков не так уж и широк, но для начинающих вполне достаточен.


  1. AlexEx70
    18.01.2018 17:08

    По-моему, решение задачек на этих сайтах сродни решению сканвордов и кроссвордов. Неужели кому-то в IT не хватает реальных задач?


    1. Tsimur_S
      18.01.2018 17:12

      Да, интервьюирующим программистов.


    1. nobodyhave
      18.01.2018 18:04
      +1

      К сожалению, некоторые люди решают реальные задачи через заднее место, абсолютно не задумываясь о том, что же они творят. И им бы хорошо было бы как раз порешать задачи начального/среднего уровня, чтобы не делать банальных глупостей.
      Как пример, реальная ситуация, которую пришлось решать. Мобильное приложение умирало при добавлении нескольких тысяч элементов в список. Вскрытие показало, что элементы добавляются по одному. На каждый вызов элемента вызывается сортировка всего списка. На каждый вызов метода сравнения в компараторе вызывается полный просмотр другого списка поменьше, на 10-100 элементов). Теперь посчитаем сложность при размере одного списка N и второго M.
      Добавляется N элементов. Сортировка на каждое добавление NlgN, итого уже (N^2)lgN. Ну и раз при каждом сравнении мы пробегаем по другому списку, получаем (N^2)*M*lgN. И все вот этого просто для создания сортированного списка с некоторыми проверками при сортировке. После рефакторинга значение, которое искали в коротком списке было закешировано, ибо не менялось, а добавление с сортировкой превратились в TreeSet. И стало все N*lgN.