
Machine generated contents note: IntroductionChapter 1: QualitiesChapter 2: PatternsChapter 3: DesignChapter 4: StylesChapter 5: C++ UsageChapter 6: PerformanceChapter 7: VersioningChapter 8: DocumentationChapter 9: TestingChapter 10: ScriptingChapter 11: ExtensibilityAppendix A: LibrariesBibliographyIndex.
It’s much more efficient to pick a flexible programming language which allows using various concepts (functional, OO, etc) and constructs and then apply it in various domains which exercise those concepts/constructs.
Coding can also be learned. Code complete (2nd) is one of the few books focusing on this area - the author calls it construction - and goes into detail about building functions, parameter passing and so on and so forth.
Another interesting book I read was Martin Reddy’s - API design for C++. You could try finding something similar for your chosen language.
Finally there’s a couple of books by Pete Goodliffe which are language-independent: Code Craft and Becoming a Better Programmer. Naming, comments, error handling - there’s tons of stuff in there.
Now onto the topic of Rust and Go - I’ve recently learned both and am about average skills-wise. Go’s easy (the book Efficient Go covers it) and has many sweet spots like network, cmdline tools, heavy concurrency services. Rust is complicated but you can see that it’s a heavy duty language that you can use almost everywhere. Neither made me a better programmer, because I was familiar with most of the concepts they provided. And the new stuff doesn’t improve ones skills, it’s just tooling.
For books I’d like to add to the current top comment (may go away) API Design for C++. It’s a great reference on exactly what it sounds like.
From http://www.ensisoft.com/temp/cplusplus_stack.png (why is this a PNG and not a JPEG?), Modern C++ Design and C++ Template Metaprogramming are likely to be the most challenging. Don't get me wrong, they are fantastic works, but are probably not what you need right now.
C++ Primer, C++ Common Knowledge, and API Design for C++ are books that I think you should consider that are not listed in the post above. If you have never studied computer architecture it is an important subject to understand. There are good books like Computer Systems: A Programmer's Perspective, but others may have different opinions.
The big takeaway was that the way the project is split into libraries, files, folders etc and how these map to classes, modules and subsystems matters.
To improve, try learning cracking; https://microcorruption.com/ is a CTF game based around gaining access to embedded devices, it's rather fun too. I think what the most common mistake I find is two programmers having different assumptions on how some subsystem should work, so try improving your working memory as being able to remember the seemingly ok code 10 frames ago that conflicts with what's in front of you could be the key.
try:
Working Effectively with Legacy Code Martin, R.
API Design for C++ Reddy, M.
Were both full of indispensable advice.