There are many components in game programming, e.g. rendering, audio, input, data structures, AI, networking etc. DirectX is a package that offers API for several of that, and as such makes it a relatively difficult package for learning.
For me, as a noob in this area, I learnt other programming lanaguages that offer out-of-the-box GUI rendering e.g. VB6, .NET, JAVA, ActionScript. This removes the need for handling the rendering myself.
Then I play some retro games like Pong, Pacman, Tetris, Space Invaders, Paddle Ball etc and try to implement the same thing with the programming langauges to hone me skills in game architecture.
As I try to make my games better, and from 2D to 3D, I eventually hit hard limitations and then I "upgrade" my technology by using more low level APIs. Doing this allowed myself to appreciate the need and reasoning behind each API's implementation.
When you are expert enough, you can forget all the low level stuff and use an engine like Unity3D.