What I meant is this:
As you can see, the amount of time required to enhance your skill right from the kickoff is genuinely steep, that is, with a little amount of time, you're able to posses lots of knowledge/skill.
when your skill levels at a certain scale, the graph moves much more gently, which probably close to a parallel of the x-axis. This, is when things get ridiculously hard.
By the way, the graph aren't quite illustrating what I'm saying, so let's change it:
Aha! Now this does a great job emphasising what I meant.
You should definitely watch the following video:
For now, I would give you the resources to it's concept, tune up for next post in regards to practices!
It's a reference book and yet free! You can read it online here, or get your own paperback copy of it. There's a decent amount of exercise on some it's chapters, and you can play around with it's Code Sandbox. The Hack Reactor suggest you to read chapter 1 - 5 before proceeding to their technical interview.
Once you reach an intermediate state, you might find yourself need to find the perfect design pattern out there. The design that would gives your code the desired maintainability, reusability, and reliability to solve existing problems.
I'll gradually add this list by time.