Все эти Leetcode, Codewars, Яндекс.Контест и т.д. В целом всё сводится к бесконечному решению разнообразных задач. Но есть одно большое НО.
Проблема номер один - читаемость и поддерживаемость кода не является критерием решения задачи. Человек, который долгое время сам для себя решал задачи потом начинает производить на свет в каждом своём МР что то в стиле:
result = reduce(lambda acc, x: acc + [x**2 if x % 2 == 0 else x**3], filter(lambda y: y > 0, map(lambda z: z * -1 if z < 0 else z, range(-10, 10))), [])
Попробуй разберись, что он хотел этим сказать… Но ведь работает, правда? А еще и эффективнее на 0.01мс, чем обычный цикл! Ох уж эти lambda-filter-reduce программисты 😘
Проблема номер два - большую часть из решенных задач ты забудешь. Если ты год назад смог написать какой либо алгоритм, не факт, что через год ты его легко напишешь снова.
Эффективнее было бы вложить это время в пет-проект на незнакомом стеке, потыкать незнакомые паттерны, запроектировать всё это дело и довести до ума. По ходу всегда возникают проблемы и их решение - как раз то, что пригодится в дальнейшем для стандартного роста Junior → Middle → Senior → Архитектор/Тех.Лид.
Выбор оптимального стека и хорошая архитектура - самые важные решения. Для этого нужен определенный кругозор. И тебя будут осуждать в первую очередь за то, что проект превратился в неподдерживаемое говно, а не за скорость твоего кода. Заниматься оптимизацией нужно точечно и только тогда, когда это реально необходимо.
Так что ко всем этим решалкам задач стоит относиться как к отдельному хобби. Да, может быть полезно, но не факт. Если нравится, то почему бы и нет. Просто не нужно питать илюзий, что это лучшая и универсальная таблетка для роста скиллов.