In my experience, learning something hard without applying it to a real problem during several weeks or months, spending hours trying to solve weird errors is impossible.
Keep in mind that learn something is very different to understand something. Maybe I understand functional programming, but if I haven't worked on a real project that uses a functional programming language, I probably suck at it.