While I agree with this to some extent. There are some things that you just have to learn for the sake of learning. For example, I probably never would have come up with a divide and conquer algorithm if I had not first been exposed to the idea via learn for the sake of learning.find a project you want to do, then learn as you go
i was never a fan of learning for the sake of learning, i always needed an end goal
What's your overall goal in learning programming?
The next step in learning, if you want to continue to learn more at this point, is probably algorithms. Try Sedgewick's Algorithms in C (the book, linked from here.)
Get a dev board and jump into some embedded programming. I've been working on a project for a few weeks now, and have learned a ton of stuff. Today I had a problem with my program counter getting messed up going into functions. Turned out my stack wasn't big enough and it was getting addresses from who knows where.
Next week(4 day weekend 😎) I'm going to try to get some ADC stuff going.
I would take a different approach and start learning about software analysis and design. Take the top down approach when you are new at programming to help make the end goal more clear and have purpose.
What's your overall goal in learning programming?
The next step in learning, if you want to continue to learn more at this point, is probably algorithms. Try Sedgewick's Algorithms in C (the book, linked from here.)
I wouldn't even get into the Win32/DirectX stuff at this point. I wouldn't lock yourself into windows at this level, learn stuff that will be beneficial no matter the OS. Do some data structures (red-black trees and other fun stuff), and add in some producer/consumer functionality (pthreads!) for the lulz.
When you say you know the fundamentals, does that include object oriented stuff?