I'll never understand the obsession with reading so many books and doing so many courses.
2. You don't know JS series - because depth
Then you're done. Go find a Node or front end framework tutorial and blast off from there. Build build build.
It's nice to know some historical context around this/hoisting. But it will come up in YDKJS too. Start your journey on ES6.
Learning a language is usually not too difficult. Getting to the point where you understand how to 'think' in that language can take months.
It's why, when exploring a new language I usually hunt out 'Designing in <framework>' or 'Writing components for <framework>' courses and books. It is the way you glue together an application that is key.
But language books? I don't really see the value beyond the beginner level. Every a-ha moment for me comes from building something out of my comfort level and then reading other people's approach to the same sort of solution.
So this way, I "fill in the blanks" with what I want to implement, knowing that an error or unexpected behavior is entirely my misunderstanding of the logic and not my misunderstanding of the language.
- Profiling CPU and memory: preventing and mitigating resource leaks.
- Robustness: Input validation, error handling, logging.
- Event handling and construction of finite state machines: defining states and transitions and validating them.
- Using a sane coding standard. Like Google's JS standard rather than the self proclaimed "standard" from feross.
The "request" npm module for example, is a FSM where states are defined by a combination of flags. However you can obtain states that are not handled by the library, because the FSM is constructed poorly without validating state transitions. That is a very common theme in npm modules.
From Axel Rauschmayer: http://www.2ality.com/p/about.html