I believe your current approach is incorrect. C is currently a subset of C++ and does not have many of the concepts of a modern OO language. In most cases, it is relegated to legacy systems, and most new development that is not tied to legacy code is not written in C. Personally, I started with C++ (self taught), and moved to C#. Starting in C++ gives you all of the basics you need to understand object orientation and what's going on at a low level. However, for someone just starting, I would now recommend C# for the simple reason that its much easier to get off the ground and start running with it. Also, several of the concepts in c# have few analogs in the C world and make programming much more intuitive (LINQ, lambdas, etc). While memory management is important (and occasionally shows up in C#) it is painful to manage, and easier not to worry about as you're starting up. The sooner you can start an interesting project, the less likely you are to give up.