Если вам о чём-то говорят фамилии Зив, Хомченко и Рымкевич, иди сюда, дай обниму, бедолага-олимпиадник, то вы наверняка знаете, как важно прорешивать задачи для полноценного, осознанного и глубокого понимания изученного материала. Когда нет или совсем мало реальной практики, задачи дают возможность покрыть практикой все теоретические знания, погрузиться в неожиданные выводы, сложности, баги, препятствия. Более того, даже если практики достаточно, задачи помогают относительно быстро, комплексно и глубоко проработать типичные и нетипичные ситуации, возникающие в разработке (любой другой науке). Это всегда безопасный (никто не взрывает лабораторию и не роняет прод), доступный и удобный способ подробно разобраться в предмете. Определённо, программирования это касается в первую очередь.

Как решать задачи?

Большинство сайтов из этого дайджеста предоставляют удобные и интуитивные интерфейсы для работы с кодом онлайн, и, кажется, этого вполне достаточно. Но такая практика быстро выветривается из головы: на 12-15 задаче ты уже напрочь не помнишь даже формулировку первых, не то что свои выводы и находки. Это неудобно и иногда сводит все старания на нет.

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

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

  • Перед новым подходом просмотрите предыдущие записи, освежите в памяти решённое.

  • Если вы нашли изящный путь решения, обязательно используйте его в дальнейшем. Старайтесь, как и в математике, найти наиболее рациональное и даже красивое решение. 

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

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

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

  • Помните: путь в любую разработку начинается с hello world. 

???? Kaggle — сайт содержит множество исследовательских задач, связанных с машинным обучением и большими данными. Особенно ценно то, что на Kaggle можно найти крутые датасеты, код и материалы для самостоятельного изучения и тренировок.

???? Codewars — сборник задач и челленджей по широком спектру тем: алгоритмам, проектированию, паттернам, различным языкам программирования.

???? LeetCode — популярный сайт с задачами, который особенно любят соискатели, мечтающие о работе в FAANG. Отличается от остальных тем, что решение задач нацелено именно на подготовку к собеседованиям в крупных компаниях. 

???? Codeforces — популярнейший сайт с задачами, тренировками, соревнованиями (раундами) и прочими активностями для прокачки практики программирования. Кроме того, что позволяет решать всё про всё и содержит одну из крутейших баз заданий, имеет развитое сообщество, систему рейтинга и множество встроенных элементов геймификации.

???? Exercism — классический задачник для 67 языков программирования. Подразумевает геймификацию, систему менторинга, обучение и т.д. При таких параметрах, конечно, имеет своё коммьюнити (хоть и не такое впечатляющее, как у предыдущих ресурсов).

???? All Cups — соревновательно-обучательно-решательный портал с множеством задач от VK. Включает задачи по спортивному программированию (привет участникам олимпиады!), машинному обучению, искусственному интеллекту и, что особенно важно, по системному администрированию и всяческому хайлоаду. Если так можно сказать, это самый комфортный сайт для русскоязычного программиста (но мы же помним, что без английского далеко всё равно не уйти, даже здесь).

???? Задачи для программистов — раздел задач на ТПрогере, который включает задачи и их разбор от компаний и пользователей. Ещё один комфортный русскоязычный ресурс с форматом статей-разборов.

???? SQL-EX.ru — совершенно вырвиглазный сайт с наикрутейшими задачами и базой знаний по SQL. Отличное русскоязычное сообщество, справочники, учебники, обсуждения, статьи и книги. Настоящий мир SQL, пригодный как для школьника, так и для старшего инженера и разработчика. 

???? Питонтьютор — интерактивный учебник-задачник по Python с задачами разной сложности. Русскоязычный, приятный, пошаговый и комфортный. Отличная помощь начинающим (и не только) питонистам.

Подборки от авторов Хабра — где-то есть неактуальные ссылки, но в целом подборки полезные.


P.S. Если вы давно хотели написать статью на Хабр, но сомневаетесь в своих силах или качестве материала, пишите мне в личку или присылайте черновик и свои вопросы на neo@habr.team — поможем, подскажем, дадим редакторский совет.

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


  1. Javian
    01.04.2023 18:21
    +19

    Эх... С Рымкевичем я знаком с ранних лет:

    Рука автора. Подлинник.
    Рука автора. Подлинник.


    1. Krasnoarmeec
      01.04.2023 18:21
      +4

      Так, коллега. Не понял. В 1988 году Вам было 10 лет, а тут каркули 2х летнего ребёнка. Что-то не сходится.


      1. PuerteMuerte
        01.04.2023 18:21
        +21

        Возможно, он, как и все приличные 10-летние парни, нарисовал там член, но потом подумал, что у бати ремень тяжёлый, и применил методы стеганографии.


      1. Javian
        01.04.2023 18:21
        +1

        Похоже меня подставили. Надо серьезно поговорить с родителями. Всегда старший виноват :)
        P.S.Дата в профиле указана от балды ;)


  1. Panov_Alexey
    01.04.2023 18:21
    +8

    В первом предложении незаслуженно забыли легендарный сборник Сканави!)


    1. lynxBios
      01.04.2023 18:21

      Кстати, да! Как могли Сканави не упомянуть?


      1. Exosphere Автор
        01.04.2023 18:21
        +2

        Посыпаю голову пеплом, забыла - потому что почти с ним не занималась в школе. У меня был упор на химию, биологию и олимпиады по физике. Математика продвинутого уровня была коньком соседней школы и уж точно не моим (а по Зиву меня мама гоняла, чтобы я не до конца расслаблялась) :-(


    1. 631052
      01.04.2023 18:21
      +2

      и Гольдфарба


      1. Scott_Leopold
        01.04.2023 18:21
        +3

        А Демидович-то, Демидович!


    1. TimGaleev
      01.04.2023 18:21

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


  1. LedIndicator
    01.04.2023 18:21
    +6

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


    Во-первых, многие задачи имеют легенду и графическое представление. То есть, такая миниигра, и в результате успешного решения видишь не унылое accepted, а как Индиана Джонс проходит лабиринт, например.


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


    В-третьих, всякие лычки, ачивки, возможность делать код-ревью, комментировать и апрувить создателей заданий. То есть, своего рода карьерный рост. Вроде ерунда, но цепляет: дай-ка решу пятнадцатую задачу на языке X++ и повешу себе медаль "X++ addicted".


    Разумеется, поддержка множества языков (на литкоде, например, я хаскеля не нашёл), внимание со стороны работодателей, ну и ещё там всякие плюшки.
    Крутой ресурс.


  1. HemulGM
    01.04.2023 18:21
    +3

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


    1. asked2return
      01.04.2023 18:21
      +1

      на картинке Niklaus Wirth


    1. 0xd34df00d
      01.04.2023 18:21
      +6

      И начать, конечно, с основ математики. Прямо сразу с Бурбаки.


    1. Hlad
      01.04.2023 18:21
      +1

      На превью - программа, у которой нет цели, только путь.
      S - вычисляется, но не выводится.


      1. HemulGM
        01.04.2023 18:21

        Да, я это заметил)


  1. 631052
    01.04.2023 18:21
    +1

    я б картинки местами поменял..

    в начале обучения-то.

    ожидание - нечто боле-мене понятное с иксом и игреком

    реальность - какая-то жуть, где вообще ничего нельзя понять


  1. kchhay
    01.04.2023 18:21
    +1

    Есть еще неплохой (имхо) украинский проект eolymp.com. Там хорошая база задач с сортировкой по темам.


  1. TyVik
    01.04.2023 18:21

    Вместо leetcode мне больше нравится hackerrank.


  1. TilloTill
    01.04.2023 18:21
    +3

    Кстати, для разработчиков на 1С тоже есть похожий аналог. Как всегда у 1Сников – все свое)


    1. FollowerOfDarkness
      01.04.2023 18:21

      Все свое ношу с собой)


  1. endpoints
    01.04.2023 18:21
    +2

    Самый лучший сервис это самому пилить ком проекты, хочешь не хочешь придётся решать всевозможные задачи


  1. feycot
    01.04.2023 18:21

    В список можно еще добавить Codebattle. https://codebattle.hexlet.io/
    В отличи от CodeWars в нем можно сразу видеть код оппонента. Что дико драйвовит. Задачки ранжируются по сложности и можно играть против ИИ.