Welcome to the forum! I also started out on Codewars and graduated to using JUCE a little more than a year ago. It was tough going for me at first, but lots of fun, and a great chance to learn a new art form.
You’ll find tons of things that you need to know about C++ “before” you start using JUCE, but don’t let them stop you from using it right away! The important thing is to get yourself in a position where you can learn as you go. I think the best thing you can do is get friendly with the JUCE documentation–it might seem intimidating at first, but in fact it’s a gold mine. Also go through some of the tutorials, if you haven’t done so already, and feel free to post questions here, even if they’re beginner level.
To give a direct answer to your question, I would say that the one thing you need to know inside out is inheritance. Many JUCE classes are built to be inherited, and so you’ll need to know how to inherit, how to override virtual functions, etc. (Having said this, knowing when not to inherit is just as important as knowing when to inherit).
I would say that templates aren’t that important. You’ll need to fill out a few template parameters now and then (ie.
Array<SomeClass>), but beyond that you rarely need to use them, unless you have reason to design your own template classes. Smart pointers are very important if you want to write code that doesn’t crash. It’s very common to mix
std::shared_ptr with JUCE code, although JUCE also has some of its own smart pointers for different uses (SafePointer and OwnedArray are the two that I find most helpful, but there are many more).
There’s another point that I would like to make, which is that there is a big gap between knowing C++ and knowing software development. I like to think of it as analogous to knowing a language vs. knowing how to write a novel. Codeblocks is great for teaching you the language, but most of the solutions don’t need to go before a single function. A software application on the other hand requires hundreds of functions and classes, and the interaction between them gets very complex. I don’t mean to discourage you! You can definitely learn software development, just be ready for a whole new set of challenges.
Also, if you’re using JUCE to build a GUI, then you should know that basically everything revolves around the Component class.
Good luck, and don’t hesitate to ask more questions!