В конце 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)
Sevensenn
18.01.2018 08:12Добавлю:
Sphere Online Judge
Code Abbey
Project Euler 1/3 доступна на HackerRank и на Codewars
POJ Peking University
CodeEval отчасти
Kaggle тоже можно использовать для практики
Checkio
Exercism
lanseg
18.01.2018 10:36А в topcoder уже можно решать задачки без участия в соревнованиях?
Ну и интерфейс — когда я в последний раз туда заходил, он был невероятно ужасен, хуже только фейсбук.
rockon404
18.01.2018 12:34Попробовал codewars. Дошел до 5kyu и надоело. Причем надоело даже раньше, чем бросил раньше, какое-то время еще писал задачи для прокачки рейтинга. Проблема, что все задачи очень похожи, можно выделить всего несколько типов, причем абсолютно все легко решаемые, с определенным уровнем подготовки, а сложность, зачастую, лишь показатель того сколько ты убьешь на написание кода времени. Это на всех ресурсах так или есть проекты с задачами поинтересней?
nobodyhave
18.01.2018 14:28+1Посмотрите на вторую половину списка, где сложность помечена как Intermediate — Advanced. На этих сайтах есть как базовые задачки, так и весьма любопытные.
В частности Hard и выше задачки на Hackerrank, Hard задачки на Leetcode, Medium и выше на Codechef.
Aquahawk
18.01.2018 15:39Есть полностью русскоязычный acmp.ru/index.asp?main=tasks и там много прикольных алгоритмических задач. Да в основном рассчитан на учащихся, но задачи отсортированы по тематикам и сложности. Выбор языков не так уж и широк, но для начинающих вполне достаточен.
AlexEx70
18.01.2018 17:08По-моему, решение задачек на этих сайтах сродни решению сканвордов и кроссвордов. Неужели кому-то в IT не хватает реальных задач?
nobodyhave
18.01.2018 18:04+1К сожалению, некоторые люди решают реальные задачи через заднее место, абсолютно не задумываясь о том, что же они творят. И им бы хорошо было бы как раз порешать задачи начального/среднего уровня, чтобы не делать банальных глупостей.
Как пример, реальная ситуация, которую пришлось решать. Мобильное приложение умирало при добавлении нескольких тысяч элементов в список. Вскрытие показало, что элементы добавляются по одному. На каждый вызов элемента вызывается сортировка всего списка. На каждый вызов метода сравнения в компараторе вызывается полный просмотр другого списка поменьше, на 10-100 элементов). Теперь посчитаем сложность при размере одного списка N и второго M.
Добавляется N элементов. Сортировка на каждое добавление NlgN, итого уже (N^2)lgN. Ну и раз при каждом сравнении мы пробегаем по другому списку, получаем (N^2)*M*lgN. И все вот этого просто для создания сортированного списка с некоторыми проверками при сортировке. После рефакторинга значение, которое искали в коротком списке было закешировано, ибо не менялось, а добавление с сортировкой превратились в TreeSet. И стало все N*lgN.
wxmaper
Из 10 штук ни одного русскоязычного… Печальная статистика.
TheKnight
Ээээээ… Codeforces. Создана Мишей Мирзаяновым. Русскоязычен. Почти все задачи формулируются на двух языках — русском и английском.
Мне кажется, вы несколько переутомились и устали в это прекрасное январское утро. Вам стоит отдохнуть.
webdevelopacc
… и немного подтянуть английский — потом еще спасибо себе скажете;