Every time I try to dive into C, C++, Objective-C, or any other high-level language that operates a little *too* close to the metal, I end up running into countless issues with toolchains. I have no problem understanding everything at the highest level (source code, pointers, memory allocation, typing, algorithms, etc) or the lowest level (memory mapping, instruction set architecture, registers, stack pointers, etc). But everything in between seems to be 50 years of historical baggage that I haven't been able to fully grasp.
After literal MONTHS on everything from StackOverflow to WikiPedia to YouTube to learncpp.com I have a theoretical understanding of:
>Name mangling
>Overloading
>Debug symbols
>Executable file formats
>"Fat" binaries
>Linking
>The C Standard Library
>Header search paths
>ANSI-C standards (most recently C++17, upcoming C++20)
>Pre-compiler directives
>Compiler directives
>etc
But not only am I always questioning my knowledge, whenever I try to apply it I run into countless roadblocks with the literal mountain of available tools (make, autoconf, CMake, gcc, clang, LLVM, Xcode, Visual Studio, lipo, binutils, etc) since I don't know exactly what role each tool is supposed to fill, what roles it DOESN'T fill, what it's automating for me, and what I'm expected to do myself. There are thousands of pages of documentation for these tools (ain't nobody got time for that) and hundreds of command line parameters or hidden configuration windows within GUIs and somehow the experts always know exactly which checkbox you need to tick to make your code run but I spend 18+ hours either staring at nonsensical errors or receiving NO meaningful feedback but not getting a working program.
Can anyone recommend a resource for filling in the gaps in my knowledge? Don't say college: I did that. They wasted four years teaching Python and talking about the history of ENIAC (but nothing about the history of Simula, Smalltalk, C, C++, Java, GCC, UNIX, etc)