The struggle is the key! I wholeheartedly agree with that, and you have to love the struggle in order to get really good with something.
Finding things to work on...to solve...that are the right level of difficulty can be a challenge at the beginning. I think not knowing what to try to solve and where to look for those opportunities is one of the main barriers to starting and leads to a lot of the fear of just jumping in. Because of that, I actually think that studying those tools (such as how to write a linked list from scratch using JavaScript) could be a great thing to do. It has been for me. But, I agree that it's only part of the equation.
Until those "real" problems come along, or you go out and find them, doing basic exercises like reversing strings, and other hits, can be a great way to just start writing code...and they end up being very valid and real in the scheme of things.
I like the analogy of woodworking a lot with this. There is definitely something deeply satisfying in sharpening your favorite plane or spokeshave and just taking thin curls off of a board. It's meditative, and you can lose hours in trying to get the perfect shavings and a perfectly flat board. That IS studying your tools, but it's studying them by using them. And it's studying the way you use them as well. You can gain a lot of benefit and skill from just working on a scrap board that isn't meant for a bigger project. However, you won't make anything "of use" until you try to do exactly that...over and over again.
Jumping into a CodePen or a JSFiddle and just writing some code can be a lot like planing a scrap board. You might not use that piece of wood in a project you build, or maybe you will. Either way, you'll gain skill and be a better woodworker / coder for the struggle you put in.