What constitutes a beginner? Just curious--I consider myself a beginner, but I have been programming on and off with C++ for years. Now in my defense I am older than most of the individuals who post here--and I believe that your mind does not work as well after you turn 40.
Now that I stated that I am a beginner, and I have been screwing around for years, what do you expect an individual to know and use with proficiency in C++ before they can be called an intermediate C++ programmer.
Memorizing the syntax does not make a programmer. Being able to solve real world problems and know what tools to use, does. An intermediate programmer would be you're average programmer that can solve typical business problems and write relatively bug free code, that needs direction on more difficult problems (this describes most developers). An expert programmer is everyone else.... and would probably be more along the lines of a programmer that can solve highly complex problems with mostly bug free code that fully understands the underlying concepts of computer science. Problems that fall outside of the normal business op issues for example simulation or scientific programming, or difficult system integrations.
Its very subjective. But I would tend to class people who are still learning the syntax and basic how control loops work, how to define a class etc... as beginners. When they have those things together then I suppose they enter into the intermediate zone. The intermediate zone lasts for about 10 years... ;o)
Regarding what Return 0 said about bugs. There comes a point somewhere along the way when you just get tired of fencing bugs. Then you start to learn how to minimise the risk of introducing bugs and code defensively. Programming then become more about reducing complexity and writing as simple code as possible. It becomes less about solving algorithmic problems and more about building the whole machine in such a way that bugs can be found more easily, additions and modifications are less painful and the original specifications are adhered to more closely.
So I would say:
Beginner: Syntax, basic control structures, standard libraries.
Intermediate: Learning how to design algorithms and apply logic in order to achieve a desired computing goal. How to access databases, how to communicate across a network, how to write graphics etc...
Mature: Taking on board the wider disciplines of design, maintenance and project organisation. Testing regimes, methodological approach. Ways to make the cost of programming less painful and more productive.
I think it is fair to say that the lines between those three can get rather blurred.
The way I see it, "beginner", "intermediate", and "advanced" are vague words with no clear definition. Asking "what makes an intermediate programmer?" is like asking "when does a heap of sand stop being a heap of sand?"
But, if you're looking for some consensus, IMO an average programmer in a given language is one who take someone else's code in any form (binary or source) and do something with it (modify it or use it as a black box) to do something useful. While this may seem like a lax definition, it actually requires a few key skills, such as being able to understand other people's code, read documentation, use the language's library system (in the case of C and C++, this is fairly complicated, specially if you're doing cross-platform development), etc.
I think that's a reasonable definition of "average".