Во время обучения чему-либо часто сталкиваешься с тем, что забываешь, что вообще изучал, особенно детали. Мне 18, я решил 822 задачи на LeetCode со стриком 430+ дней. Количество решённого само по себе ничего не гарантирует, если через пару недель не можешь вспомнить логику без подсказки. Поэтому я решил создать этот проект, но это относится не только к литкоду, но и ко всему остальному.
Начнем с простого. Писать заметки — это вполне рабочий вариант, но здесь есть важный момент: заметки работают эффективно только тогда, когда они заставляют мозг перерабатывать информацию («эффект генерации»), а не просто копировать её.
А теперь подробнее. Начнём с важного заявления психологов Родигера и Карпике, авторов классического эксперимента по retrieval practice: студенты предсказывали, что многократное перечитывание материала даст лучшее долгосрочное запоминание, а активное вспоминание — худшее, хотя на практике всё оказалось ровно наоборот.
Возможно, для многих это очевидно, да? Да, но суть глубже.
Когда человек перечитывает текст несколько раз, при повторном чтении слова "узнаются" легче и быстрее — возникает субъективное чувство беглости (лёгкости обработки). Мозг путает эту лёгкость восприятия с реальным пониманием и прочностью запоминания. То есть "мне легко это читать" ошибочно интерпретируется как "я это знаю". На это важно обратить внимание.
Это работа Роберта Бьорка — он же автор концепции desirable difficulties ("желательных трудностей"): вещи, которые кажутся трудными и медленными в моменте (типа вспоминания без подсказок), реально дают куда более прочное обучение, чем лёгкие и приятные способы (перечитывание).
Источники: Generation Effect — Wikipedia; Generation Effect & Memory Encoding — PMC/NIH.
Но тут сразу хочется понять: а что за трудность? Я не думаю, что чем труднее, тем лучше результат — это глупость. У нас есть чёткая граница.
"Желательная" трудность — это трудность в процессе поиска/обработки информации, а не трудность в содержании или условиях.
Примеры:
Retrieval practice — трудно вспомнить без подсказки (но информация та же, просто путь к ней труднее)
Spacing effect — учить с интервалами, а не зубрить подряд (труднее, потому что забыл часть, но это заставляет мозг заново реконструировать связи)
Interleaving — чередовать разные темы/типы задач вместо блочной практики одного типа
Varying context — учить в разных условиях/форматах
Что НЕ является "желательной" трудностью:
Слишком сложный, непонятный текст, который просто выше уровня ученика
Плохо оформленный, нечитаемый материал
Отвлекающий шум, стресс, тревога во время обучения
Информационная перегрузка, когда рабочая память просто не справляется
Разница в том, что "желательная" трудность создаёт дополнительную, полезную ментальную работу поверх того же материала (усилие в обработке), а "вредная" трудность создаёт барьер к самому материалу (усилие тратится не туда — на дешифровку/фрустрацию, а не на закрепление).
То есть можно сделать вывод: трудность работает, только если это трудность самого усилия вспомнить/связать, а не трудность понимания материала или эмоциональный стресс. Простое усложнение текста или условий не даёт того же эффекта — граница очень тонкая, и именно поэтому нужен продуманный интерактивный формат
Как я попробовал это реализовать
Сначала важно оговорить сам формат: это не «выбери один правильный ответ из списка». Юзер получает набор карточек и должен собрать из них правильную последовательность — расставить шаги в нужном порядке.
Узнать текст здесь недостаточно: нельзя пройти на автомате, кликнув на знакомую фразу, нужно реально восстановить логику и порядок действий. Это уже ближе к активному вспоминанию, чем к простому узнаванию.
Так выглядит сам пазл — карточки нужно расставить в правильном порядке (от 3 до 11 стеков):

Что убрано (вредная сложность):
Это напрямую связано с cognitive load theory — рабочая память ограничена, и если тратить её на расшифровку формата задания (допустим как на leetcode), на само обучение ресурсов не останется.
Не нужно "с нуля" вспоминать формулировку — варианты уже даны текстом. Для общей структуры в голове этого более чем достаточно, нежели вспоминать всё с нуля — в долгосроке "с нуля" не будет эффективным, я бы сказал, это хорошо скорее для повторения.
Понятная структура — фиксированное число стеков, видно объём задачи
Нет угрозы "чистого листа", когда человек паникует от пустоты
Ошибка обратима — можно перетащить карточку по-другому, попробовать ещё, посмотреть краткое объяснение.
Источник: Cognitive Load Theory in CS Education — ACM.

Это снижает emotional/format difficulty — ту, что мешает вспоминать не потому что мозг работает, а потому что человек тревожится или не понимает, что от него хотят.
Что оставлено (полезная сложность — сам retrieval):
Нужно распознать правильную последовательность действий, а не просто узнать текст (это уже выше уровня узнавания — с 4-5 похожими по теме вариантами реальный сценарий заставляет действительно понимать логику, а не угадывать по ключевым словам)
Дистракторы (неправильные карточки) специально похожи по теме, но логически неверны — то есть система заставляет дискриминировать правильный retrieval cue от похожего, но неверного (это прямо то, о чём в статье Karpicke пишут про "cue diagnosticity" — способность подсказки указать именно на нужное знание, исключив конкурентов)
Ну тут получается двойная активная нагрузка, а не просто вспоминание.
Обычный retrieval — это "вспомни, что было в тексте", а тут ещё добавляется логика: дистрактор специально сделан похожим и звучит разумно, чтобы нельзя было пройти на автомате. Значит нельзя просто узнать текст по ключевым словам — надо реально включить рассуждение, почему один вариант верный, а похожий на него — нет.
Получается не одна нагрузка (вспомнить), а две (вспомнить + логически обосновать выбор), и вот это уже сильнее, чем чистый retrieval practice из эксперимента Карпике. Но это можно улучшать — некая база получилась типо. Если хочешь подумать над вариантами ответа, можешь нажать на кнопку с "?" и карточка выделится желтым.

Порядок имеет значение — то есть тестируется не просто факт, а понимание причинно-следственной цепочки.
Почему мозг сопротивляется этому методу
При активном вспоминании — наоборот: субъективно это неприятно, медленно, "я же не могу вспомнить, значит я плохо знаю материал" — и мозг делает ложный вывод, что метод не работает, хотя по факту именно трудность извлечения информации укрепляет память.
Мозг обманут собственным ощущением лёгкости — и это системная, хорошо изученная ошибка (на этом остановимся, этого достаточно). Вообще не важно, ленив мозг или нет (это следствие в основном), а важно то, почему так произошло — то есть провести анализ ошибки.
Что дальше
Сейчас я развиваю два проекта параллельно — оба планирую делать всю жизнь, и они работают как экосистема: то, что придумываю в одном, отражается в другом.
Пользуюсь сам почти каждый день, и то, ради чего всё затевалось, начинает работать: возвращаюсь к теме через пару дней, или недель — и вспоминаю логику сам, а не читаю заново.
Из того, что уже есть:
500+ задач по темам — устройство HashMap, Java concurrency, архитектуры MVC/MVP/MVVM, компьютерные сети, базы данных и другое
Планы обучения — треки подготовки к собесам (Java, Go, Python, Frontend и тд) с отслеживанием прогресса
Сообщество — лента, где пользователи делятся прогрессом, постами и тд
Кому интересно, можете зайти и чекнуть selfuniversity. Или отсюда - тгк
Есть приложение под андроид + PWA iOS
Скоро добавлю новые типы пазлов — 2D-пазлы для кибербеза и leetcode-style задачи. Об этом — в следующем посте, когда доделаю.
sN00b
Потыкал. Выглядит прилично. Сам делаю нечто на подобии для себя, т.к. не нашлось нормальной платформы для подготовки к собесам.
dima853 Автор
попробуй порешать пару дней, лично у меня довольно быстро откладывается структура в голове, помогает изучать/повторять темы.
вот пример с литкодом, я решаю задачи, могу написать код за минуту но при этом со временем забываешь суть, смысл задачи, и это большая проблема. Я щас делаю как раз типо литкод пазлы где можно решить задачу логикой, тоесть вспомнить ее без написания кода.
Все это очень хорошо сокращает время для подготовки к собесам.