A very recognizable problem!
While I'm definitely still trying to figure this out for myself, here are a few of my thoughts and experiences:<p>1) books usually trump courses
books are much easier to browse through. pick and choose what you need. Do make notes, or in 6-12 months it will be like you had never read it at all.
Courses seem nice in that they offer varied learning - a lecturer, assignments, a forum for questions, a shiny certificate at the end.. but you have little control over pacing, and there just aren't enough solid ways to judge beforehand if the course is any good. Trudged through many hours of bad/repetitive content before I understood this :)<p>2) don't memorise specifics, understand design choices
if you haven't done so already, I can really recommend looking into how languages are built - what are the paradigms / design choices. I'll even recommend a MOOC: <a href="https://www.coursera.org/learn/programming-languages" rel="nofollow">https://www.coursera.org/learn/programming-languages</a>.
A focus on design makes it much easier, at least in my experience, to pick up a new language and become an 'expert' at it; nobody will turn to you for help writing a loop or grokking a few conditionals (I hope). But understanding, let's say, prototypal inheritance in JS and how this differs from other languages, or the effect of having (or lacking) functions as first-class citizens, figuring out what are the language core concepts and what is just syntactic sugar - this let's you reason about languages and problems on a whole different level.<p>3) if you have the opportunity; coach/teach
trying to teach stuff to a few interested souls is a stellar way to force yourself to order your thoughts. Pick something that's right at the edge of your audience's skill level, and explain it in the cleanest, concisest way you can. It's a win-win, in my experience.<p>4) create something
the hardest part about learning a new language is not the language specifics, but learning the ecosystem. What are the tools and libraries you must use or avoid, what is the right dev setup, how do you build/deploy, and in some god-forsaken cases, how do you even version control a project? The only way to really learn this imho is to just start building a small project.<p>These are only partial solutions; it still takes a lot of time and effort, and I probably haven't come close to maximising efficiency of self-study :). Don't forget to have fun though!<p>Looking forward to reading more about this.