You need to have an entire computer science education to be a good programmer.
That means understanding lamdba calculus, turing machines, harvard architecture, Von Neumann architecture, theory of computation, digital logic, CPU design, instruction set architectures, computer hardware, parallelism(ILP, TLP, DLP), software threads, hardware threads, multicore, out of order execution, hyperthreading (SMT), SIMD vector operations, compilers, loop unrolling, x86 ASM, interpreters, C, imperative flow, functional flow, object-oriented flow, set theory, design patterns, data types, C++, Java, Python, networking, software engineering, databases, sockets, APIs, SDKs, Git, control flow, return values, functions, pure functions, side effects, Haskell, operating systems, virtual memory, paging, cache hierarchy, linux, I/O, GPGPU computing, machine learning, data analytics, jupyter, graph theory, algorithms, data structures, Big O notation, calcuating algorithmic complexity, amortized complexity, space complexity, cloud computimg, docker, kubernetes, libraries, frameworks, linking, compile-time optimization, run-time optimization, greedy algorithms, krushkals, djikstras, neural nets, data cleaning, and how to install Gentoo.