I had this question when I first started learning programming. Because I was doing it on my own, I had no idea of the amount of time I should spend studying to match what schools would do, and working full-time, I had to create myself some schedule to follow. So I did ton of research on just that and read countless forums on how long things are suppose to take…
In the end, here was the result; you never really stop learning, however it takes usually 10,000 hours to become an expert at anything. If you spend 1000 hours a year, then 10 years would be the golden number.
In general it looks like it takes about 500 hours to understand all the basics of a language; arrays, functions, objects, etc. Another 1500 hours to understand more complex parts; templates/generics, smart pointers, overloading functions, (in C# you have delegates, interfaces, lambda expressions and bunch of other stuff that I don’t know what they are in C++ yet
). Then 8000 hours to learn most libraries that target what you wish to do and some other languages to become well diverse.
There will always be new languages features and new libraries to learn and use. So it will never end, however. Once you’ve become familiar with a language and feel comfortable with it, learning new features only takes a few hours. Back a few months ago, C# 4.5 came out with async
keywords. I didn’t have much of a hard time to start using them right away.
A great read is this: http://norvig.com/21-days.html