Hi tutorial doctor,
there is different schools about learning, I learned by myself mainly because I was passionate about making an adventure game when I was 16. The first thing I played with was basic on Amstrad CPC some years before, I also liked to draw. Later I discovered a software called "Clic and Play" on PC to make small games without coding. After some time only I started learning C and made a small 3d engine for ms-dos. I learned a lot by looking at code from a library called Allegro, and by trial and error.
You don't specially need to know complex syntax and hardware code to make games or softwares today, but what you definitevely need to master is logic. I'm not a hard core programmer, there is a lot of concepts I don't know and I never touched assembly.
In 3d, you need some math basics, specially vectors, with your best friends (dot product, sqrt, cross product...). Alkso learn how to use matrices and what they do (even if you don't know how it works inside).
The way I work is to think about what I want to do on paper, the structure, the logic, before switching on any computer.
I do some research to find good libraries to not write something already existing, then I focus on the general design, trying to keep things as simple as possible. I optimize only the parts that needs it, by anticipation or after profiling.
After, it's passion, curiosity,
and of course time.
(to give you an idea, Maratis it's 10 years of work plus now all the contributors time)