What is the best approach to learning things in CS?
The best approach to learning just about everything is twofold. You need to practice and you need feedback on your attempt. You learn by reinforcement, not by seeing something once. This is why coursework depends on student exercises, not just lectures and textbooks. 

So, to learn a new thing, I suggest that you first get an overview idea of it, say from some internet readings or a book. Don't go too deep into it yet. Then, find a project that you can build using that technology and work on that. Go back to readings and such as necessary when you get stuck, but make the project and its completion a learning goal. Your readings may suggest a project, actually, but don't use too much of the explanation of the project, or especially its solution, to guide you. Build it yourself. 

But that doesn't solve the "feedback" problem. This is always difficult for self learners. "How do I know I've done the right thing?" Perhaps you can find a more experienced person to give you feedback. A teacher or professor with wide experience is probably best. But you can also try to find or form a group of people with similar interests that you can meet with to share ideas. 

In the absence of other things, if you can find an actual text book on the topic, it will probably have exercises. Do as many of them as you can find time for, without reference to any answer key. Find a way to verify your answers (feedback), even if it is just a testing framework that verifies your intent. 

I'll also note that learning on your own is difficult for other reasons. Suppose you know A and want to learn B. Your approach to B will probably be heavily influenced by what you already know of A. But that may not be the best approach. Knowing the C language and trying to learn Scheme, for example, requires a clear break with what you already know and you need to take a new mental approach. Even moving from one language like Java to a "similar" one like Python, requires a fair amount of rethinking.