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